@liveblocks/react-ui 2.14.0 → 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 +305 -224
- package/dist/components/Composer.js.map +1 -1
- package/dist/components/Composer.mjs +281 -200
- 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 +329 -271
- package/dist/primitives/Composer/index.js.map +1 -1
- package/dist/primitives/Composer/index.mjs +254 -196
- 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,16 +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] =
|
|
549
|
-
const
|
|
550
|
-
const
|
|
587
|
+
const [hasFloatingToolbarRange, setHasFloatingToolbarRange] = react.useState(false);
|
|
588
|
+
const resolveMentionSuggestions = _private.useResolveMentionSuggestions();
|
|
589
|
+
const hasResolveMentionSuggestions = client ? resolveMentionSuggestions : true;
|
|
590
|
+
const [mentionDraft, setMentionDraft] = react.useState();
|
|
551
591
|
const mentionSuggestions = _private.useMentionSuggestions(
|
|
552
592
|
roomId,
|
|
553
593
|
mentionDraft?.text
|
|
@@ -558,22 +598,22 @@ const ComposerEditor = React.forwardRef(
|
|
|
558
598
|
setNextSelectedMentionSuggestionIndex,
|
|
559
599
|
setSelectedMentionSuggestionIndex
|
|
560
600
|
] = useIndex.useIndex(0, mentionSuggestions?.length ?? 0);
|
|
561
|
-
const id =
|
|
562
|
-
const floatingToolbarId =
|
|
601
|
+
const id = react.useId();
|
|
602
|
+
const floatingToolbarId = react.useMemo(
|
|
563
603
|
() => `liveblocks-floating-toolbar-${id}`,
|
|
564
604
|
[id]
|
|
565
605
|
);
|
|
566
|
-
const suggestionsListId =
|
|
606
|
+
const suggestionsListId = react.useMemo(
|
|
567
607
|
() => `liveblocks-suggestions-list-${id}`,
|
|
568
608
|
[id]
|
|
569
609
|
);
|
|
570
|
-
const suggestionsListItemId =
|
|
610
|
+
const suggestionsListItemId = react.useCallback(
|
|
571
611
|
(userId) => userId ? `liveblocks-suggestions-list-item-${id}-${userId}` : void 0,
|
|
572
612
|
[id]
|
|
573
613
|
);
|
|
574
|
-
const renderElement =
|
|
614
|
+
const renderElement = react.useCallback(
|
|
575
615
|
(props2) => {
|
|
576
|
-
return /* @__PURE__ */
|
|
616
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ComposerEditorElement, {
|
|
577
617
|
Mention,
|
|
578
618
|
Link,
|
|
579
619
|
...props2
|
|
@@ -581,14 +621,14 @@ const ComposerEditor = React.forwardRef(
|
|
|
581
621
|
},
|
|
582
622
|
[Link, Mention]
|
|
583
623
|
);
|
|
584
|
-
const handleChange =
|
|
624
|
+
const handleChange = react.useCallback(
|
|
585
625
|
(value) => {
|
|
586
626
|
validate(value);
|
|
587
627
|
onEditorChange.notify();
|
|
588
628
|
},
|
|
589
629
|
[validate, onEditorChange]
|
|
590
630
|
);
|
|
591
|
-
const createMention =
|
|
631
|
+
const createMention = react.useCallback(
|
|
592
632
|
(userId) => {
|
|
593
633
|
if (!mentionDraft || !userId) {
|
|
594
634
|
return;
|
|
@@ -600,7 +640,7 @@ const ComposerEditor = React.forwardRef(
|
|
|
600
640
|
},
|
|
601
641
|
[editor, mentionDraft, setSelectedMentionSuggestionIndex]
|
|
602
642
|
);
|
|
603
|
-
const handleKeyDown =
|
|
643
|
+
const handleKeyDown = react.useCallback(
|
|
604
644
|
(event) => {
|
|
605
645
|
onKeyDown?.(event);
|
|
606
646
|
if (event.isDefaultPrevented()) {
|
|
@@ -686,7 +726,7 @@ const ComposerEditor = React.forwardRef(
|
|
|
686
726
|
submit
|
|
687
727
|
]
|
|
688
728
|
);
|
|
689
|
-
const handleFocus =
|
|
729
|
+
const handleFocus = react.useCallback(
|
|
690
730
|
(event) => {
|
|
691
731
|
onFocus?.(event);
|
|
692
732
|
if (!event.isDefaultPrevented()) {
|
|
@@ -695,7 +735,7 @@ const ComposerEditor = React.forwardRef(
|
|
|
695
735
|
},
|
|
696
736
|
[onFocus, setFocused]
|
|
697
737
|
);
|
|
698
|
-
const handleBlur =
|
|
738
|
+
const handleBlur = react.useCallback(
|
|
699
739
|
(event) => {
|
|
700
740
|
onBlur?.(event);
|
|
701
741
|
if (!event.isDefaultPrevented()) {
|
|
@@ -704,11 +744,11 @@ const ComposerEditor = React.forwardRef(
|
|
|
704
744
|
},
|
|
705
745
|
[onBlur, setFocused]
|
|
706
746
|
);
|
|
707
|
-
const selectedMentionSuggestionUserId =
|
|
747
|
+
const selectedMentionSuggestionUserId = react.useMemo(
|
|
708
748
|
() => mentionSuggestions?.[selectedMentionSuggestionIndex],
|
|
709
749
|
[selectedMentionSuggestionIndex, mentionSuggestions]
|
|
710
750
|
);
|
|
711
|
-
const setSelectedMentionSuggestionUserId =
|
|
751
|
+
const setSelectedMentionSuggestionUserId = react.useCallback(
|
|
712
752
|
(userId) => {
|
|
713
753
|
const index = mentionSuggestions?.indexOf(userId);
|
|
714
754
|
if (index !== void 0 && index >= 0) {
|
|
@@ -717,7 +757,7 @@ const ComposerEditor = React.forwardRef(
|
|
|
717
757
|
},
|
|
718
758
|
[setSelectedMentionSuggestionIndex, mentionSuggestions]
|
|
719
759
|
);
|
|
720
|
-
const additionalProps =
|
|
760
|
+
const additionalProps = react.useMemo(
|
|
721
761
|
() => mentionDraft ? {
|
|
722
762
|
role: "combobox",
|
|
723
763
|
"aria-autocomplete": "list",
|
|
@@ -739,58 +779,63 @@ const ComposerEditor = React.forwardRef(
|
|
|
739
779
|
floatingToolbarId
|
|
740
780
|
]
|
|
741
781
|
);
|
|
742
|
-
|
|
782
|
+
react.useImperativeHandle(forwardedRef, () => {
|
|
743
783
|
return slateReact.ReactEditor.toDOMNode(editor, editor);
|
|
744
784
|
}, [editor]);
|
|
745
|
-
|
|
785
|
+
react.useLayoutEffect(() => {
|
|
746
786
|
if (autoFocus) {
|
|
747
787
|
focus();
|
|
748
788
|
}
|
|
749
789
|
}, [autoFocus, editor, focus]);
|
|
750
|
-
|
|
790
|
+
react.useLayoutEffect(() => {
|
|
751
791
|
if (isFocused && editor.selection === null) {
|
|
752
792
|
select();
|
|
753
793
|
}
|
|
754
794
|
}, [editor, select, isFocused]);
|
|
755
|
-
return /* @__PURE__ */
|
|
795
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(slateReact.Slate, {
|
|
756
796
|
editor,
|
|
757
797
|
initialValue: initialEditorValue,
|
|
758
|
-
onChange: handleChange
|
|
759
|
-
|
|
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
|
-
|
|
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
|
+
});
|
|
794
839
|
}
|
|
795
840
|
);
|
|
796
841
|
const MAX_ATTACHMENTS = 10;
|
|
@@ -806,7 +851,7 @@ function prepareAttachment(file) {
|
|
|
806
851
|
file
|
|
807
852
|
};
|
|
808
853
|
}
|
|
809
|
-
const ComposerForm =
|
|
854
|
+
const ComposerForm = react.forwardRef(
|
|
810
855
|
({
|
|
811
856
|
children,
|
|
812
857
|
onSubmit,
|
|
@@ -820,9 +865,9 @@ const ComposerForm = React.forwardRef(
|
|
|
820
865
|
...props
|
|
821
866
|
}, forwardedRef) => {
|
|
822
867
|
const Component = asChild ? reactSlot.Slot : "form";
|
|
823
|
-
const [isEmpty$1, setEmpty] =
|
|
824
|
-
const [isSubmitting, setSubmitting] =
|
|
825
|
-
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);
|
|
826
871
|
const room = _private.useRoomOrNull();
|
|
827
872
|
const roomId = _roomId !== void 0 ? _roomId : room?.id;
|
|
828
873
|
if (roomId === void 0) {
|
|
@@ -842,24 +887,24 @@ const ComposerForm = React.forwardRef(
|
|
|
842
887
|
});
|
|
843
888
|
const numberOfAttachments = attachments.length;
|
|
844
889
|
const hasMaxAttachments = numberOfAttachments >= maxAttachments;
|
|
845
|
-
const isDisabled =
|
|
890
|
+
const isDisabled = react.useMemo(() => {
|
|
846
891
|
return isSubmitting || disabled === true;
|
|
847
892
|
}, [isSubmitting, disabled]);
|
|
848
|
-
const canSubmit =
|
|
893
|
+
const canSubmit = react.useMemo(() => {
|
|
849
894
|
return !isEmpty$1 && !isUploadingAttachments;
|
|
850
895
|
}, [isEmpty$1, isUploadingAttachments]);
|
|
851
|
-
const [marks$1, setMarks] =
|
|
852
|
-
const ref =
|
|
896
|
+
const [marks$1, setMarks] = react.useState(marks.getMarks);
|
|
897
|
+
const ref = react.useRef(null);
|
|
853
898
|
const mergedRefs = useRefs.useRefs(forwardedRef, ref);
|
|
854
|
-
const fileInputRef =
|
|
899
|
+
const fileInputRef = react.useRef(null);
|
|
855
900
|
const syncSource = _private.useSyncSource();
|
|
856
901
|
const isPending = !preventUnsavedChanges ? false : !isEmpty$1 || isUploadingAttachments || attachments.length > 0;
|
|
857
|
-
|
|
902
|
+
react.useEffect(() => {
|
|
858
903
|
syncSource?.setSyncStatus(
|
|
859
904
|
isPending ? "has-local-changes" : "synchronized"
|
|
860
905
|
);
|
|
861
906
|
}, [syncSource, isPending]);
|
|
862
|
-
const createAttachments =
|
|
907
|
+
const createAttachments = react.useCallback(
|
|
863
908
|
(files) => {
|
|
864
909
|
if (!files.length) {
|
|
865
910
|
return;
|
|
@@ -874,11 +919,11 @@ const ComposerForm = React.forwardRef(
|
|
|
874
919
|
},
|
|
875
920
|
[addAttachments, maxAttachments, numberOfAttachments]
|
|
876
921
|
);
|
|
877
|
-
const createAttachmentsRef =
|
|
878
|
-
|
|
922
|
+
const createAttachmentsRef = react.useRef(createAttachments);
|
|
923
|
+
react.useEffect(() => {
|
|
879
924
|
createAttachmentsRef.current = createAttachments;
|
|
880
925
|
}, [createAttachments]);
|
|
881
|
-
const stableCreateAttachments =
|
|
926
|
+
const stableCreateAttachments = react.useCallback((files) => {
|
|
882
927
|
createAttachmentsRef.current(files);
|
|
883
928
|
}, []);
|
|
884
929
|
const editor = useInitial.useInitial(
|
|
@@ -888,13 +933,13 @@ const ComposerForm = React.forwardRef(
|
|
|
888
933
|
})
|
|
889
934
|
);
|
|
890
935
|
const onEditorChange = useInitial.useInitial(core.makeEventSource);
|
|
891
|
-
const validate =
|
|
936
|
+
const validate = react.useCallback(
|
|
892
937
|
(value) => {
|
|
893
938
|
setEmpty(isEmpty.isEmpty(editor, value));
|
|
894
939
|
},
|
|
895
940
|
[editor]
|
|
896
941
|
);
|
|
897
|
-
const submit =
|
|
942
|
+
const submit = react.useCallback(() => {
|
|
898
943
|
if (!canSubmit) {
|
|
899
944
|
return;
|
|
900
945
|
}
|
|
@@ -904,7 +949,7 @@ const ComposerForm = React.forwardRef(
|
|
|
904
949
|
}
|
|
905
950
|
});
|
|
906
951
|
}, [canSubmit]);
|
|
907
|
-
const clear =
|
|
952
|
+
const clear = react.useCallback(() => {
|
|
908
953
|
slate.Transforms.delete(editor, {
|
|
909
954
|
at: {
|
|
910
955
|
anchor: slate.Editor.start(editor, []),
|
|
@@ -912,10 +957,10 @@ const ComposerForm = React.forwardRef(
|
|
|
912
957
|
}
|
|
913
958
|
});
|
|
914
959
|
}, [editor]);
|
|
915
|
-
const select =
|
|
960
|
+
const select = react.useCallback(() => {
|
|
916
961
|
slate.Transforms.select(editor, slate.Editor.end(editor, []));
|
|
917
962
|
}, [editor]);
|
|
918
|
-
const focus =
|
|
963
|
+
const focus = react.useCallback(
|
|
919
964
|
(resetSelection = true) => {
|
|
920
965
|
if (!slateReact.ReactEditor.isFocused(editor)) {
|
|
921
966
|
slate.Transforms.select(
|
|
@@ -927,17 +972,17 @@ const ComposerForm = React.forwardRef(
|
|
|
927
972
|
},
|
|
928
973
|
[editor]
|
|
929
974
|
);
|
|
930
|
-
const blur =
|
|
975
|
+
const blur = react.useCallback(() => {
|
|
931
976
|
slateReact.ReactEditor.blur(editor);
|
|
932
977
|
}, [editor]);
|
|
933
|
-
const createMention =
|
|
978
|
+
const createMention = react.useCallback(() => {
|
|
934
979
|
if (disabled) {
|
|
935
980
|
return;
|
|
936
981
|
}
|
|
937
982
|
focus();
|
|
938
983
|
mentions.insertMentionCharacter(editor);
|
|
939
984
|
}, [disabled, editor, focus]);
|
|
940
|
-
const insertText =
|
|
985
|
+
const insertText = react.useCallback(
|
|
941
986
|
(text) => {
|
|
942
987
|
if (disabled) {
|
|
943
988
|
return;
|
|
@@ -947,7 +992,7 @@ const ComposerForm = React.forwardRef(
|
|
|
947
992
|
},
|
|
948
993
|
[disabled, editor, focus]
|
|
949
994
|
);
|
|
950
|
-
const attachFiles =
|
|
995
|
+
const attachFiles = react.useCallback(() => {
|
|
951
996
|
if (disabled) {
|
|
952
997
|
return;
|
|
953
998
|
}
|
|
@@ -955,7 +1000,7 @@ const ComposerForm = React.forwardRef(
|
|
|
955
1000
|
fileInputRef.current.click();
|
|
956
1001
|
}
|
|
957
1002
|
}, [disabled]);
|
|
958
|
-
const handleAttachmentsInputChange =
|
|
1003
|
+
const handleAttachmentsInputChange = react.useCallback(
|
|
959
1004
|
(event) => {
|
|
960
1005
|
if (disabled) {
|
|
961
1006
|
return;
|
|
@@ -967,13 +1012,13 @@ const ComposerForm = React.forwardRef(
|
|
|
967
1012
|
},
|
|
968
1013
|
[createAttachments, disabled]
|
|
969
1014
|
);
|
|
970
|
-
const onSubmitEnd =
|
|
1015
|
+
const onSubmitEnd = react.useCallback(() => {
|
|
971
1016
|
clear();
|
|
972
1017
|
blur();
|
|
973
1018
|
clearAttachments();
|
|
974
1019
|
setSubmitting(false);
|
|
975
1020
|
}, [blur, clear, clearAttachments]);
|
|
976
|
-
const handleSubmit =
|
|
1021
|
+
const handleSubmit = react.useCallback(
|
|
977
1022
|
(event) => {
|
|
978
1023
|
if (disabled) {
|
|
979
1024
|
return;
|
|
@@ -1016,10 +1061,10 @@ const ComposerForm = React.forwardRef(
|
|
|
1016
1061
|
},
|
|
1017
1062
|
[disabled, editor, attachments, onComposerSubmit, onSubmit, onSubmitEnd]
|
|
1018
1063
|
);
|
|
1019
|
-
const stopPropagation =
|
|
1064
|
+
const stopPropagation = react.useCallback((event) => {
|
|
1020
1065
|
event.stopPropagation();
|
|
1021
1066
|
}, []);
|
|
1022
|
-
const toggleMark =
|
|
1067
|
+
const toggleMark = react.useCallback(
|
|
1023
1068
|
(mark) => {
|
|
1024
1069
|
marks.toggleMark(editor, mark);
|
|
1025
1070
|
},
|
|
@@ -1028,75 +1073,85 @@ const ComposerForm = React.forwardRef(
|
|
|
1028
1073
|
useObservable.useObservable(onEditorChange, () => {
|
|
1029
1074
|
setMarks(marks.getMarks(editor));
|
|
1030
1075
|
});
|
|
1031
|
-
return /* @__PURE__ */
|
|
1076
|
+
return /* @__PURE__ */ jsxRuntime.jsx(contexts.ComposerEditorContext.Provider, {
|
|
1032
1077
|
value: {
|
|
1033
1078
|
editor,
|
|
1034
1079
|
validate,
|
|
1035
1080
|
setFocused,
|
|
1036
1081
|
onEditorChange,
|
|
1037
1082
|
roomId
|
|
1038
|
-
}
|
|
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
|
-
|
|
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
|
+
});
|
|
1079
1133
|
}
|
|
1080
1134
|
);
|
|
1081
|
-
const ComposerSubmit =
|
|
1135
|
+
const ComposerSubmit = react.forwardRef(
|
|
1082
1136
|
({ children, disabled, asChild, ...props }, forwardedRef) => {
|
|
1083
1137
|
const Component = asChild ? reactSlot.Slot : "button";
|
|
1084
1138
|
const { canSubmit, isDisabled: isComposerDisabled } = contexts.useComposer();
|
|
1085
1139
|
const isDisabled = isComposerDisabled || disabled || !canSubmit;
|
|
1086
|
-
return /* @__PURE__ */
|
|
1140
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
1087
1141
|
type: "submit",
|
|
1088
1142
|
...props,
|
|
1089
1143
|
ref: forwardedRef,
|
|
1090
|
-
disabled: isDisabled
|
|
1091
|
-
|
|
1144
|
+
disabled: isDisabled,
|
|
1145
|
+
children
|
|
1146
|
+
});
|
|
1092
1147
|
}
|
|
1093
1148
|
);
|
|
1094
|
-
const ComposerAttachFiles =
|
|
1149
|
+
const ComposerAttachFiles = react.forwardRef(({ children, onClick, disabled, asChild, ...props }, forwardedRef) => {
|
|
1095
1150
|
const Component = asChild ? reactSlot.Slot : "button";
|
|
1096
1151
|
const { hasMaxAttachments } = contexts.useComposerAttachmentsContext();
|
|
1097
1152
|
const { isDisabled: isComposerDisabled, attachFiles } = contexts.useComposer();
|
|
1098
1153
|
const isDisabled = isComposerDisabled || hasMaxAttachments || disabled;
|
|
1099
|
-
const handleClick =
|
|
1154
|
+
const handleClick = react.useCallback(
|
|
1100
1155
|
(event) => {
|
|
1101
1156
|
onClick?.(event);
|
|
1102
1157
|
if (!event.isDefaultPrevented()) {
|
|
@@ -1105,15 +1160,16 @@ const ComposerAttachFiles = React.forwardRef(({ children, onClick, disabled, asC
|
|
|
1105
1160
|
},
|
|
1106
1161
|
[attachFiles, onClick]
|
|
1107
1162
|
);
|
|
1108
|
-
return /* @__PURE__ */
|
|
1163
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
1109
1164
|
type: "button",
|
|
1110
1165
|
...props,
|
|
1111
1166
|
onClick: handleClick,
|
|
1112
1167
|
ref: forwardedRef,
|
|
1113
|
-
disabled: isDisabled
|
|
1114
|
-
|
|
1168
|
+
disabled: isDisabled,
|
|
1169
|
+
children
|
|
1170
|
+
});
|
|
1115
1171
|
});
|
|
1116
|
-
const ComposerAttachmentsDropArea =
|
|
1172
|
+
const ComposerAttachmentsDropArea = react.forwardRef(
|
|
1117
1173
|
({
|
|
1118
1174
|
onDragEnter,
|
|
1119
1175
|
onDragLeave,
|
|
@@ -1133,7 +1189,7 @@ const ComposerAttachmentsDropArea = React.forwardRef(
|
|
|
1133
1189
|
onDrop,
|
|
1134
1190
|
disabled: isDisabled
|
|
1135
1191
|
});
|
|
1136
|
-
return /* @__PURE__ */
|
|
1192
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
1137
1193
|
...dropAreaProps,
|
|
1138
1194
|
"data-disabled": isDisabled ? "" : void 0,
|
|
1139
1195
|
...props,
|
|
@@ -1141,11 +1197,11 @@ const ComposerAttachmentsDropArea = React.forwardRef(
|
|
|
1141
1197
|
});
|
|
1142
1198
|
}
|
|
1143
1199
|
);
|
|
1144
|
-
const ComposerMarkToggle =
|
|
1200
|
+
const ComposerMarkToggle = react.forwardRef(
|
|
1145
1201
|
({ children, mark, onValueChange, onClick, asChild, ...props }, forwardedRef) => {
|
|
1146
1202
|
const Component = asChild ? reactSlot.Slot : "button";
|
|
1147
1203
|
const { marks, toggleMark } = contexts.useComposer();
|
|
1148
|
-
const handleClick =
|
|
1204
|
+
const handleClick = react.useCallback(
|
|
1149
1205
|
(event) => {
|
|
1150
1206
|
onClick?.(event);
|
|
1151
1207
|
if (!event.isDefaultPrevented()) {
|
|
@@ -1155,15 +1211,17 @@ const ComposerMarkToggle = React.forwardRef(
|
|
|
1155
1211
|
},
|
|
1156
1212
|
[mark, onClick, onValueChange, toggleMark]
|
|
1157
1213
|
);
|
|
1158
|
-
return /* @__PURE__ */
|
|
1214
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TogglePrimitive__namespace.Root, {
|
|
1159
1215
|
asChild: true,
|
|
1160
1216
|
pressed: marks[mark],
|
|
1161
1217
|
onClick: handleClick,
|
|
1162
|
-
...props
|
|
1163
|
-
}, /* @__PURE__ */ React.createElement(Component, {
|
|
1164
1218
|
...props,
|
|
1165
|
-
|
|
1166
|
-
|
|
1219
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
1220
|
+
...props,
|
|
1221
|
+
ref: forwardedRef,
|
|
1222
|
+
children
|
|
1223
|
+
})
|
|
1224
|
+
});
|
|
1167
1225
|
}
|
|
1168
1226
|
);
|
|
1169
1227
|
if (process.env.NODE_ENV !== "production") {
|