@liveblocks/react-lexical 2.18.3 → 2.18.4-uns2
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/{classnames.mjs → classnames.cjs} +4 -2
- package/dist/{classnames.mjs.map → classnames.cjs.map} +1 -1
- package/dist/classnames.js +1 -3
- package/dist/classnames.js.map +1 -1
- package/dist/comments/{anchored-threads.mjs → anchored-threads.cjs} +44 -41
- package/dist/comments/{anchored-threads.mjs.map → anchored-threads.cjs.map} +1 -1
- package/dist/comments/anchored-threads.js +40 -43
- package/dist/comments/anchored-threads.js.map +1 -1
- package/dist/comments/{comment-plugin-provider.mjs → comment-plugin-provider.cjs} +62 -55
- package/dist/comments/{comment-plugin-provider.mjs.map → comment-plugin-provider.cjs.map} +1 -1
- package/dist/comments/comment-plugin-provider.js +54 -61
- package/dist/comments/comment-plugin-provider.js.map +1 -1
- package/dist/comments/{floating-composer.mjs → floating-composer.cjs} +68 -64
- package/dist/comments/{floating-composer.mjs.map → floating-composer.cjs.map} +1 -1
- package/dist/comments/floating-composer.js +63 -67
- package/dist/comments/floating-composer.js.map +1 -1
- package/dist/comments/{floating-threads.mjs → floating-threads.cjs} +51 -48
- package/dist/comments/{floating-threads.mjs.map → floating-threads.cjs.map} +1 -1
- package/dist/comments/floating-threads.js +47 -50
- package/dist/comments/floating-threads.js.map +1 -1
- package/dist/comments/get-thread-mark-ids.cjs +23 -0
- package/dist/comments/{get-thread-mark-ids.mjs.map → get-thread-mark-ids.cjs.map} +1 -1
- package/dist/comments/get-thread-mark-ids.js +6 -8
- package/dist/comments/get-thread-mark-ids.js.map +1 -1
- package/dist/comments/{thread-mark-node.mjs → thread-mark-node.cjs} +10 -6
- package/dist/comments/{thread-mark-node.mjs.map → thread-mark-node.cjs.map} +1 -1
- package/dist/comments/thread-mark-node.js +5 -9
- package/dist/comments/thread-mark-node.js.map +1 -1
- package/dist/comments/{unwrap-thread-mark-node.mjs → unwrap-thread-mark-node.cjs} +4 -2
- package/dist/comments/unwrap-thread-mark-node.cjs.map +1 -0
- package/dist/comments/unwrap-thread-mark-node.js +1 -3
- package/dist/comments/unwrap-thread-mark-node.js.map +1 -1
- package/dist/comments/{wrap-selection-in-thread-mark-node.mjs → wrap-selection-in-thread-mark-node.cjs} +12 -10
- package/dist/comments/{wrap-selection-in-thread-mark-node.mjs.map → wrap-selection-in-thread-mark-node.cjs.map} +1 -1
- package/dist/comments/wrap-selection-in-thread-mark-node.js +9 -11
- package/dist/comments/wrap-selection-in-thread-mark-node.js.map +1 -1
- package/dist/{create-dom-range.mjs → create-dom-range.cjs} +7 -5
- package/dist/{create-dom-range.mjs.map → create-dom-range.cjs.map} +1 -1
- package/dist/create-dom-range.js +4 -6
- package/dist/create-dom-range.js.map +1 -1
- package/dist/{create-rects-from-dom-range.mjs → create-rects-from-dom-range.cjs} +4 -2
- package/dist/{create-rects-from-dom-range.mjs.map → create-rects-from-dom-range.cjs.map} +1 -1
- package/dist/create-rects-from-dom-range.js +1 -3
- package/dist/create-rects-from-dom-range.js.map +1 -1
- package/dist/index.cjs +33 -0
- package/dist/{index.mjs.map → index.cjs.map} +1 -1
- package/dist/index.js +14 -31
- package/dist/index.js.map +1 -1
- package/dist/{is-block-node-active.mjs → is-block-node-active.cjs} +12 -10
- package/dist/{is-block-node-active.mjs.map → is-block-node-active.cjs.map} +1 -1
- package/dist/is-block-node-active.js +9 -11
- package/dist/is-block-node-active.js.map +1 -1
- package/dist/is-command-registered.cjs +11 -0
- package/dist/{is-command-registered.mjs.map → is-command-registered.cjs.map} +1 -1
- package/dist/is-command-registered.js +3 -5
- package/dist/is-command-registered.js.map +1 -1
- package/dist/is-text-format-active.cjs +16 -0
- package/dist/{is-text-format-active.mjs.map → is-text-format-active.cjs.map} +1 -1
- package/dist/is-text-format-active.js +4 -6
- package/dist/is-text-format-active.js.map +1 -1
- package/dist/liveblocks-config.cjs +17 -0
- package/dist/{liveblocks-config.mjs.map → liveblocks-config.cjs.map} +1 -1
- package/dist/liveblocks-config.js +4 -6
- package/dist/liveblocks-config.js.map +1 -1
- package/dist/liveblocks-plugin-provider.cjs +151 -0
- package/dist/liveblocks-plugin-provider.cjs.map +1 -0
- package/dist/liveblocks-plugin-provider.js +43 -47
- package/dist/liveblocks-plugin-provider.js.map +1 -1
- package/dist/mentions/{avatar.mjs → avatar.cjs} +16 -14
- package/dist/mentions/avatar.cjs.map +1 -0
- package/dist/mentions/avatar.js +13 -15
- package/dist/mentions/avatar.js.map +1 -1
- package/dist/mentions/mention-component.cjs +51 -0
- package/dist/mentions/{mention-component.mjs.map → mention-component.cjs.map} +1 -1
- package/dist/mentions/mention-component.js +14 -16
- package/dist/mentions/mention-component.js.map +1 -1
- package/dist/mentions/{mention-node.mjs → mention-node.cjs} +16 -12
- package/dist/mentions/{mention-node.mjs.map → mention-node.cjs.map} +1 -1
- package/dist/mentions/mention-node.js +11 -15
- package/dist/mentions/mention-node.js.map +1 -1
- package/dist/mentions/{mention-plugin.mjs → mention-plugin.cjs} +81 -78
- package/dist/mentions/{mention-plugin.mjs.map → mention-plugin.cjs.map} +1 -1
- package/dist/mentions/mention-plugin.js +77 -80
- package/dist/mentions/mention-plugin.js.map +1 -1
- package/dist/mentions/{suggestions.mjs → suggestions.cjs} +43 -37
- package/dist/mentions/{suggestions.mjs.map → suggestions.cjs.map} +1 -1
- package/dist/mentions/suggestions.js +36 -42
- package/dist/mentions/suggestions.js.map +1 -1
- package/dist/mentions/user.cjs +26 -0
- package/dist/mentions/{user.mjs.map → user.cjs.map} +1 -1
- package/dist/mentions/user.js +11 -13
- package/dist/mentions/user.js.map +1 -1
- package/dist/toolbar/{floating-toolbar.mjs → floating-toolbar.cjs} +73 -70
- package/dist/toolbar/{floating-toolbar.mjs.map → floating-toolbar.cjs.map} +1 -1
- package/dist/toolbar/floating-toolbar.js +69 -72
- package/dist/toolbar/floating-toolbar.js.map +1 -1
- package/dist/toolbar/shared.cjs +36 -0
- package/dist/toolbar/{shared.mjs.map → shared.cjs.map} +1 -1
- package/dist/toolbar/shared.js +12 -15
- package/dist/toolbar/shared.js.map +1 -1
- package/dist/toolbar/toolbar.cjs +433 -0
- package/dist/toolbar/{toolbar.mjs.map → toolbar.cjs.map} +1 -1
- package/dist/toolbar/toolbar.js +131 -156
- package/dist/toolbar/toolbar.js.map +1 -1
- package/dist/use-root-element.cjs +21 -0
- package/dist/use-root-element.cjs.map +1 -0
- package/dist/use-root-element.js +7 -9
- package/dist/use-root-element.js.map +1 -1
- package/dist/version-history/{history-version-preview.mjs → history-version-preview.cjs} +52 -50
- package/dist/version-history/{history-version-preview.mjs.map → history-version-preview.cjs.map} +1 -1
- package/dist/version-history/history-version-preview.js +49 -51
- package/dist/version-history/history-version-preview.js.map +1 -1
- package/dist/version.cjs +10 -0
- package/dist/{version.mjs.map → version.cjs.map} +1 -1
- package/dist/version.js +3 -7
- package/dist/version.js.map +1 -1
- package/package.json +18 -17
- package/styles.css.d.cts +1 -0
- package/dist/comments/get-thread-mark-ids.mjs +0 -21
- package/dist/comments/unwrap-thread-mark-node.mjs.map +0 -1
- package/dist/index.mjs +0 -16
- package/dist/is-command-registered.mjs +0 -9
- package/dist/is-text-format-active.mjs +0 -14
- package/dist/liveblocks-config.mjs +0 -15
- package/dist/liveblocks-plugin-provider.mjs +0 -147
- package/dist/liveblocks-plugin-provider.mjs.map +0 -1
- package/dist/mentions/avatar.mjs.map +0 -1
- package/dist/mentions/mention-component.mjs +0 -49
- package/dist/mentions/user.mjs +0 -24
- package/dist/toolbar/shared.mjs +0 -33
- package/dist/toolbar/toolbar.mjs +0 -408
- package/dist/use-root-element.mjs +0 -19
- package/dist/use-root-element.mjs.map +0 -1
- package/dist/version.mjs +0 -6
- /package/dist/{index.d.mts → index.d.cts} +0 -0
package/dist/toolbar/toolbar.js
CHANGED
|
@@ -1,58 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var isTextFormatActive = require('../is-text-format-active.js');
|
|
18
|
-
var shared = require('./shared.js');
|
|
19
|
-
|
|
20
|
-
function _interopNamespaceDefault(e) {
|
|
21
|
-
var n = Object.create(null);
|
|
22
|
-
if (e) {
|
|
23
|
-
Object.keys(e).forEach(function (k) {
|
|
24
|
-
if (k !== 'default') {
|
|
25
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
26
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
get: function () { return e[k]; }
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
n.default = e;
|
|
34
|
-
return Object.freeze(n);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(SelectPrimitive);
|
|
38
|
-
var TogglePrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(TogglePrimitive);
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
3
|
+
import { $isHeadingNode, $createHeadingNode, $createQuoteNode } from '@lexical/rich-text';
|
|
4
|
+
import { $setBlocksType } from '@lexical/selection';
|
|
5
|
+
import { mergeRegister } from '@lexical/utils';
|
|
6
|
+
import { ShortcutTooltip, Button, UndoIcon, RedoIcon, BoldIcon, ItalicIcon, UnderlineIcon, StrikethroughIcon, CodeIcon, CommentIcon, TextIcon, H1Icon, H2Icon, H3Icon, BlockquoteIcon, SelectButton, CheckIcon, TooltipProvider } from '@liveblocks/react-ui/_private';
|
|
7
|
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
8
|
+
import * as TogglePrimitive from '@radix-ui/react-toggle';
|
|
9
|
+
import { CAN_UNDO_COMMAND, COMMAND_PRIORITY_CRITICAL, CAN_REDO_COMMAND, UNDO_COMMAND, REDO_COMMAND, FORMAT_TEXT_COMMAND, createCommand, $getSelection, $createParagraphNode, COMMAND_PRIORITY_LOW } from 'lexical';
|
|
10
|
+
import { forwardRef, useContext, useCallback, useState, useEffect, useMemo } from 'react';
|
|
11
|
+
import { classNames } from '../classnames.js';
|
|
12
|
+
import { OPEN_FLOATING_COMPOSER_COMMAND } from '../comments/floating-composer.js';
|
|
13
|
+
import { isBlockNodeActive } from '../is-block-node-active.js';
|
|
14
|
+
import { useIsCommandRegistered } from '../is-command-registered.js';
|
|
15
|
+
import { isTextFormatActive } from '../is-text-format-active.js';
|
|
16
|
+
import { FloatingToolbarContext, FloatingToolbarExternal } from './shared.js';
|
|
39
17
|
|
|
40
18
|
const BLOCK_SELECT_SIDE_OFFSET = 10;
|
|
41
19
|
const FLOATING_ELEMENT_COLLISION_PADDING = 10;
|
|
42
20
|
function applyToolbarSlot(slot, props) {
|
|
43
21
|
if (typeof slot === "function") {
|
|
44
22
|
const Component = slot;
|
|
45
|
-
return /* @__PURE__ */
|
|
23
|
+
return /* @__PURE__ */ jsx(Component, {
|
|
46
24
|
...props
|
|
47
25
|
});
|
|
48
26
|
}
|
|
49
27
|
return slot;
|
|
50
28
|
}
|
|
51
|
-
const ToolbarButton =
|
|
29
|
+
const ToolbarButton = forwardRef(
|
|
52
30
|
({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {
|
|
53
|
-
const floatingToolbarContext =
|
|
31
|
+
const floatingToolbarContext = useContext(FloatingToolbarContext);
|
|
54
32
|
const closeFloatingToolbar = floatingToolbarContext?.close;
|
|
55
|
-
const handleKeyDown =
|
|
33
|
+
const handleKeyDown = useCallback(
|
|
56
34
|
(event) => {
|
|
57
35
|
onKeyDown?.(event);
|
|
58
36
|
if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
|
|
@@ -63,10 +41,10 @@ const ToolbarButton = react.forwardRef(
|
|
|
63
41
|
},
|
|
64
42
|
[onKeyDown, closeFloatingToolbar]
|
|
65
43
|
);
|
|
66
|
-
return /* @__PURE__ */
|
|
44
|
+
return /* @__PURE__ */ jsx(ShortcutTooltip, {
|
|
67
45
|
content: name,
|
|
68
46
|
shortcut,
|
|
69
|
-
children: /* @__PURE__ */
|
|
47
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
70
48
|
type: "button",
|
|
71
49
|
variant: "toolbar",
|
|
72
50
|
ref: forwardedRef,
|
|
@@ -79,154 +57,154 @@ const ToolbarButton = react.forwardRef(
|
|
|
79
57
|
});
|
|
80
58
|
}
|
|
81
59
|
);
|
|
82
|
-
const ToolbarToggle =
|
|
60
|
+
const ToolbarToggle = forwardRef(
|
|
83
61
|
({ active, ...props }, forwardedRef) => {
|
|
84
|
-
return /* @__PURE__ */
|
|
62
|
+
return /* @__PURE__ */ jsx(TogglePrimitive.Root, {
|
|
85
63
|
asChild: true,
|
|
86
64
|
pressed: active,
|
|
87
|
-
children: /* @__PURE__ */
|
|
65
|
+
children: /* @__PURE__ */ jsx(ToolbarButton, {
|
|
88
66
|
ref: forwardedRef,
|
|
89
67
|
...props
|
|
90
68
|
})
|
|
91
69
|
});
|
|
92
70
|
}
|
|
93
71
|
);
|
|
94
|
-
const ToolbarSeparator =
|
|
72
|
+
const ToolbarSeparator = forwardRef(
|
|
95
73
|
({ className, ...props }, forwardedRef) => {
|
|
96
|
-
return /* @__PURE__ */
|
|
74
|
+
return /* @__PURE__ */ jsx("div", {
|
|
97
75
|
ref: forwardedRef,
|
|
98
76
|
role: "separator",
|
|
99
77
|
"aria-orientation": "vertical",
|
|
100
|
-
className:
|
|
78
|
+
className: classNames("lb-lexical-toolbar-separator", className),
|
|
101
79
|
...props
|
|
102
80
|
});
|
|
103
81
|
}
|
|
104
82
|
);
|
|
105
83
|
function ToolbarSectionHistory() {
|
|
106
|
-
const [editor] =
|
|
107
|
-
const [canUndo, setCanUndo] =
|
|
108
|
-
const [canRedo, setCanRedo] =
|
|
109
|
-
|
|
110
|
-
const unregister =
|
|
84
|
+
const [editor] = useLexicalComposerContext();
|
|
85
|
+
const [canUndo, setCanUndo] = useState(false);
|
|
86
|
+
const [canRedo, setCanRedo] = useState(false);
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
const unregister = mergeRegister(
|
|
111
89
|
editor.registerCommand(
|
|
112
|
-
|
|
90
|
+
CAN_UNDO_COMMAND,
|
|
113
91
|
(payload) => {
|
|
114
92
|
setCanUndo(payload);
|
|
115
93
|
return false;
|
|
116
94
|
},
|
|
117
|
-
|
|
95
|
+
COMMAND_PRIORITY_CRITICAL
|
|
118
96
|
),
|
|
119
97
|
editor.registerCommand(
|
|
120
|
-
|
|
98
|
+
CAN_REDO_COMMAND,
|
|
121
99
|
(payload) => {
|
|
122
100
|
setCanRedo(payload);
|
|
123
101
|
return false;
|
|
124
102
|
},
|
|
125
|
-
|
|
103
|
+
COMMAND_PRIORITY_CRITICAL
|
|
126
104
|
)
|
|
127
105
|
);
|
|
128
106
|
return unregister;
|
|
129
107
|
}, [editor]);
|
|
130
|
-
return /* @__PURE__ */
|
|
108
|
+
return /* @__PURE__ */ jsxs(Fragment, {
|
|
131
109
|
children: [
|
|
132
|
-
/* @__PURE__ */
|
|
110
|
+
/* @__PURE__ */ jsx(ToolbarButton, {
|
|
133
111
|
name: "Undo",
|
|
134
|
-
icon: /* @__PURE__ */
|
|
112
|
+
icon: /* @__PURE__ */ jsx(UndoIcon, {}),
|
|
135
113
|
shortcut: "Mod-Z",
|
|
136
|
-
onClick: () => editor.dispatchCommand(
|
|
114
|
+
onClick: () => editor.dispatchCommand(UNDO_COMMAND, void 0),
|
|
137
115
|
disabled: !canUndo
|
|
138
116
|
}),
|
|
139
|
-
/* @__PURE__ */
|
|
117
|
+
/* @__PURE__ */ jsx(ToolbarButton, {
|
|
140
118
|
name: "Redo",
|
|
141
|
-
icon: /* @__PURE__ */
|
|
119
|
+
icon: /* @__PURE__ */ jsx(RedoIcon, {}),
|
|
142
120
|
shortcut: "Mod-Shift-Z",
|
|
143
|
-
onClick: () => editor.dispatchCommand(
|
|
121
|
+
onClick: () => editor.dispatchCommand(REDO_COMMAND, void 0),
|
|
144
122
|
disabled: !canRedo
|
|
145
123
|
})
|
|
146
124
|
]
|
|
147
125
|
});
|
|
148
126
|
}
|
|
149
127
|
function ToolbarSectionInline() {
|
|
150
|
-
const [editor] =
|
|
151
|
-
const supportsTextFormat =
|
|
152
|
-
return supportsTextFormat ? /* @__PURE__ */
|
|
128
|
+
const [editor] = useLexicalComposerContext();
|
|
129
|
+
const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);
|
|
130
|
+
return supportsTextFormat ? /* @__PURE__ */ jsxs(Fragment, {
|
|
153
131
|
children: [
|
|
154
|
-
/* @__PURE__ */
|
|
132
|
+
/* @__PURE__ */ jsx(ToolbarToggle, {
|
|
155
133
|
name: "Bold",
|
|
156
|
-
icon: /* @__PURE__ */
|
|
134
|
+
icon: /* @__PURE__ */ jsx(BoldIcon, {}),
|
|
157
135
|
shortcut: "Mod-B",
|
|
158
|
-
onClick: () => editor.dispatchCommand(
|
|
159
|
-
active: isTextFormatActive
|
|
136
|
+
onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "bold"),
|
|
137
|
+
active: isTextFormatActive(editor, "bold")
|
|
160
138
|
}),
|
|
161
|
-
/* @__PURE__ */
|
|
139
|
+
/* @__PURE__ */ jsx(ToolbarToggle, {
|
|
162
140
|
name: "Italic",
|
|
163
|
-
icon: /* @__PURE__ */
|
|
141
|
+
icon: /* @__PURE__ */ jsx(ItalicIcon, {}),
|
|
164
142
|
shortcut: "Mod-I",
|
|
165
|
-
onClick: () => editor.dispatchCommand(
|
|
166
|
-
active: isTextFormatActive
|
|
143
|
+
onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "italic"),
|
|
144
|
+
active: isTextFormatActive(editor, "italic")
|
|
167
145
|
}),
|
|
168
|
-
/* @__PURE__ */
|
|
146
|
+
/* @__PURE__ */ jsx(ToolbarToggle, {
|
|
169
147
|
name: "Underline",
|
|
170
|
-
icon: /* @__PURE__ */
|
|
148
|
+
icon: /* @__PURE__ */ jsx(UnderlineIcon, {}),
|
|
171
149
|
shortcut: "Mod-U",
|
|
172
|
-
onClick: () => editor.dispatchCommand(
|
|
173
|
-
active: isTextFormatActive
|
|
150
|
+
onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "underline"),
|
|
151
|
+
active: isTextFormatActive(editor, "underline")
|
|
174
152
|
}),
|
|
175
|
-
/* @__PURE__ */
|
|
153
|
+
/* @__PURE__ */ jsx(ToolbarToggle, {
|
|
176
154
|
name: "Strikethrough",
|
|
177
|
-
icon: /* @__PURE__ */
|
|
178
|
-
onClick: () => editor.dispatchCommand(
|
|
179
|
-
active: isTextFormatActive
|
|
155
|
+
icon: /* @__PURE__ */ jsx(StrikethroughIcon, {}),
|
|
156
|
+
onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "strikethrough"),
|
|
157
|
+
active: isTextFormatActive(editor, "strikethrough")
|
|
180
158
|
}),
|
|
181
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ jsx(ToolbarToggle, {
|
|
182
160
|
name: "Inline code",
|
|
183
|
-
icon: /* @__PURE__ */
|
|
184
|
-
onClick: () => editor.dispatchCommand(
|
|
185
|
-
active: isTextFormatActive
|
|
161
|
+
icon: /* @__PURE__ */ jsx(CodeIcon, {}),
|
|
162
|
+
onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "code"),
|
|
163
|
+
active: isTextFormatActive(editor, "code")
|
|
186
164
|
})
|
|
187
165
|
]
|
|
188
166
|
}) : null;
|
|
189
167
|
}
|
|
190
168
|
function ToolbarSectionCollaboration() {
|
|
191
|
-
const [editor] =
|
|
192
|
-
const supportsThread =
|
|
193
|
-
return /* @__PURE__ */
|
|
194
|
-
children: supportsThread ? /* @__PURE__ */
|
|
169
|
+
const [editor] = useLexicalComposerContext();
|
|
170
|
+
const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);
|
|
171
|
+
return /* @__PURE__ */ jsx(Fragment, {
|
|
172
|
+
children: supportsThread ? /* @__PURE__ */ jsx(ToolbarButton, {
|
|
195
173
|
name: "Add a comment",
|
|
196
|
-
icon: /* @__PURE__ */
|
|
197
|
-
onClick: () => editor.dispatchCommand(
|
|
174
|
+
icon: /* @__PURE__ */ jsx(CommentIcon, {}),
|
|
175
|
+
onClick: () => editor.dispatchCommand(OPEN_FLOATING_COMPOSER_COMMAND, void 0),
|
|
198
176
|
children: "Comment"
|
|
199
177
|
}) : null
|
|
200
178
|
});
|
|
201
179
|
}
|
|
202
180
|
function DefaultToolbarContent() {
|
|
203
|
-
const supportsTextFormat =
|
|
204
|
-
const supportsThread =
|
|
205
|
-
return /* @__PURE__ */
|
|
181
|
+
const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);
|
|
182
|
+
const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);
|
|
183
|
+
return /* @__PURE__ */ jsxs(Fragment, {
|
|
206
184
|
children: [
|
|
207
|
-
/* @__PURE__ */
|
|
208
|
-
supportsTextFormat ? /* @__PURE__ */
|
|
185
|
+
/* @__PURE__ */ jsx(ToolbarSectionHistory, {}),
|
|
186
|
+
supportsTextFormat ? /* @__PURE__ */ jsxs(Fragment, {
|
|
209
187
|
children: [
|
|
210
|
-
/* @__PURE__ */
|
|
211
|
-
/* @__PURE__ */
|
|
212
|
-
/* @__PURE__ */
|
|
188
|
+
/* @__PURE__ */ jsx(ToolbarSeparator, {}),
|
|
189
|
+
/* @__PURE__ */ jsx(ToolbarBlockSelector, {}),
|
|
190
|
+
/* @__PURE__ */ jsx(ToolbarSectionInline, {})
|
|
213
191
|
]
|
|
214
192
|
}) : null,
|
|
215
|
-
supportsThread ? /* @__PURE__ */
|
|
193
|
+
supportsThread ? /* @__PURE__ */ jsxs(Fragment, {
|
|
216
194
|
children: [
|
|
217
|
-
/* @__PURE__ */
|
|
218
|
-
/* @__PURE__ */
|
|
195
|
+
/* @__PURE__ */ jsx(ToolbarSeparator, {}),
|
|
196
|
+
/* @__PURE__ */ jsx(ToolbarSectionCollaboration, {})
|
|
219
197
|
]
|
|
220
198
|
}) : null
|
|
221
199
|
]
|
|
222
200
|
});
|
|
223
201
|
}
|
|
224
|
-
const INITIAL_COMMANDS_REGISTERED_COMMAND =
|
|
202
|
+
const INITIAL_COMMANDS_REGISTERED_COMMAND = createCommand(
|
|
225
203
|
"INITIAL_COMMANDS_REGISTERED_COMMAND"
|
|
226
204
|
);
|
|
227
205
|
function useRerender() {
|
|
228
|
-
const [, setRerender] =
|
|
229
|
-
return
|
|
206
|
+
const [, setRerender] = useState(false);
|
|
207
|
+
return useCallback(() => {
|
|
230
208
|
setRerender((toggle) => !toggle);
|
|
231
209
|
}, [setRerender]);
|
|
232
210
|
}
|
|
@@ -234,53 +212,53 @@ function createDefaultBlockSelectorItems() {
|
|
|
234
212
|
const items = [
|
|
235
213
|
{
|
|
236
214
|
name: "Text",
|
|
237
|
-
icon: /* @__PURE__ */
|
|
215
|
+
icon: /* @__PURE__ */ jsx(TextIcon, {}),
|
|
238
216
|
isActive: "default",
|
|
239
|
-
setActive: () =>
|
|
217
|
+
setActive: () => $setBlocksType($getSelection(), () => $createParagraphNode())
|
|
240
218
|
},
|
|
241
219
|
{
|
|
242
220
|
name: "Heading 1",
|
|
243
|
-
icon: /* @__PURE__ */
|
|
221
|
+
icon: /* @__PURE__ */ jsx(H1Icon, {}),
|
|
244
222
|
isActive: (editor) => {
|
|
245
|
-
return isBlockNodeActive
|
|
223
|
+
return isBlockNodeActive(
|
|
246
224
|
editor,
|
|
247
|
-
(node) =>
|
|
225
|
+
(node) => $isHeadingNode(node) ? node.getTag() === "h1" : false
|
|
248
226
|
);
|
|
249
227
|
},
|
|
250
|
-
setActive: () =>
|
|
228
|
+
setActive: () => $setBlocksType($getSelection(), () => $createHeadingNode("h1"))
|
|
251
229
|
},
|
|
252
230
|
{
|
|
253
231
|
name: "Heading 2",
|
|
254
|
-
icon: /* @__PURE__ */
|
|
255
|
-
isActive: (editor) => isBlockNodeActive
|
|
232
|
+
icon: /* @__PURE__ */ jsx(H2Icon, {}),
|
|
233
|
+
isActive: (editor) => isBlockNodeActive(
|
|
256
234
|
editor,
|
|
257
|
-
(node) =>
|
|
235
|
+
(node) => $isHeadingNode(node) ? node.getTag() === "h2" : false
|
|
258
236
|
),
|
|
259
|
-
setActive: () =>
|
|
237
|
+
setActive: () => $setBlocksType($getSelection(), () => $createHeadingNode("h2"))
|
|
260
238
|
},
|
|
261
239
|
{
|
|
262
240
|
name: "Heading 3",
|
|
263
|
-
icon: /* @__PURE__ */
|
|
264
|
-
isActive: (editor) => isBlockNodeActive
|
|
241
|
+
icon: /* @__PURE__ */ jsx(H3Icon, {}),
|
|
242
|
+
isActive: (editor) => isBlockNodeActive(
|
|
265
243
|
editor,
|
|
266
|
-
(node) =>
|
|
244
|
+
(node) => $isHeadingNode(node) ? node.getTag() === "h3" : false
|
|
267
245
|
),
|
|
268
|
-
setActive: () =>
|
|
246
|
+
setActive: () => $setBlocksType($getSelection(), () => $createHeadingNode("h3"))
|
|
269
247
|
},
|
|
270
248
|
{
|
|
271
249
|
name: "Blockquote",
|
|
272
|
-
icon: /* @__PURE__ */
|
|
273
|
-
isActive: (editor) => isBlockNodeActive
|
|
274
|
-
setActive: () =>
|
|
250
|
+
icon: /* @__PURE__ */ jsx(BlockquoteIcon, {}),
|
|
251
|
+
isActive: (editor) => isBlockNodeActive(editor, (node) => node.getType() === "quote"),
|
|
252
|
+
setActive: () => $setBlocksType($getSelection(), () => $createQuoteNode())
|
|
275
253
|
}
|
|
276
254
|
];
|
|
277
255
|
return items.filter(Boolean);
|
|
278
256
|
}
|
|
279
|
-
const ToolbarBlockSelector =
|
|
280
|
-
const floatingToolbarContext =
|
|
257
|
+
const ToolbarBlockSelector = forwardRef(({ items, onKeyDown, ...props }, forwardedRef) => {
|
|
258
|
+
const floatingToolbarContext = useContext(FloatingToolbarContext);
|
|
281
259
|
const closeFloatingToolbar = floatingToolbarContext?.close;
|
|
282
|
-
const [editor] =
|
|
283
|
-
const resolvedItems =
|
|
260
|
+
const [editor] = useLexicalComposerContext();
|
|
261
|
+
const resolvedItems = useMemo(() => {
|
|
284
262
|
if (Array.isArray(items)) {
|
|
285
263
|
return items;
|
|
286
264
|
}
|
|
@@ -305,7 +283,7 @@ const ToolbarBlockSelector = react.forwardRef(({ items, onKeyDown, ...props }, f
|
|
|
305
283
|
floatingToolbarContext?.close();
|
|
306
284
|
}
|
|
307
285
|
};
|
|
308
|
-
const handleKeyDown =
|
|
286
|
+
const handleKeyDown = useCallback(
|
|
309
287
|
(event) => {
|
|
310
288
|
onKeyDown?.(event);
|
|
311
289
|
if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
|
|
@@ -316,47 +294,47 @@ const ToolbarBlockSelector = react.forwardRef(({ items, onKeyDown, ...props }, f
|
|
|
316
294
|
},
|
|
317
295
|
[onKeyDown, closeFloatingToolbar]
|
|
318
296
|
);
|
|
319
|
-
return /* @__PURE__ */
|
|
297
|
+
return /* @__PURE__ */ jsxs(SelectPrimitive.Root, {
|
|
320
298
|
value: activeItem?.name,
|
|
321
299
|
onValueChange: handleItemChange,
|
|
322
300
|
children: [
|
|
323
|
-
/* @__PURE__ */
|
|
301
|
+
/* @__PURE__ */ jsx(ShortcutTooltip, {
|
|
324
302
|
content: "Turn into\u2026",
|
|
325
|
-
children: /* @__PURE__ */
|
|
303
|
+
children: /* @__PURE__ */ jsx(SelectPrimitive.Trigger, {
|
|
326
304
|
asChild: true,
|
|
327
305
|
...props,
|
|
328
306
|
ref: forwardedRef,
|
|
329
307
|
onKeyDown: handleKeyDown,
|
|
330
308
|
disabled: resolvedItems.length === 0,
|
|
331
|
-
children: /* @__PURE__ */
|
|
309
|
+
children: /* @__PURE__ */ jsx(SelectButton, {
|
|
332
310
|
variant: "toolbar",
|
|
333
311
|
children: activeItem?.name ?? "Turn into\u2026"
|
|
334
312
|
})
|
|
335
313
|
})
|
|
336
314
|
}),
|
|
337
|
-
/* @__PURE__ */
|
|
338
|
-
children: /* @__PURE__ */
|
|
339
|
-
children: /* @__PURE__ */
|
|
315
|
+
/* @__PURE__ */ jsx(SelectPrimitive.Portal, {
|
|
316
|
+
children: /* @__PURE__ */ jsx(FloatingToolbarExternal, {
|
|
317
|
+
children: /* @__PURE__ */ jsx(SelectPrimitive.Content, {
|
|
340
318
|
position: "popper",
|
|
341
319
|
sideOffset: BLOCK_SELECT_SIDE_OFFSET,
|
|
342
320
|
collisionPadding: FLOATING_ELEMENT_COLLISION_PADDING,
|
|
343
321
|
className: "lb-root lb-portal lb-elevation lb-dropdown lb-select-dropdown lb-lexical-block-selector-dropdown",
|
|
344
|
-
children: resolvedItems.map((item) => /* @__PURE__ */
|
|
322
|
+
children: resolvedItems.map((item) => /* @__PURE__ */ jsxs(SelectPrimitive.Item, {
|
|
345
323
|
value: item.name,
|
|
346
324
|
className: "lb-dropdown-item",
|
|
347
325
|
"data-name": item.name,
|
|
348
326
|
children: [
|
|
349
|
-
item.icon ? /* @__PURE__ */
|
|
327
|
+
item.icon ? /* @__PURE__ */ jsx("span", {
|
|
350
328
|
className: "lb-dropdown-item-icon lb-icon-container",
|
|
351
329
|
children: item.icon
|
|
352
330
|
}) : null,
|
|
353
|
-
/* @__PURE__ */
|
|
331
|
+
/* @__PURE__ */ jsx("span", {
|
|
354
332
|
className: "lb-dropdown-item-label",
|
|
355
333
|
children: item.label ?? item.name
|
|
356
334
|
}),
|
|
357
|
-
item.name === activeItem?.name ? /* @__PURE__ */
|
|
335
|
+
item.name === activeItem?.name ? /* @__PURE__ */ jsx("span", {
|
|
358
336
|
className: "lb-dropdown-item-accessory lb-icon-container",
|
|
359
|
-
children: /* @__PURE__ */
|
|
337
|
+
children: /* @__PURE__ */ jsx(CheckIcon, {})
|
|
360
338
|
}) : null
|
|
361
339
|
]
|
|
362
340
|
}, item.name))
|
|
@@ -367,13 +345,13 @@ const ToolbarBlockSelector = react.forwardRef(({ items, onKeyDown, ...props }, f
|
|
|
367
345
|
});
|
|
368
346
|
});
|
|
369
347
|
const Toolbar = Object.assign(
|
|
370
|
-
|
|
348
|
+
forwardRef(
|
|
371
349
|
({ before, after, children = DefaultToolbarContent, className, ...props }, forwardedRef) => {
|
|
372
|
-
const [editor] =
|
|
373
|
-
const [commandsRegistered, setCommandsRegistered] =
|
|
350
|
+
const [editor] = useLexicalComposerContext();
|
|
351
|
+
const [commandsRegistered, setCommandsRegistered] = useState(false);
|
|
374
352
|
const rerender = useRerender();
|
|
375
353
|
const slotProps = { editor };
|
|
376
|
-
|
|
354
|
+
useEffect(() => {
|
|
377
355
|
if (commandsRegistered) {
|
|
378
356
|
return;
|
|
379
357
|
}
|
|
@@ -383,12 +361,12 @@ const Toolbar = Object.assign(
|
|
|
383
361
|
setCommandsRegistered(true);
|
|
384
362
|
return true;
|
|
385
363
|
},
|
|
386
|
-
|
|
364
|
+
COMMAND_PRIORITY_LOW
|
|
387
365
|
);
|
|
388
366
|
editor.dispatchCommand(INITIAL_COMMANDS_REGISTERED_COMMAND, void 0);
|
|
389
367
|
return unregister;
|
|
390
368
|
}, [editor, commandsRegistered]);
|
|
391
|
-
|
|
369
|
+
useEffect(() => {
|
|
392
370
|
const unregister = editor.registerUpdateListener(({ tags }) => {
|
|
393
371
|
return editor.getEditorState().read(() => {
|
|
394
372
|
if (tags.has("collaboration"))
|
|
@@ -398,13 +376,13 @@ const Toolbar = Object.assign(
|
|
|
398
376
|
});
|
|
399
377
|
return unregister;
|
|
400
378
|
}, [editor, rerender]);
|
|
401
|
-
return /* @__PURE__ */
|
|
402
|
-
children: /* @__PURE__ */
|
|
379
|
+
return /* @__PURE__ */ jsx(TooltipProvider, {
|
|
380
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
403
381
|
ref: forwardedRef,
|
|
404
382
|
role: "toolbar",
|
|
405
383
|
"aria-label": "Toolbar",
|
|
406
384
|
"aria-orientation": "horizontal",
|
|
407
|
-
className:
|
|
385
|
+
className: classNames("lb-root lb-lexical-toolbar", className),
|
|
408
386
|
...props,
|
|
409
387
|
children: [
|
|
410
388
|
applyToolbarSlot(before, slotProps),
|
|
@@ -426,8 +404,5 @@ const Toolbar = Object.assign(
|
|
|
426
404
|
}
|
|
427
405
|
);
|
|
428
406
|
|
|
429
|
-
|
|
430
|
-
exports.FLOATING_ELEMENT_COLLISION_PADDING = FLOATING_ELEMENT_COLLISION_PADDING;
|
|
431
|
-
exports.Toolbar = Toolbar;
|
|
432
|
-
exports.applyToolbarSlot = applyToolbarSlot;
|
|
407
|
+
export { BLOCK_SELECT_SIDE_OFFSET, FLOATING_ELEMENT_COLLISION_PADDING, Toolbar, applyToolbarSlot };
|
|
433
408
|
//# sourceMappingURL=toolbar.js.map
|