@liveblocks/react-ui 2.14.0-v2encoding → 2.15.0-debug1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_private/index.d.mts +24 -22
- package/dist/_private/index.d.ts +24 -22
- package/dist/components/Comment.js +355 -254
- package/dist/components/Comment.js.map +1 -1
- package/dist/components/Comment.mjs +330 -229
- package/dist/components/Comment.mjs.map +1 -1
- package/dist/components/Composer.js +304 -221
- package/dist/components/Composer.js.map +1 -1
- package/dist/components/Composer.mjs +278 -195
- package/dist/components/Composer.mjs.map +1 -1
- package/dist/components/HistoryVersionSummary.js +25 -22
- package/dist/components/HistoryVersionSummary.js.map +1 -1
- package/dist/components/HistoryVersionSummary.mjs +24 -21
- package/dist/components/HistoryVersionSummary.mjs.map +1 -1
- package/dist/components/HistoryVersionSummaryList.js +10 -9
- package/dist/components/HistoryVersionSummaryList.js.map +1 -1
- package/dist/components/HistoryVersionSummaryList.mjs +9 -8
- package/dist/components/HistoryVersionSummaryList.mjs.map +1 -1
- package/dist/components/InboxNotification.js +201 -143
- package/dist/components/InboxNotification.js.map +1 -1
- package/dist/components/InboxNotification.mjs +179 -121
- package/dist/components/InboxNotification.mjs.map +1 -1
- package/dist/components/InboxNotificationList.js +18 -14
- package/dist/components/InboxNotificationList.js.map +1 -1
- package/dist/components/InboxNotificationList.mjs +16 -12
- package/dist/components/InboxNotificationList.mjs.map +1 -1
- package/dist/components/Thread.js +103 -86
- package/dist/components/Thread.js.map +1 -1
- package/dist/components/Thread.mjs +92 -75
- package/dist/components/Thread.mjs.map +1 -1
- package/dist/components/internal/Attachment.js +158 -107
- package/dist/components/internal/Attachment.js.map +1 -1
- package/dist/components/internal/Attachment.mjs +147 -96
- package/dist/components/internal/Attachment.mjs.map +1 -1
- package/dist/components/internal/Attribution.js +15 -13
- package/dist/components/internal/Attribution.js.map +1 -1
- package/dist/components/internal/Attribution.mjs +15 -13
- package/dist/components/internal/Attribution.mjs.map +1 -1
- package/dist/components/internal/Avatar.js +26 -20
- package/dist/components/internal/Avatar.js.map +1 -1
- package/dist/components/internal/Avatar.mjs +22 -16
- package/dist/components/internal/Avatar.mjs.map +1 -1
- package/dist/components/internal/Button.js +4 -4
- package/dist/components/internal/Button.js.map +1 -1
- package/dist/components/internal/Button.mjs +3 -3
- package/dist/components/internal/Button.mjs.map +1 -1
- package/dist/components/internal/Dropdown.js +26 -19
- package/dist/components/internal/Dropdown.js.map +1 -1
- package/dist/components/internal/Dropdown.mjs +25 -18
- package/dist/components/internal/Dropdown.mjs.map +1 -1
- package/dist/components/internal/Emoji.js +4 -3
- package/dist/components/internal/Emoji.js.map +1 -1
- package/dist/components/internal/Emoji.mjs +3 -2
- package/dist/components/internal/Emoji.mjs.map +1 -1
- package/dist/components/internal/EmojiPicker.js +96 -72
- package/dist/components/internal/EmojiPicker.js.map +1 -1
- package/dist/components/internal/EmojiPicker.mjs +90 -66
- package/dist/components/internal/EmojiPicker.mjs.map +1 -1
- package/dist/components/internal/Icon.js +5 -4
- package/dist/components/internal/Icon.js.map +1 -1
- package/dist/components/internal/Icon.mjs +5 -4
- package/dist/components/internal/Icon.mjs.map +1 -1
- package/dist/components/internal/InboxNotificationThread.js +53 -38
- package/dist/components/internal/InboxNotificationThread.js.map +1 -1
- package/dist/components/internal/InboxNotificationThread.mjs +53 -38
- package/dist/components/internal/InboxNotificationThread.mjs.map +1 -1
- package/dist/components/internal/List.js +8 -6
- package/dist/components/internal/List.js.map +1 -1
- package/dist/components/internal/List.mjs +6 -4
- package/dist/components/internal/List.mjs.map +1 -1
- package/dist/components/internal/Room.js +7 -6
- package/dist/components/internal/Room.js.map +1 -1
- package/dist/components/internal/Room.mjs +6 -5
- package/dist/components/internal/Room.mjs.map +1 -1
- package/dist/components/internal/Tooltip.js +48 -33
- package/dist/components/internal/Tooltip.js.map +1 -1
- package/dist/components/internal/Tooltip.mjs +45 -30
- package/dist/components/internal/Tooltip.mjs.map +1 -1
- package/dist/components/internal/User.js +7 -6
- package/dist/components/internal/User.js.map +1 -1
- package/dist/components/internal/User.mjs +6 -5
- package/dist/components/internal/User.mjs.map +1 -1
- package/dist/components.js +11 -29
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +5 -5
- package/dist/components.mjs.map +1 -1
- package/dist/config.js +15 -12
- package/dist/config.js.map +1 -1
- package/dist/config.mjs +12 -9
- package/dist/config.mjs.map +1 -1
- package/dist/icons/ArrowDown.js +7 -6
- package/dist/icons/ArrowDown.js.map +1 -1
- package/dist/icons/ArrowDown.mjs +7 -6
- package/dist/icons/ArrowDown.mjs.map +1 -1
- package/dist/icons/ArrowUp.js +7 -6
- package/dist/icons/ArrowUp.js.map +1 -1
- package/dist/icons/ArrowUp.mjs +7 -6
- package/dist/icons/ArrowUp.mjs.map +1 -1
- package/dist/icons/Attachment.js +7 -6
- package/dist/icons/Attachment.js.map +1 -1
- package/dist/icons/Attachment.mjs +7 -6
- package/dist/icons/Attachment.mjs.map +1 -1
- package/dist/icons/Bold.js +7 -6
- package/dist/icons/Bold.js.map +1 -1
- package/dist/icons/Bold.mjs +7 -6
- package/dist/icons/Bold.mjs.map +1 -1
- package/dist/icons/Check.js +7 -6
- package/dist/icons/Check.js.map +1 -1
- package/dist/icons/Check.mjs +7 -6
- package/dist/icons/Check.mjs.map +1 -1
- package/dist/icons/Code.js +7 -6
- package/dist/icons/Code.js.map +1 -1
- package/dist/icons/Code.mjs +7 -6
- package/dist/icons/Code.mjs.map +1 -1
- package/dist/icons/Cross.js +12 -8
- package/dist/icons/Cross.js.map +1 -1
- package/dist/icons/Cross.mjs +12 -8
- package/dist/icons/Cross.mjs.map +1 -1
- package/dist/icons/Delete.js +7 -6
- package/dist/icons/Delete.js.map +1 -1
- package/dist/icons/Delete.mjs +7 -6
- package/dist/icons/Delete.mjs.map +1 -1
- package/dist/icons/Edit.js +7 -6
- package/dist/icons/Edit.js.map +1 -1
- package/dist/icons/Edit.mjs +7 -6
- package/dist/icons/Edit.mjs.map +1 -1
- package/dist/icons/Ellipsis.js +21 -16
- package/dist/icons/Ellipsis.js.map +1 -1
- package/dist/icons/Ellipsis.mjs +21 -16
- package/dist/icons/Ellipsis.mjs.map +1 -1
- package/dist/icons/Emoji.js +25 -18
- package/dist/icons/Emoji.js.map +1 -1
- package/dist/icons/Emoji.mjs +25 -18
- package/dist/icons/Emoji.mjs.map +1 -1
- package/dist/icons/EmojiAdd.js +28 -20
- package/dist/icons/EmojiAdd.js.map +1 -1
- package/dist/icons/EmojiAdd.mjs +28 -20
- package/dist/icons/EmojiAdd.mjs.map +1 -1
- package/dist/icons/Italic.js +7 -6
- package/dist/icons/Italic.js.map +1 -1
- package/dist/icons/Italic.mjs +7 -6
- package/dist/icons/Italic.mjs.map +1 -1
- package/dist/icons/Mention.js +12 -8
- package/dist/icons/Mention.js.map +1 -1
- package/dist/icons/Mention.mjs +12 -8
- package/dist/icons/Mention.mjs.map +1 -1
- package/dist/icons/Resolve.js +14 -10
- package/dist/icons/Resolve.js.map +1 -1
- package/dist/icons/Resolve.mjs +14 -10
- package/dist/icons/Resolve.mjs.map +1 -1
- package/dist/icons/Resolved.js +16 -12
- package/dist/icons/Resolved.js.map +1 -1
- package/dist/icons/Resolved.mjs +16 -12
- package/dist/icons/Resolved.mjs.map +1 -1
- package/dist/icons/Restore.js +12 -8
- package/dist/icons/Restore.js.map +1 -1
- package/dist/icons/Restore.mjs +12 -8
- package/dist/icons/Restore.mjs.map +1 -1
- package/dist/icons/Search.js +7 -6
- package/dist/icons/Search.js.map +1 -1
- package/dist/icons/Search.mjs +7 -6
- package/dist/icons/Search.mjs.map +1 -1
- package/dist/icons/Send.js +7 -6
- package/dist/icons/Send.js.map +1 -1
- package/dist/icons/Send.mjs +7 -6
- package/dist/icons/Send.mjs.map +1 -1
- package/dist/icons/Spinner.js +8 -7
- package/dist/icons/Spinner.js.map +1 -1
- package/dist/icons/Spinner.mjs +8 -7
- package/dist/icons/Spinner.mjs.map +1 -1
- package/dist/icons/Strikethrough.js +7 -6
- package/dist/icons/Strikethrough.js.map +1 -1
- package/dist/icons/Strikethrough.mjs +7 -6
- package/dist/icons/Strikethrough.mjs.map +1 -1
- package/dist/icons/Warning.js +14 -10
- package/dist/icons/Warning.js.map +1 -1
- package/dist/icons/Warning.mjs +14 -10
- package/dist/icons/Warning.mjs.map +1 -1
- package/dist/index.d.mts +14 -12
- package/dist/index.d.ts +14 -12
- package/dist/overrides.js +64 -36
- package/dist/overrides.js.map +1 -1
- package/dist/overrides.mjs +58 -12
- package/dist/overrides.mjs.map +1 -1
- package/dist/primitives/Comment/index.js +75 -66
- package/dist/primitives/Comment/index.js.map +1 -1
- package/dist/primitives/Comment/index.mjs +71 -62
- package/dist/primitives/Comment/index.mjs.map +1 -1
- package/dist/primitives/Composer/contexts.js +11 -11
- package/dist/primitives/Composer/index.js +327 -270
- package/dist/primitives/Composer/index.js.map +1 -1
- package/dist/primitives/Composer/index.mjs +250 -193
- package/dist/primitives/Composer/index.mjs.map +1 -1
- package/dist/primitives/Composer/utils.js +18 -20
- package/dist/primitives/Composer/utils.js.map +1 -1
- package/dist/primitives/Composer/utils.mjs +1 -3
- package/dist/primitives/Composer/utils.mjs.map +1 -1
- package/dist/primitives/EmojiPicker/contexts.js +3 -3
- package/dist/primitives/EmojiPicker/index.js +159 -142
- package/dist/primitives/EmojiPicker/index.js.map +1 -1
- package/dist/primitives/EmojiPicker/index.mjs +120 -103
- package/dist/primitives/EmojiPicker/index.mjs.map +1 -1
- package/dist/primitives/FileSize.js +8 -7
- package/dist/primitives/FileSize.js.map +1 -1
- package/dist/primitives/FileSize.mjs +6 -5
- package/dist/primitives/FileSize.mjs.map +1 -1
- package/dist/primitives/Timestamp.js +11 -10
- package/dist/primitives/Timestamp.js.map +1 -1
- package/dist/primitives/Timestamp.mjs +6 -5
- package/dist/primitives/Timestamp.mjs.map +1 -1
- package/dist/primitives/index.d.mts +24 -23
- package/dist/primitives/index.d.ts +24 -23
- package/dist/primitives/internal/Emoji.js +7 -5
- package/dist/primitives/internal/Emoji.js.map +1 -1
- package/dist/primitives/internal/Emoji.mjs +6 -4
- package/dist/primitives/internal/Emoji.mjs.map +1 -1
- package/dist/shared.js +2 -7
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +2 -7
- package/dist/shared.mjs.map +1 -1
- package/dist/utils/Persist.js +18 -18
- package/dist/utils/Persist.js.map +1 -1
- package/dist/utils/Persist.mjs +6 -6
- package/dist/utils/Persist.mjs.map +1 -1
- package/dist/utils/Portal.js +4 -4
- package/dist/utils/Portal.js.map +1 -1
- package/dist/utils/Portal.mjs +3 -3
- package/dist/utils/Portal.mjs.map +1 -1
- package/dist/utils/use-controllable-state.js +5 -5
- package/dist/utils/use-index.js +7 -7
- package/dist/utils/use-initial.js +2 -2
- package/dist/utils/use-interval.js +4 -4
- package/dist/utils/use-latest.js +3 -3
- package/dist/utils/use-observable.js +2 -2
- package/dist/utils/use-refs.js +2 -2
- package/dist/utils/use-rerender.js +2 -2
- package/dist/utils/use-visible.js +2 -2
- package/dist/utils/use-window-focus.js +2 -2
- package/dist/utils/use-window-focus.js.map +1 -1
- package/dist/utils/use-window-focus.mjs +1 -1
- package/dist/utils/use-window-focus.mjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/version.mjs +1 -1
- package/dist/version.mjs.map +1 -1
- package/package.json +6 -8
- package/dist/utils/use-id.js +0 -29
- package/dist/utils/use-id.js.map +0 -1
- package/dist/utils/use-id.mjs +0 -27
- package/dist/utils/use-id.mjs.map +0 -1
- package/dist/utils/use-layout-effect.js +0 -8
- package/dist/utils/use-layout-effect.js.map +0 -1
- package/dist/utils/use-layout-effect.mjs +0 -6
- package/dist/utils/use-layout-effect.mjs.map +0 -1
- package/dist/utils/use-transition.js +0 -16
- package/dist/utils/use-transition.js.map +0 -1
- package/dist/utils/use-transition.mjs +0 -14
- package/dist/utils/use-transition.mjs.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
'use client';
|
|
2
1
|
'use strict';
|
|
3
2
|
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var core = require('@liveblocks/core');
|
|
5
5
|
var _private = require('@liveblocks/react/_private');
|
|
6
6
|
var reactSlot = require('@radix-ui/react-slot');
|
|
7
7
|
var TogglePrimitive = require('@radix-ui/react-toggle');
|
|
8
|
-
var
|
|
8
|
+
var react = require('react');
|
|
9
9
|
var slate = require('slate');
|
|
10
10
|
var slateHistory = require('slate-history');
|
|
11
11
|
var slateReact = require('slate-react');
|
|
@@ -24,10 +24,8 @@ var isKey = require('../../utils/is-key.js');
|
|
|
24
24
|
var Persist = require('../../utils/Persist.js');
|
|
25
25
|
var Portal = require('../../utils/Portal.js');
|
|
26
26
|
var requestSubmit = require('../../utils/request-submit.js');
|
|
27
|
-
var useId = require('../../utils/use-id.js');
|
|
28
27
|
var useIndex = require('../../utils/use-index.js');
|
|
29
28
|
var useInitial = require('../../utils/use-initial.js');
|
|
30
|
-
var useLayoutEffect = require('../../utils/use-layout-effect.js');
|
|
31
29
|
var useObservable = require('../../utils/use-observable.js');
|
|
32
30
|
var useRefs = require('../../utils/use-refs.js');
|
|
33
31
|
var utils$1 = require('../Comment/utils.js');
|
|
@@ -99,12 +97,16 @@ function ComposerEditorMentionWrapper({
|
|
|
99
97
|
element
|
|
100
98
|
}) {
|
|
101
99
|
const isSelected = slateReact.useSelected();
|
|
102
|
-
return /* @__PURE__ */
|
|
103
|
-
...attributes
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
100
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", {
|
|
101
|
+
...attributes,
|
|
102
|
+
children: [
|
|
103
|
+
element.id ? /* @__PURE__ */ jsxRuntime.jsx(Mention, {
|
|
104
|
+
userId: element.id,
|
|
105
|
+
isSelected
|
|
106
|
+
}) : null,
|
|
107
|
+
children
|
|
108
|
+
]
|
|
109
|
+
});
|
|
108
110
|
}
|
|
109
111
|
function ComposerEditorLinkWrapper({
|
|
110
112
|
Link,
|
|
@@ -112,15 +114,17 @@ function ComposerEditorLinkWrapper({
|
|
|
112
114
|
element,
|
|
113
115
|
children
|
|
114
116
|
}) {
|
|
115
|
-
const href =
|
|
117
|
+
const href = react.useMemo(
|
|
116
118
|
() => utils$1.toAbsoluteUrl(element.url) ?? element.url,
|
|
117
119
|
[element.url]
|
|
118
120
|
);
|
|
119
|
-
return /* @__PURE__ */
|
|
120
|
-
...attributes
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
122
|
+
...attributes,
|
|
123
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Link, {
|
|
124
|
+
href,
|
|
125
|
+
children
|
|
126
|
+
})
|
|
127
|
+
});
|
|
124
128
|
}
|
|
125
129
|
function ComposerEditorMentionSuggestionsWrapper({
|
|
126
130
|
id,
|
|
@@ -157,7 +161,7 @@ function ComposerEditorMentionSuggestionsWrapper({
|
|
|
157
161
|
useObservable.useObservable(onEditorChange, () => {
|
|
158
162
|
setMentionDraft(mentions.getMentionDraftAtSelection(editor));
|
|
159
163
|
});
|
|
160
|
-
|
|
164
|
+
react.useLayoutEffect(() => {
|
|
161
165
|
if (!mentionDraft) {
|
|
162
166
|
setReference(null);
|
|
163
167
|
return;
|
|
@@ -165,32 +169,36 @@ function ComposerEditorMentionSuggestionsWrapper({
|
|
|
165
169
|
const domRange = getDomRange.getDOMRange(editor, mentionDraft.range);
|
|
166
170
|
setReference(domRange ?? null);
|
|
167
171
|
}, [setReference, editor, mentionDraft]);
|
|
168
|
-
return /* @__PURE__ */
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
172
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Persist.Persist, {
|
|
173
|
+
children: isOpen ? /* @__PURE__ */ jsxRuntime.jsx(contexts.ComposerSuggestionsContext.Provider, {
|
|
174
|
+
value: {
|
|
175
|
+
id,
|
|
176
|
+
itemId,
|
|
177
|
+
selectedValue: selectedUserId,
|
|
178
|
+
setSelectedValue: setSelectedUserId,
|
|
179
|
+
onItemSelect,
|
|
180
|
+
placement,
|
|
181
|
+
dir,
|
|
182
|
+
ref: contentRef
|
|
183
|
+
},
|
|
184
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Portal.Portal, {
|
|
185
|
+
ref: setFloating,
|
|
186
|
+
container: portalContainer,
|
|
187
|
+
style: {
|
|
188
|
+
position: strategy,
|
|
189
|
+
top: 0,
|
|
190
|
+
left: 0,
|
|
191
|
+
transform: isPositioned ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)` : "translate3d(0, -200%, 0)",
|
|
192
|
+
minWidth: "max-content",
|
|
193
|
+
zIndex: contentZIndex
|
|
194
|
+
},
|
|
195
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(MentionSuggestions, {
|
|
196
|
+
userIds,
|
|
197
|
+
selectedUserId
|
|
198
|
+
})
|
|
199
|
+
})
|
|
200
|
+
}) : null
|
|
201
|
+
});
|
|
194
202
|
}
|
|
195
203
|
function ComposerEditorFloatingToolbarWrapper({
|
|
196
204
|
id,
|
|
@@ -205,7 +213,7 @@ function ComposerEditorFloatingToolbarWrapper({
|
|
|
205
213
|
const { isFocused } = contexts.useComposer();
|
|
206
214
|
const { portalContainer } = config.useLiveblocksUIConfig();
|
|
207
215
|
const [contentRef, contentZIndex] = utils.useContentZIndex();
|
|
208
|
-
const [isPointerDown, setPointerDown] =
|
|
216
|
+
const [isPointerDown, setPointerDown] = react.useState(false);
|
|
209
217
|
const isOpen = isFocused && !isPointerDown && hasFloatingToolbarRange;
|
|
210
218
|
const {
|
|
211
219
|
refs: { setReference, setFloating },
|
|
@@ -221,7 +229,7 @@ function ComposerEditorFloatingToolbarWrapper({
|
|
|
221
229
|
alignment: "center",
|
|
222
230
|
open: isOpen
|
|
223
231
|
});
|
|
224
|
-
|
|
232
|
+
react.useLayoutEffect(() => {
|
|
225
233
|
if (!isFocused) {
|
|
226
234
|
return;
|
|
227
235
|
}
|
|
@@ -248,29 +256,33 @@ function ComposerEditorFloatingToolbarWrapper({
|
|
|
248
256
|
}
|
|
249
257
|
});
|
|
250
258
|
});
|
|
251
|
-
return /* @__PURE__ */
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
259
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Persist.Persist, {
|
|
260
|
+
children: isOpen ? /* @__PURE__ */ jsxRuntime.jsx(contexts.ComposerFloatingToolbarContext.Provider, {
|
|
261
|
+
value: {
|
|
262
|
+
id,
|
|
263
|
+
placement,
|
|
264
|
+
dir,
|
|
265
|
+
ref: contentRef
|
|
266
|
+
},
|
|
267
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Portal.Portal, {
|
|
268
|
+
ref: setFloating,
|
|
269
|
+
container: portalContainer,
|
|
270
|
+
style: {
|
|
271
|
+
position: strategy,
|
|
272
|
+
top: 0,
|
|
273
|
+
left: 0,
|
|
274
|
+
transform: isPositioned ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)` : "translate3d(0, -200%, 0)",
|
|
275
|
+
minWidth: "max-content",
|
|
276
|
+
zIndex: contentZIndex
|
|
277
|
+
},
|
|
278
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(FloatingToolbar, {})
|
|
279
|
+
})
|
|
280
|
+
}) : null
|
|
281
|
+
});
|
|
270
282
|
}
|
|
271
|
-
const ComposerFloatingToolbar =
|
|
283
|
+
const ComposerFloatingToolbar = react.forwardRef(({ children, onPointerDown, style, asChild, ...props }, forwardedRef) => {
|
|
272
284
|
const [isPresent] = Persist.usePersist();
|
|
273
|
-
const ref =
|
|
285
|
+
const ref = react.useRef(null);
|
|
274
286
|
const {
|
|
275
287
|
id,
|
|
276
288
|
ref: contentRef,
|
|
@@ -278,13 +290,13 @@ const ComposerFloatingToolbar = React.forwardRef(({ children, onPointerDown, sty
|
|
|
278
290
|
dir
|
|
279
291
|
} = contexts.useComposerFloatingToolbarContext(COMPOSER_FLOATING_TOOLBAR_NAME);
|
|
280
292
|
const mergedRefs = useRefs.useRefs(forwardedRef, contentRef, ref);
|
|
281
|
-
const [side, align] =
|
|
293
|
+
const [side, align] = react.useMemo(
|
|
282
294
|
() => utils.getSideAndAlignFromFloatingPlacement(placement),
|
|
283
295
|
[placement]
|
|
284
296
|
);
|
|
285
297
|
const Component = asChild ? reactSlot.Slot : "div";
|
|
286
298
|
Persist.useAnimationPersist(ref);
|
|
287
|
-
const handlePointerDown =
|
|
299
|
+
const handlePointerDown = react.useCallback(
|
|
288
300
|
(event) => {
|
|
289
301
|
onPointerDown?.(event);
|
|
290
302
|
event.preventDefault();
|
|
@@ -292,7 +304,7 @@ const ComposerFloatingToolbar = React.forwardRef(({ children, onPointerDown, sty
|
|
|
292
304
|
},
|
|
293
305
|
[onPointerDown]
|
|
294
306
|
);
|
|
295
|
-
return /* @__PURE__ */
|
|
307
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
296
308
|
dir,
|
|
297
309
|
role: "toolbar",
|
|
298
310
|
id,
|
|
@@ -309,8 +321,9 @@ const ComposerFloatingToolbar = React.forwardRef(({ children, onPointerDown, sty
|
|
|
309
321
|
overflowX: "auto",
|
|
310
322
|
...style
|
|
311
323
|
},
|
|
312
|
-
ref: mergedRefs
|
|
313
|
-
|
|
324
|
+
ref: mergedRefs,
|
|
325
|
+
children
|
|
326
|
+
});
|
|
314
327
|
});
|
|
315
328
|
function ComposerEditorElement({
|
|
316
329
|
Mention,
|
|
@@ -320,91 +333,104 @@ function ComposerEditorElement({
|
|
|
320
333
|
const { attributes, children, element } = props;
|
|
321
334
|
switch (element.type) {
|
|
322
335
|
case "mention":
|
|
323
|
-
return /* @__PURE__ */
|
|
336
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ComposerEditorMentionWrapper, {
|
|
324
337
|
Mention,
|
|
325
338
|
...props
|
|
326
339
|
});
|
|
327
340
|
case "auto-link":
|
|
328
341
|
case "custom-link":
|
|
329
|
-
return /* @__PURE__ */
|
|
342
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ComposerEditorLinkWrapper, {
|
|
330
343
|
Link,
|
|
331
344
|
...props
|
|
332
345
|
});
|
|
333
346
|
case "paragraph":
|
|
334
|
-
return /* @__PURE__ */
|
|
347
|
+
return /* @__PURE__ */ jsxRuntime.jsx("p", {
|
|
335
348
|
...attributes,
|
|
336
|
-
style: { position: "relative" }
|
|
337
|
-
|
|
349
|
+
style: { position: "relative" },
|
|
350
|
+
children
|
|
351
|
+
});
|
|
338
352
|
default:
|
|
339
353
|
return null;
|
|
340
354
|
}
|
|
341
355
|
}
|
|
342
356
|
function ComposerEditorLeaf({ attributes, children, leaf }) {
|
|
343
357
|
if (leaf.bold) {
|
|
344
|
-
children = /* @__PURE__ */
|
|
358
|
+
children = /* @__PURE__ */ jsxRuntime.jsx("strong", {
|
|
359
|
+
children
|
|
360
|
+
});
|
|
345
361
|
}
|
|
346
362
|
if (leaf.italic) {
|
|
347
|
-
children = /* @__PURE__ */
|
|
363
|
+
children = /* @__PURE__ */ jsxRuntime.jsx("em", {
|
|
364
|
+
children
|
|
365
|
+
});
|
|
348
366
|
}
|
|
349
367
|
if (leaf.strikethrough) {
|
|
350
|
-
children = /* @__PURE__ */
|
|
368
|
+
children = /* @__PURE__ */ jsxRuntime.jsx("s", {
|
|
369
|
+
children
|
|
370
|
+
});
|
|
351
371
|
}
|
|
352
372
|
if (leaf.code) {
|
|
353
|
-
children = /* @__PURE__ */
|
|
373
|
+
children = /* @__PURE__ */ jsxRuntime.jsx("code", {
|
|
374
|
+
children
|
|
375
|
+
});
|
|
354
376
|
}
|
|
355
|
-
return /* @__PURE__ */
|
|
356
|
-
...attributes
|
|
357
|
-
|
|
377
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
378
|
+
...attributes,
|
|
379
|
+
children
|
|
380
|
+
});
|
|
358
381
|
}
|
|
359
382
|
function ComposerEditorPlaceholder({
|
|
360
383
|
attributes,
|
|
361
384
|
children
|
|
362
385
|
}) {
|
|
363
386
|
const { opacity: _opacity, ...style } = attributes.style;
|
|
364
|
-
return /* @__PURE__ */
|
|
387
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
365
388
|
...attributes,
|
|
366
389
|
style,
|
|
367
|
-
"data-placeholder": ""
|
|
368
|
-
|
|
390
|
+
"data-placeholder": "",
|
|
391
|
+
children
|
|
392
|
+
});
|
|
369
393
|
}
|
|
370
|
-
const ComposerMention =
|
|
394
|
+
const ComposerMention = react.forwardRef(
|
|
371
395
|
({ children, asChild, ...props }, forwardedRef) => {
|
|
372
396
|
const Component = asChild ? reactSlot.Slot : "span";
|
|
373
397
|
const isSelected = slateReact.useSelected();
|
|
374
|
-
return /* @__PURE__ */
|
|
398
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
375
399
|
"data-selected": isSelected || void 0,
|
|
376
400
|
...props,
|
|
377
|
-
ref: forwardedRef
|
|
378
|
-
|
|
401
|
+
ref: forwardedRef,
|
|
402
|
+
children
|
|
403
|
+
});
|
|
379
404
|
}
|
|
380
405
|
);
|
|
381
|
-
const ComposerLink =
|
|
406
|
+
const ComposerLink = react.forwardRef(
|
|
382
407
|
({ children, asChild, ...props }, forwardedRef) => {
|
|
383
408
|
const Component = asChild ? reactSlot.Slot : "a";
|
|
384
|
-
return /* @__PURE__ */
|
|
409
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
385
410
|
target: "_blank",
|
|
386
411
|
rel: "noopener noreferrer nofollow",
|
|
387
412
|
...props,
|
|
388
|
-
ref: forwardedRef
|
|
389
|
-
|
|
413
|
+
ref: forwardedRef,
|
|
414
|
+
children
|
|
415
|
+
});
|
|
390
416
|
}
|
|
391
417
|
);
|
|
392
|
-
const ComposerSuggestions =
|
|
418
|
+
const ComposerSuggestions = react.forwardRef(({ children, style, asChild, ...props }, forwardedRef) => {
|
|
393
419
|
const [isPresent] = Persist.usePersist();
|
|
394
|
-
const ref =
|
|
420
|
+
const ref = react.useRef(null);
|
|
395
421
|
const {
|
|
396
422
|
ref: contentRef,
|
|
397
423
|
placement,
|
|
398
424
|
dir
|
|
399
425
|
} = contexts.useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_NAME);
|
|
400
426
|
const mergedRefs = useRefs.useRefs(forwardedRef, contentRef, ref);
|
|
401
|
-
const [side, align] =
|
|
427
|
+
const [side, align] = react.useMemo(
|
|
402
428
|
() => utils.getSideAndAlignFromFloatingPlacement(placement),
|
|
403
429
|
[placement]
|
|
404
430
|
);
|
|
405
431
|
const Component = asChild ? reactSlot.Slot : "div";
|
|
406
432
|
Persist.useAnimationPersist(ref);
|
|
407
|
-
return /* @__PURE__ */
|
|
433
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
408
434
|
dir,
|
|
409
435
|
...props,
|
|
410
436
|
"data-state": isPresent ? "open" : "closed",
|
|
@@ -417,21 +443,23 @@ const ComposerSuggestions = React.forwardRef(({ children, style, asChild, ...pro
|
|
|
417
443
|
overflowY: "auto",
|
|
418
444
|
...style
|
|
419
445
|
},
|
|
420
|
-
ref: mergedRefs
|
|
421
|
-
|
|
446
|
+
ref: mergedRefs,
|
|
447
|
+
children
|
|
448
|
+
});
|
|
422
449
|
});
|
|
423
|
-
const ComposerSuggestionsList =
|
|
450
|
+
const ComposerSuggestionsList = react.forwardRef(({ children, asChild, ...props }, forwardedRef) => {
|
|
424
451
|
const { id } = contexts.useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_LIST_NAME);
|
|
425
452
|
const Component = asChild ? reactSlot.Slot : "ul";
|
|
426
|
-
return /* @__PURE__ */
|
|
453
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
427
454
|
role: "listbox",
|
|
428
455
|
id,
|
|
429
456
|
"aria-label": "Suggestions list",
|
|
430
457
|
...props,
|
|
431
|
-
ref: forwardedRef
|
|
432
|
-
|
|
458
|
+
ref: forwardedRef,
|
|
459
|
+
children
|
|
460
|
+
});
|
|
433
461
|
});
|
|
434
|
-
const ComposerSuggestionsListItem =
|
|
462
|
+
const ComposerSuggestionsListItem = react.forwardRef(
|
|
435
463
|
({
|
|
436
464
|
value,
|
|
437
465
|
children,
|
|
@@ -441,21 +469,21 @@ const ComposerSuggestionsListItem = React.forwardRef(
|
|
|
441
469
|
asChild,
|
|
442
470
|
...props
|
|
443
471
|
}, forwardedRef) => {
|
|
444
|
-
const ref =
|
|
472
|
+
const ref = react.useRef(null);
|
|
445
473
|
const mergedRefs = useRefs.useRefs(forwardedRef, ref);
|
|
446
474
|
const { selectedValue, setSelectedValue, itemId, onItemSelect } = contexts.useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_LIST_ITEM_NAME);
|
|
447
475
|
const Component = asChild ? reactSlot.Slot : "li";
|
|
448
|
-
const isSelected =
|
|
476
|
+
const isSelected = react.useMemo(
|
|
449
477
|
() => selectedValue === value,
|
|
450
478
|
[selectedValue, value]
|
|
451
479
|
);
|
|
452
|
-
const id =
|
|
453
|
-
|
|
480
|
+
const id = react.useMemo(() => itemId(value), [itemId, value]);
|
|
481
|
+
react.useEffect(() => {
|
|
454
482
|
if (ref?.current && isSelected) {
|
|
455
483
|
ref.current.scrollIntoView({ block: "nearest" });
|
|
456
484
|
}
|
|
457
485
|
}, [isSelected]);
|
|
458
|
-
const handlePointerMove =
|
|
486
|
+
const handlePointerMove = react.useCallback(
|
|
459
487
|
(event) => {
|
|
460
488
|
onPointerMove?.(event);
|
|
461
489
|
if (!event.isDefaultPrevented()) {
|
|
@@ -464,7 +492,7 @@ const ComposerSuggestionsListItem = React.forwardRef(
|
|
|
464
492
|
},
|
|
465
493
|
[onPointerMove, setSelectedValue, value]
|
|
466
494
|
);
|
|
467
|
-
const handlePointerDown =
|
|
495
|
+
const handlePointerDown = react.useCallback(
|
|
468
496
|
(event) => {
|
|
469
497
|
onPointerDown?.(event);
|
|
470
498
|
event.preventDefault();
|
|
@@ -472,7 +500,7 @@ const ComposerSuggestionsListItem = React.forwardRef(
|
|
|
472
500
|
},
|
|
473
501
|
[onPointerDown]
|
|
474
502
|
);
|
|
475
|
-
const handleClick =
|
|
503
|
+
const handleClick = react.useCallback(
|
|
476
504
|
(event) => {
|
|
477
505
|
onClick?.(event);
|
|
478
506
|
const wasDefaultPrevented = event.isDefaultPrevented();
|
|
@@ -484,7 +512,7 @@ const ComposerSuggestionsListItem = React.forwardRef(
|
|
|
484
512
|
},
|
|
485
513
|
[onClick, onItemSelect, value]
|
|
486
514
|
);
|
|
487
|
-
return /* @__PURE__ */
|
|
515
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
488
516
|
role: "option",
|
|
489
517
|
id,
|
|
490
518
|
"data-selected": isSelected || void 0,
|
|
@@ -493,27 +521,38 @@ const ComposerSuggestionsListItem = React.forwardRef(
|
|
|
493
521
|
onPointerDown: handlePointerDown,
|
|
494
522
|
onClick: handleClick,
|
|
495
523
|
...props,
|
|
496
|
-
ref: mergedRefs
|
|
497
|
-
|
|
524
|
+
ref: mergedRefs,
|
|
525
|
+
children
|
|
526
|
+
});
|
|
498
527
|
}
|
|
499
528
|
);
|
|
500
529
|
const defaultEditorComponents = {
|
|
501
530
|
Link: ({ href, children }) => {
|
|
502
|
-
return /* @__PURE__ */
|
|
503
|
-
href
|
|
504
|
-
|
|
531
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ComposerLink, {
|
|
532
|
+
href,
|
|
533
|
+
children
|
|
534
|
+
});
|
|
505
535
|
},
|
|
506
536
|
Mention: ({ userId }) => {
|
|
507
|
-
return /* @__PURE__ */
|
|
537
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(ComposerMention, {
|
|
538
|
+
children: [
|
|
539
|
+
mentions.MENTION_CHARACTER,
|
|
540
|
+
userId
|
|
541
|
+
]
|
|
542
|
+
});
|
|
508
543
|
},
|
|
509
544
|
MentionSuggestions: ({ userIds }) => {
|
|
510
|
-
return userIds.length > 0 ? /* @__PURE__ */
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
545
|
+
return userIds.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(ComposerSuggestions, {
|
|
546
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ComposerSuggestionsList, {
|
|
547
|
+
children: userIds.map((userId) => /* @__PURE__ */ jsxRuntime.jsx(ComposerSuggestionsListItem, {
|
|
548
|
+
value: userId,
|
|
549
|
+
children: userId
|
|
550
|
+
}, userId))
|
|
551
|
+
})
|
|
552
|
+
}) : null;
|
|
514
553
|
}
|
|
515
554
|
};
|
|
516
|
-
const ComposerEditor =
|
|
555
|
+
const ComposerEditor = react.forwardRef(
|
|
517
556
|
({
|
|
518
557
|
defaultValue,
|
|
519
558
|
onKeyDown,
|
|
@@ -538,17 +577,17 @@ const ComposerEditor = React.forwardRef(
|
|
|
538
577
|
} = contexts.useComposer();
|
|
539
578
|
const isDisabled = isComposerDisabled || disabled;
|
|
540
579
|
const initialBody = useInitial.useInitial(defaultValue ?? emptyCommentBody);
|
|
541
|
-
const initialEditorValue =
|
|
580
|
+
const initialEditorValue = react.useMemo(() => {
|
|
542
581
|
return utils.commentBodyToComposerBody(initialBody);
|
|
543
582
|
}, [initialBody]);
|
|
544
|
-
const { Link, Mention, MentionSuggestions, FloatingToolbar } =
|
|
583
|
+
const { Link, Mention, MentionSuggestions, FloatingToolbar } = react.useMemo(
|
|
545
584
|
() => ({ ...defaultEditorComponents, ...components }),
|
|
546
585
|
[components]
|
|
547
586
|
);
|
|
548
|
-
const [hasFloatingToolbarRange, setHasFloatingToolbarRange] =
|
|
587
|
+
const [hasFloatingToolbarRange, setHasFloatingToolbarRange] = react.useState(false);
|
|
549
588
|
const resolveMentionSuggestions = _private.useResolveMentionSuggestions();
|
|
550
589
|
const hasResolveMentionSuggestions = client ? resolveMentionSuggestions : true;
|
|
551
|
-
const [mentionDraft, setMentionDraft] =
|
|
590
|
+
const [mentionDraft, setMentionDraft] = react.useState();
|
|
552
591
|
const mentionSuggestions = _private.useMentionSuggestions(
|
|
553
592
|
roomId,
|
|
554
593
|
mentionDraft?.text
|
|
@@ -559,22 +598,22 @@ const ComposerEditor = React.forwardRef(
|
|
|
559
598
|
setNextSelectedMentionSuggestionIndex,
|
|
560
599
|
setSelectedMentionSuggestionIndex
|
|
561
600
|
] = useIndex.useIndex(0, mentionSuggestions?.length ?? 0);
|
|
562
|
-
const id =
|
|
563
|
-
const floatingToolbarId =
|
|
601
|
+
const id = react.useId();
|
|
602
|
+
const floatingToolbarId = react.useMemo(
|
|
564
603
|
() => `liveblocks-floating-toolbar-${id}`,
|
|
565
604
|
[id]
|
|
566
605
|
);
|
|
567
|
-
const suggestionsListId =
|
|
606
|
+
const suggestionsListId = react.useMemo(
|
|
568
607
|
() => `liveblocks-suggestions-list-${id}`,
|
|
569
608
|
[id]
|
|
570
609
|
);
|
|
571
|
-
const suggestionsListItemId =
|
|
610
|
+
const suggestionsListItemId = react.useCallback(
|
|
572
611
|
(userId) => userId ? `liveblocks-suggestions-list-item-${id}-${userId}` : void 0,
|
|
573
612
|
[id]
|
|
574
613
|
);
|
|
575
|
-
const renderElement =
|
|
614
|
+
const renderElement = react.useCallback(
|
|
576
615
|
(props2) => {
|
|
577
|
-
return /* @__PURE__ */
|
|
616
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ComposerEditorElement, {
|
|
578
617
|
Mention,
|
|
579
618
|
Link,
|
|
580
619
|
...props2
|
|
@@ -582,14 +621,14 @@ const ComposerEditor = React.forwardRef(
|
|
|
582
621
|
},
|
|
583
622
|
[Link, Mention]
|
|
584
623
|
);
|
|
585
|
-
const handleChange =
|
|
624
|
+
const handleChange = react.useCallback(
|
|
586
625
|
(value) => {
|
|
587
626
|
validate(value);
|
|
588
627
|
onEditorChange.notify();
|
|
589
628
|
},
|
|
590
629
|
[validate, onEditorChange]
|
|
591
630
|
);
|
|
592
|
-
const createMention =
|
|
631
|
+
const createMention = react.useCallback(
|
|
593
632
|
(userId) => {
|
|
594
633
|
if (!mentionDraft || !userId) {
|
|
595
634
|
return;
|
|
@@ -601,7 +640,7 @@ const ComposerEditor = React.forwardRef(
|
|
|
601
640
|
},
|
|
602
641
|
[editor, mentionDraft, setSelectedMentionSuggestionIndex]
|
|
603
642
|
);
|
|
604
|
-
const handleKeyDown =
|
|
643
|
+
const handleKeyDown = react.useCallback(
|
|
605
644
|
(event) => {
|
|
606
645
|
onKeyDown?.(event);
|
|
607
646
|
if (event.isDefaultPrevented()) {
|
|
@@ -687,7 +726,7 @@ const ComposerEditor = React.forwardRef(
|
|
|
687
726
|
submit
|
|
688
727
|
]
|
|
689
728
|
);
|
|
690
|
-
const handleFocus =
|
|
729
|
+
const handleFocus = react.useCallback(
|
|
691
730
|
(event) => {
|
|
692
731
|
onFocus?.(event);
|
|
693
732
|
if (!event.isDefaultPrevented()) {
|
|
@@ -696,7 +735,7 @@ const ComposerEditor = React.forwardRef(
|
|
|
696
735
|
},
|
|
697
736
|
[onFocus, setFocused]
|
|
698
737
|
);
|
|
699
|
-
const handleBlur =
|
|
738
|
+
const handleBlur = react.useCallback(
|
|
700
739
|
(event) => {
|
|
701
740
|
onBlur?.(event);
|
|
702
741
|
if (!event.isDefaultPrevented()) {
|
|
@@ -705,11 +744,11 @@ const ComposerEditor = React.forwardRef(
|
|
|
705
744
|
},
|
|
706
745
|
[onBlur, setFocused]
|
|
707
746
|
);
|
|
708
|
-
const selectedMentionSuggestionUserId =
|
|
747
|
+
const selectedMentionSuggestionUserId = react.useMemo(
|
|
709
748
|
() => mentionSuggestions?.[selectedMentionSuggestionIndex],
|
|
710
749
|
[selectedMentionSuggestionIndex, mentionSuggestions]
|
|
711
750
|
);
|
|
712
|
-
const setSelectedMentionSuggestionUserId =
|
|
751
|
+
const setSelectedMentionSuggestionUserId = react.useCallback(
|
|
713
752
|
(userId) => {
|
|
714
753
|
const index = mentionSuggestions?.indexOf(userId);
|
|
715
754
|
if (index !== void 0 && index >= 0) {
|
|
@@ -718,7 +757,7 @@ const ComposerEditor = React.forwardRef(
|
|
|
718
757
|
},
|
|
719
758
|
[setSelectedMentionSuggestionIndex, mentionSuggestions]
|
|
720
759
|
);
|
|
721
|
-
const additionalProps =
|
|
760
|
+
const additionalProps = react.useMemo(
|
|
722
761
|
() => mentionDraft ? {
|
|
723
762
|
role: "combobox",
|
|
724
763
|
"aria-autocomplete": "list",
|
|
@@ -740,58 +779,63 @@ const ComposerEditor = React.forwardRef(
|
|
|
740
779
|
floatingToolbarId
|
|
741
780
|
]
|
|
742
781
|
);
|
|
743
|
-
|
|
782
|
+
react.useImperativeHandle(forwardedRef, () => {
|
|
744
783
|
return slateReact.ReactEditor.toDOMNode(editor, editor);
|
|
745
784
|
}, [editor]);
|
|
746
|
-
|
|
785
|
+
react.useLayoutEffect(() => {
|
|
747
786
|
if (autoFocus) {
|
|
748
787
|
focus();
|
|
749
788
|
}
|
|
750
789
|
}, [autoFocus, editor, focus]);
|
|
751
|
-
|
|
790
|
+
react.useLayoutEffect(() => {
|
|
752
791
|
if (isFocused && editor.selection === null) {
|
|
753
792
|
select();
|
|
754
793
|
}
|
|
755
794
|
}, [editor, select, isFocused]);
|
|
756
|
-
return /* @__PURE__ */
|
|
795
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(slateReact.Slate, {
|
|
757
796
|
editor,
|
|
758
797
|
initialValue: initialEditorValue,
|
|
759
|
-
onChange: handleChange
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
798
|
+
onChange: handleChange,
|
|
799
|
+
children: [
|
|
800
|
+
/* @__PURE__ */ jsxRuntime.jsx(slateReact.Editable, {
|
|
801
|
+
dir,
|
|
802
|
+
enterKeyHint: mentionDraft ? "enter" : "send",
|
|
803
|
+
autoCapitalize: "sentences",
|
|
804
|
+
"aria-label": "Composer editor",
|
|
805
|
+
"data-focused": isFocused || void 0,
|
|
806
|
+
"data-disabled": isDisabled || void 0,
|
|
807
|
+
...additionalProps,
|
|
808
|
+
...props,
|
|
809
|
+
readOnly: isDisabled,
|
|
810
|
+
disabled: isDisabled,
|
|
811
|
+
onKeyDown: handleKeyDown,
|
|
812
|
+
onFocus: handleFocus,
|
|
813
|
+
onBlur: handleBlur,
|
|
814
|
+
renderElement,
|
|
815
|
+
renderLeaf: ComposerEditorLeaf,
|
|
816
|
+
renderPlaceholder: ComposerEditorPlaceholder
|
|
817
|
+
}),
|
|
818
|
+
hasResolveMentionSuggestions && /* @__PURE__ */ jsxRuntime.jsx(ComposerEditorMentionSuggestionsWrapper, {
|
|
819
|
+
dir,
|
|
820
|
+
mentionDraft,
|
|
821
|
+
setMentionDraft,
|
|
822
|
+
selectedUserId: selectedMentionSuggestionUserId,
|
|
823
|
+
setSelectedUserId: setSelectedMentionSuggestionUserId,
|
|
824
|
+
userIds: mentionSuggestions,
|
|
825
|
+
id: suggestionsListId,
|
|
826
|
+
itemId: suggestionsListItemId,
|
|
827
|
+
onItemSelect: createMention,
|
|
828
|
+
MentionSuggestions
|
|
829
|
+
}),
|
|
830
|
+
FloatingToolbar && /* @__PURE__ */ jsxRuntime.jsx(ComposerEditorFloatingToolbarWrapper, {
|
|
831
|
+
dir,
|
|
832
|
+
id: floatingToolbarId,
|
|
833
|
+
hasFloatingToolbarRange,
|
|
834
|
+
setHasFloatingToolbarRange,
|
|
835
|
+
FloatingToolbar
|
|
836
|
+
})
|
|
837
|
+
]
|
|
838
|
+
});
|
|
795
839
|
}
|
|
796
840
|
);
|
|
797
841
|
const MAX_ATTACHMENTS = 10;
|
|
@@ -807,7 +851,7 @@ function prepareAttachment(file) {
|
|
|
807
851
|
file
|
|
808
852
|
};
|
|
809
853
|
}
|
|
810
|
-
const ComposerForm =
|
|
854
|
+
const ComposerForm = react.forwardRef(
|
|
811
855
|
({
|
|
812
856
|
children,
|
|
813
857
|
onSubmit,
|
|
@@ -821,9 +865,9 @@ const ComposerForm = React.forwardRef(
|
|
|
821
865
|
...props
|
|
822
866
|
}, forwardedRef) => {
|
|
823
867
|
const Component = asChild ? reactSlot.Slot : "form";
|
|
824
|
-
const [isEmpty$1, setEmpty] =
|
|
825
|
-
const [isSubmitting, setSubmitting] =
|
|
826
|
-
const [isFocused, setFocused] =
|
|
868
|
+
const [isEmpty$1, setEmpty] = react.useState(true);
|
|
869
|
+
const [isSubmitting, setSubmitting] = react.useState(false);
|
|
870
|
+
const [isFocused, setFocused] = react.useState(false);
|
|
827
871
|
const room = _private.useRoomOrNull();
|
|
828
872
|
const roomId = _roomId !== void 0 ? _roomId : room?.id;
|
|
829
873
|
if (roomId === void 0) {
|
|
@@ -843,24 +887,24 @@ const ComposerForm = React.forwardRef(
|
|
|
843
887
|
});
|
|
844
888
|
const numberOfAttachments = attachments.length;
|
|
845
889
|
const hasMaxAttachments = numberOfAttachments >= maxAttachments;
|
|
846
|
-
const isDisabled =
|
|
890
|
+
const isDisabled = react.useMemo(() => {
|
|
847
891
|
return isSubmitting || disabled === true;
|
|
848
892
|
}, [isSubmitting, disabled]);
|
|
849
|
-
const canSubmit =
|
|
893
|
+
const canSubmit = react.useMemo(() => {
|
|
850
894
|
return !isEmpty$1 && !isUploadingAttachments;
|
|
851
895
|
}, [isEmpty$1, isUploadingAttachments]);
|
|
852
|
-
const [marks$1, setMarks] =
|
|
853
|
-
const ref =
|
|
896
|
+
const [marks$1, setMarks] = react.useState(marks.getMarks);
|
|
897
|
+
const ref = react.useRef(null);
|
|
854
898
|
const mergedRefs = useRefs.useRefs(forwardedRef, ref);
|
|
855
|
-
const fileInputRef =
|
|
899
|
+
const fileInputRef = react.useRef(null);
|
|
856
900
|
const syncSource = _private.useSyncSource();
|
|
857
901
|
const isPending = !preventUnsavedChanges ? false : !isEmpty$1 || isUploadingAttachments || attachments.length > 0;
|
|
858
|
-
|
|
902
|
+
react.useEffect(() => {
|
|
859
903
|
syncSource?.setSyncStatus(
|
|
860
904
|
isPending ? "has-local-changes" : "synchronized"
|
|
861
905
|
);
|
|
862
906
|
}, [syncSource, isPending]);
|
|
863
|
-
const createAttachments =
|
|
907
|
+
const createAttachments = react.useCallback(
|
|
864
908
|
(files) => {
|
|
865
909
|
if (!files.length) {
|
|
866
910
|
return;
|
|
@@ -875,11 +919,11 @@ const ComposerForm = React.forwardRef(
|
|
|
875
919
|
},
|
|
876
920
|
[addAttachments, maxAttachments, numberOfAttachments]
|
|
877
921
|
);
|
|
878
|
-
const createAttachmentsRef =
|
|
879
|
-
|
|
922
|
+
const createAttachmentsRef = react.useRef(createAttachments);
|
|
923
|
+
react.useEffect(() => {
|
|
880
924
|
createAttachmentsRef.current = createAttachments;
|
|
881
925
|
}, [createAttachments]);
|
|
882
|
-
const stableCreateAttachments =
|
|
926
|
+
const stableCreateAttachments = react.useCallback((files) => {
|
|
883
927
|
createAttachmentsRef.current(files);
|
|
884
928
|
}, []);
|
|
885
929
|
const editor = useInitial.useInitial(
|
|
@@ -889,13 +933,13 @@ const ComposerForm = React.forwardRef(
|
|
|
889
933
|
})
|
|
890
934
|
);
|
|
891
935
|
const onEditorChange = useInitial.useInitial(core.makeEventSource);
|
|
892
|
-
const validate =
|
|
936
|
+
const validate = react.useCallback(
|
|
893
937
|
(value) => {
|
|
894
938
|
setEmpty(isEmpty.isEmpty(editor, value));
|
|
895
939
|
},
|
|
896
940
|
[editor]
|
|
897
941
|
);
|
|
898
|
-
const submit =
|
|
942
|
+
const submit = react.useCallback(() => {
|
|
899
943
|
if (!canSubmit) {
|
|
900
944
|
return;
|
|
901
945
|
}
|
|
@@ -905,7 +949,7 @@ const ComposerForm = React.forwardRef(
|
|
|
905
949
|
}
|
|
906
950
|
});
|
|
907
951
|
}, [canSubmit]);
|
|
908
|
-
const clear =
|
|
952
|
+
const clear = react.useCallback(() => {
|
|
909
953
|
slate.Transforms.delete(editor, {
|
|
910
954
|
at: {
|
|
911
955
|
anchor: slate.Editor.start(editor, []),
|
|
@@ -913,10 +957,10 @@ const ComposerForm = React.forwardRef(
|
|
|
913
957
|
}
|
|
914
958
|
});
|
|
915
959
|
}, [editor]);
|
|
916
|
-
const select =
|
|
960
|
+
const select = react.useCallback(() => {
|
|
917
961
|
slate.Transforms.select(editor, slate.Editor.end(editor, []));
|
|
918
962
|
}, [editor]);
|
|
919
|
-
const focus =
|
|
963
|
+
const focus = react.useCallback(
|
|
920
964
|
(resetSelection = true) => {
|
|
921
965
|
if (!slateReact.ReactEditor.isFocused(editor)) {
|
|
922
966
|
slate.Transforms.select(
|
|
@@ -928,17 +972,17 @@ const ComposerForm = React.forwardRef(
|
|
|
928
972
|
},
|
|
929
973
|
[editor]
|
|
930
974
|
);
|
|
931
|
-
const blur =
|
|
975
|
+
const blur = react.useCallback(() => {
|
|
932
976
|
slateReact.ReactEditor.blur(editor);
|
|
933
977
|
}, [editor]);
|
|
934
|
-
const createMention =
|
|
978
|
+
const createMention = react.useCallback(() => {
|
|
935
979
|
if (disabled) {
|
|
936
980
|
return;
|
|
937
981
|
}
|
|
938
982
|
focus();
|
|
939
983
|
mentions.insertMentionCharacter(editor);
|
|
940
984
|
}, [disabled, editor, focus]);
|
|
941
|
-
const insertText =
|
|
985
|
+
const insertText = react.useCallback(
|
|
942
986
|
(text) => {
|
|
943
987
|
if (disabled) {
|
|
944
988
|
return;
|
|
@@ -948,7 +992,7 @@ const ComposerForm = React.forwardRef(
|
|
|
948
992
|
},
|
|
949
993
|
[disabled, editor, focus]
|
|
950
994
|
);
|
|
951
|
-
const attachFiles =
|
|
995
|
+
const attachFiles = react.useCallback(() => {
|
|
952
996
|
if (disabled) {
|
|
953
997
|
return;
|
|
954
998
|
}
|
|
@@ -956,7 +1000,7 @@ const ComposerForm = React.forwardRef(
|
|
|
956
1000
|
fileInputRef.current.click();
|
|
957
1001
|
}
|
|
958
1002
|
}, [disabled]);
|
|
959
|
-
const handleAttachmentsInputChange =
|
|
1003
|
+
const handleAttachmentsInputChange = react.useCallback(
|
|
960
1004
|
(event) => {
|
|
961
1005
|
if (disabled) {
|
|
962
1006
|
return;
|
|
@@ -968,13 +1012,13 @@ const ComposerForm = React.forwardRef(
|
|
|
968
1012
|
},
|
|
969
1013
|
[createAttachments, disabled]
|
|
970
1014
|
);
|
|
971
|
-
const onSubmitEnd =
|
|
1015
|
+
const onSubmitEnd = react.useCallback(() => {
|
|
972
1016
|
clear();
|
|
973
1017
|
blur();
|
|
974
1018
|
clearAttachments();
|
|
975
1019
|
setSubmitting(false);
|
|
976
1020
|
}, [blur, clear, clearAttachments]);
|
|
977
|
-
const handleSubmit =
|
|
1021
|
+
const handleSubmit = react.useCallback(
|
|
978
1022
|
(event) => {
|
|
979
1023
|
if (disabled) {
|
|
980
1024
|
return;
|
|
@@ -1017,10 +1061,10 @@ const ComposerForm = React.forwardRef(
|
|
|
1017
1061
|
},
|
|
1018
1062
|
[disabled, editor, attachments, onComposerSubmit, onSubmit, onSubmitEnd]
|
|
1019
1063
|
);
|
|
1020
|
-
const stopPropagation =
|
|
1064
|
+
const stopPropagation = react.useCallback((event) => {
|
|
1021
1065
|
event.stopPropagation();
|
|
1022
1066
|
}, []);
|
|
1023
|
-
const toggleMark =
|
|
1067
|
+
const toggleMark = react.useCallback(
|
|
1024
1068
|
(mark) => {
|
|
1025
1069
|
marks.toggleMark(editor, mark);
|
|
1026
1070
|
},
|
|
@@ -1029,75 +1073,85 @@ const ComposerForm = React.forwardRef(
|
|
|
1029
1073
|
useObservable.useObservable(onEditorChange, () => {
|
|
1030
1074
|
setMarks(marks.getMarks(editor));
|
|
1031
1075
|
});
|
|
1032
|
-
return /* @__PURE__ */
|
|
1076
|
+
return /* @__PURE__ */ jsxRuntime.jsx(contexts.ComposerEditorContext.Provider, {
|
|
1033
1077
|
value: {
|
|
1034
1078
|
editor,
|
|
1035
1079
|
validate,
|
|
1036
1080
|
setFocused,
|
|
1037
1081
|
onEditorChange,
|
|
1038
1082
|
roomId
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1083
|
+
},
|
|
1084
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(contexts.ComposerAttachmentsContext.Provider, {
|
|
1085
|
+
value: {
|
|
1086
|
+
createAttachments,
|
|
1087
|
+
isUploadingAttachments,
|
|
1088
|
+
hasMaxAttachments,
|
|
1089
|
+
maxAttachments,
|
|
1090
|
+
maxAttachmentSize
|
|
1091
|
+
},
|
|
1092
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(contexts.ComposerContext.Provider, {
|
|
1093
|
+
value: {
|
|
1094
|
+
isDisabled,
|
|
1095
|
+
isFocused,
|
|
1096
|
+
isEmpty: isEmpty$1,
|
|
1097
|
+
canSubmit,
|
|
1098
|
+
submit,
|
|
1099
|
+
clear,
|
|
1100
|
+
select,
|
|
1101
|
+
focus,
|
|
1102
|
+
blur,
|
|
1103
|
+
createMention,
|
|
1104
|
+
insertText,
|
|
1105
|
+
attachments,
|
|
1106
|
+
attachFiles,
|
|
1107
|
+
removeAttachment,
|
|
1108
|
+
toggleMark,
|
|
1109
|
+
marks: marks$1
|
|
1110
|
+
},
|
|
1111
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Component, {
|
|
1112
|
+
...props,
|
|
1113
|
+
onSubmit: handleSubmit,
|
|
1114
|
+
ref: mergedRefs,
|
|
1115
|
+
children: [
|
|
1116
|
+
/* @__PURE__ */ jsxRuntime.jsx("input", {
|
|
1117
|
+
type: "file",
|
|
1118
|
+
multiple: true,
|
|
1119
|
+
ref: fileInputRef,
|
|
1120
|
+
onChange: handleAttachmentsInputChange,
|
|
1121
|
+
onClick: stopPropagation,
|
|
1122
|
+
tabIndex: -1,
|
|
1123
|
+
style: { display: "none" }
|
|
1124
|
+
}),
|
|
1125
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slottable, {
|
|
1126
|
+
children
|
|
1127
|
+
})
|
|
1128
|
+
]
|
|
1129
|
+
})
|
|
1130
|
+
})
|
|
1131
|
+
})
|
|
1132
|
+
});
|
|
1080
1133
|
}
|
|
1081
1134
|
);
|
|
1082
|
-
const ComposerSubmit =
|
|
1135
|
+
const ComposerSubmit = react.forwardRef(
|
|
1083
1136
|
({ children, disabled, asChild, ...props }, forwardedRef) => {
|
|
1084
1137
|
const Component = asChild ? reactSlot.Slot : "button";
|
|
1085
1138
|
const { canSubmit, isDisabled: isComposerDisabled } = contexts.useComposer();
|
|
1086
1139
|
const isDisabled = isComposerDisabled || disabled || !canSubmit;
|
|
1087
|
-
return /* @__PURE__ */
|
|
1140
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
1088
1141
|
type: "submit",
|
|
1089
1142
|
...props,
|
|
1090
1143
|
ref: forwardedRef,
|
|
1091
|
-
disabled: isDisabled
|
|
1092
|
-
|
|
1144
|
+
disabled: isDisabled,
|
|
1145
|
+
children
|
|
1146
|
+
});
|
|
1093
1147
|
}
|
|
1094
1148
|
);
|
|
1095
|
-
const ComposerAttachFiles =
|
|
1149
|
+
const ComposerAttachFiles = react.forwardRef(({ children, onClick, disabled, asChild, ...props }, forwardedRef) => {
|
|
1096
1150
|
const Component = asChild ? reactSlot.Slot : "button";
|
|
1097
1151
|
const { hasMaxAttachments } = contexts.useComposerAttachmentsContext();
|
|
1098
1152
|
const { isDisabled: isComposerDisabled, attachFiles } = contexts.useComposer();
|
|
1099
1153
|
const isDisabled = isComposerDisabled || hasMaxAttachments || disabled;
|
|
1100
|
-
const handleClick =
|
|
1154
|
+
const handleClick = react.useCallback(
|
|
1101
1155
|
(event) => {
|
|
1102
1156
|
onClick?.(event);
|
|
1103
1157
|
if (!event.isDefaultPrevented()) {
|
|
@@ -1106,15 +1160,16 @@ const ComposerAttachFiles = React.forwardRef(({ children, onClick, disabled, asC
|
|
|
1106
1160
|
},
|
|
1107
1161
|
[attachFiles, onClick]
|
|
1108
1162
|
);
|
|
1109
|
-
return /* @__PURE__ */
|
|
1163
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
1110
1164
|
type: "button",
|
|
1111
1165
|
...props,
|
|
1112
1166
|
onClick: handleClick,
|
|
1113
1167
|
ref: forwardedRef,
|
|
1114
|
-
disabled: isDisabled
|
|
1115
|
-
|
|
1168
|
+
disabled: isDisabled,
|
|
1169
|
+
children
|
|
1170
|
+
});
|
|
1116
1171
|
});
|
|
1117
|
-
const ComposerAttachmentsDropArea =
|
|
1172
|
+
const ComposerAttachmentsDropArea = react.forwardRef(
|
|
1118
1173
|
({
|
|
1119
1174
|
onDragEnter,
|
|
1120
1175
|
onDragLeave,
|
|
@@ -1134,7 +1189,7 @@ const ComposerAttachmentsDropArea = React.forwardRef(
|
|
|
1134
1189
|
onDrop,
|
|
1135
1190
|
disabled: isDisabled
|
|
1136
1191
|
});
|
|
1137
|
-
return /* @__PURE__ */
|
|
1192
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
1138
1193
|
...dropAreaProps,
|
|
1139
1194
|
"data-disabled": isDisabled ? "" : void 0,
|
|
1140
1195
|
...props,
|
|
@@ -1142,11 +1197,11 @@ const ComposerAttachmentsDropArea = React.forwardRef(
|
|
|
1142
1197
|
});
|
|
1143
1198
|
}
|
|
1144
1199
|
);
|
|
1145
|
-
const ComposerMarkToggle =
|
|
1200
|
+
const ComposerMarkToggle = react.forwardRef(
|
|
1146
1201
|
({ children, mark, onValueChange, onClick, asChild, ...props }, forwardedRef) => {
|
|
1147
1202
|
const Component = asChild ? reactSlot.Slot : "button";
|
|
1148
1203
|
const { marks, toggleMark } = contexts.useComposer();
|
|
1149
|
-
const handleClick =
|
|
1204
|
+
const handleClick = react.useCallback(
|
|
1150
1205
|
(event) => {
|
|
1151
1206
|
onClick?.(event);
|
|
1152
1207
|
if (!event.isDefaultPrevented()) {
|
|
@@ -1156,15 +1211,17 @@ const ComposerMarkToggle = React.forwardRef(
|
|
|
1156
1211
|
},
|
|
1157
1212
|
[mark, onClick, onValueChange, toggleMark]
|
|
1158
1213
|
);
|
|
1159
|
-
return /* @__PURE__ */
|
|
1214
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TogglePrimitive__namespace.Root, {
|
|
1160
1215
|
asChild: true,
|
|
1161
1216
|
pressed: marks[mark],
|
|
1162
1217
|
onClick: handleClick,
|
|
1163
|
-
...props
|
|
1164
|
-
}, /* @__PURE__ */ React.createElement(Component, {
|
|
1165
1218
|
...props,
|
|
1166
|
-
|
|
1167
|
-
|
|
1219
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
1220
|
+
...props,
|
|
1221
|
+
ref: forwardedRef,
|
|
1222
|
+
children
|
|
1223
|
+
})
|
|
1224
|
+
});
|
|
1168
1225
|
}
|
|
1169
1226
|
);
|
|
1170
1227
|
if (process.env.NODE_ENV !== "production") {
|