@liveblocks/react-lexical 2.16.0-toolbars5 → 2.17.0-channels1

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.
Files changed (57) hide show
  1. package/dist/comments/anchored-threads.js +2 -2
  2. package/dist/comments/anchored-threads.js.map +1 -1
  3. package/dist/comments/anchored-threads.mjs +1 -1
  4. package/dist/comments/anchored-threads.mjs.map +1 -1
  5. package/dist/comments/floating-composer.js +2 -4
  6. package/dist/comments/floating-composer.js.map +1 -1
  7. package/dist/comments/floating-composer.mjs +2 -4
  8. package/dist/comments/floating-composer.mjs.map +1 -1
  9. package/dist/index.d.mts +3 -239
  10. package/dist/index.d.ts +3 -239
  11. package/dist/index.js +0 -8
  12. package/dist/index.js.map +1 -1
  13. package/dist/index.mjs +0 -4
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/liveblocks-plugin-provider.js +15 -2
  16. package/dist/liveblocks-plugin-provider.js.map +1 -1
  17. package/dist/liveblocks-plugin-provider.mjs +14 -2
  18. package/dist/liveblocks-plugin-provider.mjs.map +1 -1
  19. package/dist/version-history/history-version-preview.js +10 -3
  20. package/dist/version-history/history-version-preview.js.map +1 -1
  21. package/dist/version-history/history-version-preview.mjs +10 -3
  22. package/dist/version-history/history-version-preview.mjs.map +1 -1
  23. package/dist/version.js +1 -1
  24. package/dist/version.mjs +1 -1
  25. package/package.json +6 -10
  26. package/src/styles/constants.css +1 -1
  27. package/src/styles/index.css +6 -44
  28. package/styles.css +1 -1
  29. package/styles.css.map +1 -1
  30. package/dist/is-block-node-active.js +0 -51
  31. package/dist/is-block-node-active.js.map +0 -1
  32. package/dist/is-block-node-active.mjs +0 -49
  33. package/dist/is-block-node-active.mjs.map +0 -1
  34. package/dist/is-command-registered.js +0 -11
  35. package/dist/is-command-registered.js.map +0 -1
  36. package/dist/is-command-registered.mjs +0 -9
  37. package/dist/is-command-registered.mjs.map +0 -1
  38. package/dist/is-text-format-active.js +0 -16
  39. package/dist/is-text-format-active.js.map +0 -1
  40. package/dist/is-text-format-active.mjs +0 -14
  41. package/dist/is-text-format-active.mjs.map +0 -1
  42. package/dist/toolbar/floating-toolbar.js +0 -309
  43. package/dist/toolbar/floating-toolbar.js.map +0 -1
  44. package/dist/toolbar/floating-toolbar.mjs +0 -306
  45. package/dist/toolbar/floating-toolbar.mjs.map +0 -1
  46. package/dist/toolbar/shared.js +0 -39
  47. package/dist/toolbar/shared.js.map +0 -1
  48. package/dist/toolbar/shared.mjs +0 -36
  49. package/dist/toolbar/shared.mjs.map +0 -1
  50. package/dist/toolbar/toolbar.js +0 -448
  51. package/dist/toolbar/toolbar.js.map +0 -1
  52. package/dist/toolbar/toolbar.mjs +0 -423
  53. package/dist/toolbar/toolbar.mjs.map +0 -1
  54. package/dist/use-root-element.js +0 -21
  55. package/dist/use-root-element.js.map +0 -1
  56. package/dist/use-root-element.mjs +0 -19
  57. package/dist/use-root-element.mjs.map +0 -1
@@ -1,423 +0,0 @@
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.mjs';
12
- import { OPEN_FLOATING_COMPOSER_COMMAND } from '../comments/floating-composer.mjs';
13
- import { isBlockNodeActive } from '../is-block-node-active.mjs';
14
- import { useIsCommandRegistered } from '../is-command-registered.mjs';
15
- import { isTextFormatActive } from '../is-text-format-active.mjs';
16
- import { FloatingToolbarContext, FloatingToolbarExternal } from './shared.mjs';
17
-
18
- const BLOCK_SELECT_SIDE_OFFSET = 10;
19
- const FLOATING_ELEMENT_COLLISION_PADDING = 10;
20
- function applyToolbarSlot(slot, props) {
21
- if (typeof slot === "function") {
22
- const Component = slot;
23
- return /* @__PURE__ */ jsx(Component, {
24
- ...props
25
- });
26
- }
27
- return slot;
28
- }
29
- const ToolbarButton = forwardRef(
30
- ({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {
31
- const floatingToolbarContext = useContext(FloatingToolbarContext);
32
- const closeFloatingToolbar = floatingToolbarContext?.close;
33
- const handleKeyDown = useCallback(
34
- (event) => {
35
- onKeyDown?.(event);
36
- if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
37
- closeFloatingToolbar();
38
- event.preventDefault();
39
- event.stopPropagation();
40
- }
41
- },
42
- [onKeyDown, closeFloatingToolbar]
43
- );
44
- return /* @__PURE__ */ jsx(ShortcutTooltip, {
45
- content: name,
46
- shortcut,
47
- children: /* @__PURE__ */ jsx(Button, {
48
- type: "button",
49
- variant: "toolbar",
50
- ref: forwardedRef,
51
- icon,
52
- ...props,
53
- onKeyDown: handleKeyDown,
54
- children
55
- })
56
- });
57
- }
58
- );
59
- const ToolbarToggle = forwardRef(
60
- ({ active, ...props }, forwardedRef) => {
61
- return /* @__PURE__ */ jsx(TogglePrimitive.Root, {
62
- asChild: true,
63
- pressed: active,
64
- children: /* @__PURE__ */ jsx(ToolbarButton, {
65
- ref: forwardedRef,
66
- ...props
67
- })
68
- });
69
- }
70
- );
71
- const ToolbarSeparator = forwardRef(
72
- ({ className, ...props }, forwardedRef) => {
73
- return /* @__PURE__ */ jsx("div", {
74
- ref: forwardedRef,
75
- role: "separator",
76
- "aria-orientation": "vertical",
77
- className: classNames("lb-lexical-toolbar-separator", className),
78
- ...props
79
- });
80
- }
81
- );
82
- function ToolbarSectionHistory() {
83
- const [editor] = useLexicalComposerContext();
84
- const [canUndo, setCanUndo] = useState(false);
85
- const [canRedo, setCanRedo] = useState(false);
86
- useEffect(() => {
87
- const unregister = mergeRegister(
88
- editor.registerCommand(
89
- CAN_UNDO_COMMAND,
90
- (payload) => {
91
- setCanUndo(payload);
92
- return false;
93
- },
94
- COMMAND_PRIORITY_CRITICAL
95
- ),
96
- editor.registerCommand(
97
- CAN_REDO_COMMAND,
98
- (payload) => {
99
- setCanRedo(payload);
100
- return false;
101
- },
102
- COMMAND_PRIORITY_CRITICAL
103
- )
104
- );
105
- return unregister;
106
- }, [editor]);
107
- return /* @__PURE__ */ jsxs(Fragment, {
108
- children: [
109
- /* @__PURE__ */ jsx(ToolbarButton, {
110
- name: "Undo",
111
- icon: /* @__PURE__ */ jsx(UndoIcon, {}),
112
- shortcut: "Mod-Z",
113
- onClick: () => editor.dispatchCommand(UNDO_COMMAND, void 0),
114
- disabled: !canUndo
115
- }),
116
- /* @__PURE__ */ jsx(ToolbarButton, {
117
- name: "Redo",
118
- icon: /* @__PURE__ */ jsx(RedoIcon, {}),
119
- shortcut: "Mod-Shift-Z",
120
- onClick: () => editor.dispatchCommand(REDO_COMMAND, void 0),
121
- disabled: !canRedo
122
- })
123
- ]
124
- });
125
- }
126
- function ToolbarSectionInline() {
127
- const [editor] = useLexicalComposerContext();
128
- const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);
129
- return supportsTextFormat ? /* @__PURE__ */ jsxs(Fragment, {
130
- children: [
131
- /* @__PURE__ */ jsx(ToolbarToggle, {
132
- name: "Bold",
133
- icon: /* @__PURE__ */ jsx(BoldIcon, {}),
134
- shortcut: "Mod-B",
135
- onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "bold"),
136
- active: isTextFormatActive(editor, "bold")
137
- }),
138
- /* @__PURE__ */ jsx(ToolbarToggle, {
139
- name: "Italic",
140
- icon: /* @__PURE__ */ jsx(ItalicIcon, {}),
141
- shortcut: "Mod-I",
142
- onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "italic"),
143
- active: isTextFormatActive(editor, "italic")
144
- }),
145
- /* @__PURE__ */ jsx(ToolbarToggle, {
146
- name: "Underline",
147
- icon: /* @__PURE__ */ jsx(UnderlineIcon, {}),
148
- shortcut: "Mod-U",
149
- onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "underline"),
150
- active: isTextFormatActive(editor, "underline")
151
- }),
152
- /* @__PURE__ */ jsx(ToolbarToggle, {
153
- name: "Strikethrough",
154
- icon: /* @__PURE__ */ jsx(StrikethroughIcon, {}),
155
- onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "strikethrough"),
156
- active: isTextFormatActive(editor, "strikethrough")
157
- }),
158
- /* @__PURE__ */ jsx(ToolbarToggle, {
159
- name: "Inline code",
160
- icon: /* @__PURE__ */ jsx(CodeIcon, {}),
161
- onClick: () => editor.dispatchCommand(FORMAT_TEXT_COMMAND, "code"),
162
- active: isTextFormatActive(editor, "code")
163
- })
164
- ]
165
- }) : null;
166
- }
167
- function ToolbarSectionCollaboration() {
168
- const [editor] = useLexicalComposerContext();
169
- const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);
170
- return /* @__PURE__ */ jsx(Fragment, {
171
- children: supportsThread ? /* @__PURE__ */ jsx(ToolbarButton, {
172
- name: "Add a comment",
173
- icon: /* @__PURE__ */ jsx(CommentIcon, {}),
174
- onClick: () => editor.dispatchCommand(OPEN_FLOATING_COMPOSER_COMMAND, void 0),
175
- children: "Comment"
176
- }) : null
177
- });
178
- }
179
- function DefaultToolbarContent() {
180
- const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);
181
- const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);
182
- return /* @__PURE__ */ jsxs(Fragment, {
183
- children: [
184
- /* @__PURE__ */ jsx(ToolbarSectionHistory, {}),
185
- supportsTextFormat ? /* @__PURE__ */ jsxs(Fragment, {
186
- children: [
187
- /* @__PURE__ */ jsx(ToolbarSeparator, {}),
188
- /* @__PURE__ */ jsx(ToolbarBlockSelector, {}),
189
- /* @__PURE__ */ jsx(ToolbarSectionInline, {})
190
- ]
191
- }) : null,
192
- supportsThread ? /* @__PURE__ */ jsxs(Fragment, {
193
- children: [
194
- /* @__PURE__ */ jsx(ToolbarSeparator, {}),
195
- /* @__PURE__ */ jsx(ToolbarSectionCollaboration, {})
196
- ]
197
- }) : null
198
- ]
199
- });
200
- }
201
- const INITIAL_COMMANDS_REGISTERED_COMMAND = createCommand(
202
- "INITIAL_COMMANDS_REGISTERED_COMMAND"
203
- );
204
- function useRerender() {
205
- const [, setRerender] = useState(false);
206
- return useCallback(() => {
207
- setRerender((toggle) => !toggle);
208
- }, [setRerender]);
209
- }
210
- function createDefaultBlockSelectorItems() {
211
- const items = [
212
- {
213
- name: "Text",
214
- icon: /* @__PURE__ */ jsx(TextIcon, {}),
215
- isActive: "default",
216
- setActive: () => $setBlocksType($getSelection(), () => $createParagraphNode())
217
- },
218
- {
219
- name: "Heading 1",
220
- icon: /* @__PURE__ */ jsx(H1Icon, {}),
221
- isActive: (editor) => {
222
- return isBlockNodeActive(editor, (node) => {
223
- if ($isHeadingNode(node)) {
224
- const tag = node.getTag();
225
- return tag === "h1";
226
- } else {
227
- return false;
228
- }
229
- });
230
- },
231
- setActive: () => $setBlocksType($getSelection(), () => $createHeadingNode("h1"))
232
- },
233
- {
234
- name: "Heading 2",
235
- icon: /* @__PURE__ */ jsx(H2Icon, {}),
236
- isActive: (editor) => {
237
- return isBlockNodeActive(editor, (node) => {
238
- if ($isHeadingNode(node)) {
239
- const tag = node.getTag();
240
- return tag === "h2";
241
- } else {
242
- return false;
243
- }
244
- });
245
- },
246
- setActive: () => $setBlocksType($getSelection(), () => $createHeadingNode("h2"))
247
- },
248
- {
249
- name: "Heading 3",
250
- icon: /* @__PURE__ */ jsx(H3Icon, {}),
251
- isActive: (editor) => {
252
- return isBlockNodeActive(editor, (node) => {
253
- if ($isHeadingNode(node)) {
254
- const tag = node.getTag();
255
- return tag === "h3";
256
- } else {
257
- return false;
258
- }
259
- });
260
- },
261
- setActive: () => $setBlocksType($getSelection(), () => $createHeadingNode("h3"))
262
- },
263
- {
264
- name: "Blockquote",
265
- icon: /* @__PURE__ */ jsx(BlockquoteIcon, {}),
266
- isActive: (editor) => isBlockNodeActive(editor, (node) => node.getType() === "quote"),
267
- setActive: () => $setBlocksType($getSelection(), () => $createQuoteNode())
268
- }
269
- ];
270
- return items.filter(Boolean);
271
- }
272
- const ToolbarBlockSelector = forwardRef(({ items, onKeyDown, ...props }, forwardedRef) => {
273
- const floatingToolbarContext = useContext(FloatingToolbarContext);
274
- const closeFloatingToolbar = floatingToolbarContext?.close;
275
- const [editor] = useLexicalComposerContext();
276
- const resolvedItems = useMemo(() => {
277
- if (Array.isArray(items)) {
278
- return items;
279
- }
280
- const defaultItems = createDefaultBlockSelectorItems();
281
- return items ? items(defaultItems) : defaultItems;
282
- }, [items]);
283
- let defaultItem;
284
- let activeItem = resolvedItems.find((item) => {
285
- if (item.isActive === "default") {
286
- defaultItem = item;
287
- return false;
288
- }
289
- return item.isActive(editor);
290
- });
291
- if (!activeItem) {
292
- activeItem = defaultItem;
293
- }
294
- const handleItemChange = (name) => {
295
- const item = resolvedItems.find((item2) => item2.name === name);
296
- if (item) {
297
- editor.update(() => item.setActive(editor));
298
- floatingToolbarContext?.close();
299
- }
300
- };
301
- const handleKeyDown = useCallback(
302
- (event) => {
303
- onKeyDown?.(event);
304
- if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
305
- closeFloatingToolbar();
306
- event.preventDefault();
307
- event.stopPropagation();
308
- }
309
- },
310
- [onKeyDown, closeFloatingToolbar]
311
- );
312
- return /* @__PURE__ */ jsxs(SelectPrimitive.Root, {
313
- value: activeItem?.name,
314
- onValueChange: handleItemChange,
315
- children: [
316
- /* @__PURE__ */ jsx(ShortcutTooltip, {
317
- content: "Turn into\u2026",
318
- children: /* @__PURE__ */ jsx(SelectPrimitive.Trigger, {
319
- asChild: true,
320
- ...props,
321
- ref: forwardedRef,
322
- onKeyDown: handleKeyDown,
323
- disabled: resolvedItems.length === 0,
324
- children: /* @__PURE__ */ jsx(SelectButton, {
325
- variant: "toolbar",
326
- children: activeItem?.name ?? "Turn into\u2026"
327
- })
328
- })
329
- }),
330
- /* @__PURE__ */ jsx(SelectPrimitive.Portal, {
331
- children: /* @__PURE__ */ jsx(FloatingToolbarExternal, {
332
- children: /* @__PURE__ */ jsx(SelectPrimitive.Content, {
333
- position: "popper",
334
- sideOffset: BLOCK_SELECT_SIDE_OFFSET,
335
- collisionPadding: FLOATING_ELEMENT_COLLISION_PADDING,
336
- className: "lb-root lb-portal lb-elevation lb-dropdown",
337
- children: resolvedItems.map((item) => /* @__PURE__ */ jsxs(SelectPrimitive.Item, {
338
- value: item.name,
339
- className: "lb-dropdown-item",
340
- "data-name": item.name,
341
- children: [
342
- item.icon ? /* @__PURE__ */ jsx("span", {
343
- className: "lb-dropdown-item-icon lb-icon-container",
344
- children: item.icon
345
- }) : null,
346
- /* @__PURE__ */ jsx("span", {
347
- className: "lb-dropdown-item-label",
348
- children: item.label ?? item.name
349
- }),
350
- item.name === activeItem?.name ? /* @__PURE__ */ jsx("span", {
351
- className: "lb-dropdown-item-accessory lb-icon-container",
352
- children: /* @__PURE__ */ jsx(CheckIcon, {})
353
- }) : null
354
- ]
355
- }, item.name))
356
- })
357
- })
358
- })
359
- ]
360
- });
361
- });
362
- const Toolbar = Object.assign(
363
- forwardRef(
364
- ({ before, after, children = DefaultToolbarContent, className, ...props }, forwardedRef) => {
365
- const [editor] = useLexicalComposerContext();
366
- const [commandsRegistered, setCommandsRegistered] = useState(false);
367
- const rerender = useRerender();
368
- const slotProps = { editor };
369
- useEffect(() => {
370
- if (commandsRegistered) {
371
- return;
372
- }
373
- const unregister = editor.registerCommand(
374
- INITIAL_COMMANDS_REGISTERED_COMMAND,
375
- () => {
376
- setCommandsRegistered(true);
377
- return true;
378
- },
379
- COMMAND_PRIORITY_LOW
380
- );
381
- editor.dispatchCommand(INITIAL_COMMANDS_REGISTERED_COMMAND, void 0);
382
- return unregister;
383
- }, [editor, commandsRegistered]);
384
- useEffect(() => {
385
- const unregister = editor.registerUpdateListener(({ tags }) => {
386
- return editor.getEditorState().read(() => {
387
- if (tags.has("collaboration"))
388
- return;
389
- rerender();
390
- });
391
- });
392
- return unregister;
393
- }, [editor, rerender]);
394
- return /* @__PURE__ */ jsx(TooltipProvider, {
395
- children: /* @__PURE__ */ jsxs("div", {
396
- ref: forwardedRef,
397
- role: "toolbar",
398
- "aria-label": "Toolbar",
399
- "aria-orientation": "horizontal",
400
- className: classNames("lb-root lb-lexical-toolbar", className),
401
- ...props,
402
- children: [
403
- applyToolbarSlot(before, slotProps),
404
- applyToolbarSlot(children, slotProps),
405
- applyToolbarSlot(after, slotProps)
406
- ]
407
- })
408
- });
409
- }
410
- ),
411
- {
412
- Button: ToolbarButton,
413
- Toggle: ToolbarToggle,
414
- BlockSelector: ToolbarBlockSelector,
415
- Separator: ToolbarSeparator,
416
- SectionHistory: ToolbarSectionHistory,
417
- SectionInline: ToolbarSectionInline,
418
- SectionCollaboration: ToolbarSectionCollaboration
419
- }
420
- );
421
-
422
- export { BLOCK_SELECT_SIDE_OFFSET, FLOATING_ELEMENT_COLLISION_PADDING, Toolbar, applyToolbarSlot };
423
- //# sourceMappingURL=toolbar.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolbar.mjs","sources":["../../src/toolbar/toolbar.tsx"],"sourcesContent":["import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $createHeadingNode,\n $createQuoteNode,\n $isHeadingNode,\n} from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport {\n BlockquoteIcon,\n BoldIcon,\n Button,\n CheckIcon,\n CodeIcon,\n CommentIcon,\n H1Icon,\n H2Icon,\n H3Icon,\n ItalicIcon,\n RedoIcon,\n SelectButton,\n ShortcutTooltip,\n StrikethroughIcon,\n TextIcon,\n TooltipProvider,\n UnderlineIcon,\n UndoIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport {\n $createParagraphNode,\n $getSelection,\n CAN_REDO_COMMAND,\n CAN_UNDO_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_LOW,\n createCommand,\n FORMAT_TEXT_COMMAND,\n type LexicalCommand,\n type LexicalEditor,\n REDO_COMMAND,\n UNDO_COMMAND,\n} from \"lexical\";\nimport type {\n ComponentProps,\n ComponentType,\n KeyboardEvent,\n ReactNode,\n} from \"react\";\nimport {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { OPEN_FLOATING_COMPOSER_COMMAND } from \"../comments/floating-composer\";\nimport { isBlockNodeActive } from \"../is-block-node-active\";\nimport { useIsCommandRegistered } from \"../is-command-registered\";\nimport { isTextFormatActive } from \"../is-text-format-active\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\n\nexport const BLOCK_SELECT_SIDE_OFFSET = 10;\nexport const FLOATING_ELEMENT_COLLISION_PADDING = 10;\n\nexport interface ToolbarSlotProps {\n editor: LexicalEditor;\n}\n\nexport type ToolbarSlot = ReactNode | ComponentType<ToolbarSlotProps>;\n\nexport interface ToolbarProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n /**\n * The content of the toolbar, overriding the default content.\n * Use the `before` and `after` props if you want to keep and extend the default content.\n */\n children?: ToolbarSlot;\n\n /**\n * The content to display at the start of the toolbar.\n */\n before?: ToolbarSlot;\n\n /**\n * The content to display at the end of the toolbar.\n */\n after?: ToolbarSlot;\n}\n\nexport interface ToolbarButtonProps extends ComponentProps<\"button\"> {\n /**\n * The name of this button displayed in its tooltip.\n */\n name: string;\n\n /**\n * An optional icon displayed in this button.\n */\n icon?: ReactNode;\n\n /**\n * An optional keyboard shortcut displayed in this button's tooltip.\n *\n * @example\n * \"Mod-Alt-B\" → \"⌘⌥B\" in Apple environments, \"⌃⌥B\" otherwise\n * \"Ctrl-Shift-Escape\" → \"⌃⇧⎋\"\n * \"Space\" → \"␣\"\n */\n shortcut?: string;\n}\n\nexport interface ToolbarToggleProps extends ToolbarButtonProps {\n /**\n * Whether the button is toggled.\n */\n active: boolean;\n}\n\nexport type ToolbarSeparatorProps = ComponentProps<\"div\">;\n\nexport interface ToolbarBlockSelectorItem {\n /**\n * The name of this block element, displayed as the label of this item.\n */\n name: string;\n\n /**\n * Optionally replace the name used as the label of this item by any content.\n */\n label?: ReactNode;\n\n /**\n * An optional icon displayed in this item.\n */\n icon?: ReactNode;\n\n /**\n * Whether this block element is currently active.\n * Set to `\"default\"` to display this item when no other item is active.\n */\n isActive: ((editor: LexicalEditor) => boolean) | \"default\";\n\n /**\n * A callback invoked when this item is selected.\n */\n setActive: (editor: LexicalEditor) => void;\n}\n\nexport interface ToolbarBlockSelectorProps extends ComponentProps<\"button\"> {\n /**\n * The items displayed in this block selector.\n * When provided as an array, the default items are overridden. To avoid this,\n * a function can be provided instead and it will receive the default items.\n *\n * @example\n * <Toolbar.BlockSelector\n * items={[\n * {\n * name: \"Text\",\n * isActive: \"default\",\n * setActive: () => { ... },\n * },\n * {\n * name: \"Heading 1\",\n * isActive: () => { ... },\n * setActive: () => { ... },\n * },\n * ]}\n * />\n *\n * @example\n * <Toolbar.BlockSelector\n * items={(defaultItems) => [\n * ...defaultItems,\n * {\n * name: \"Custom block\",\n * isActive: () => { ... },\n * setActive: () => { ... },\n * },\n * ]}\n * />\n */\n items?:\n | ToolbarBlockSelectorItem[]\n | ((\n defaultItems: ToolbarBlockSelectorItem[]\n ) => ToolbarBlockSelectorItem[]);\n}\n\nexport function applyToolbarSlot(\n slot: ToolbarSlot,\n props: ToolbarSlotProps\n): ReactNode {\n if (typeof slot === \"function\") {\n const Component = slot;\n\n return <Component {...props} />;\n }\n\n return slot;\n}\n\nconst ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n ({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const closeFloatingToolbar = floatingToolbarContext?.close;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n\n if (\n !event.isDefaultPrevented() &&\n closeFloatingToolbar &&\n event.key === \"Escape\"\n ) {\n closeFloatingToolbar();\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [onKeyDown, closeFloatingToolbar]\n );\n\n return (\n <ShortcutTooltip content={name} shortcut={shortcut}>\n <Button\n type=\"button\"\n variant=\"toolbar\"\n ref={forwardedRef}\n icon={icon}\n {...props}\n onKeyDown={handleKeyDown}\n >\n {children}\n </Button>\n </ShortcutTooltip>\n );\n }\n);\n\nconst ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>(\n ({ active, ...props }, forwardedRef) => {\n return (\n <TogglePrimitive.Root asChild pressed={active}>\n <ToolbarButton ref={forwardedRef} {...props} />\n </TogglePrimitive.Root>\n );\n }\n);\n\nconst ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(\n ({ className, ...props }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={classNames(\"lb-lexical-toolbar-separator\", className)}\n {...props}\n />\n );\n }\n);\n\nfunction ToolbarSectionHistory() {\n const [editor] = useLexicalComposerContext();\n const [canUndo, setCanUndo] = useState(false);\n const [canRedo, setCanRedo] = useState(false);\n\n useEffect(() => {\n const unregister = mergeRegister(\n editor.registerCommand<boolean>(\n CAN_UNDO_COMMAND,\n (payload) => {\n setCanUndo(payload);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n ),\n editor.registerCommand<boolean>(\n CAN_REDO_COMMAND,\n (payload) => {\n setCanRedo(payload);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n )\n );\n\n return unregister;\n }, [editor]);\n\n return (\n <>\n <ToolbarButton\n name=\"Undo\"\n icon={<UndoIcon />}\n shortcut=\"Mod-Z\"\n onClick={() => editor.dispatchCommand(UNDO_COMMAND, undefined)}\n disabled={!canUndo}\n />\n <ToolbarButton\n name=\"Redo\"\n icon={<RedoIcon />}\n shortcut=\"Mod-Shift-Z\"\n onClick={() => editor.dispatchCommand(REDO_COMMAND, undefined)}\n disabled={!canRedo}\n />\n </>\n );\n}\n\nfunction ToolbarSectionInline() {\n const [editor] = useLexicalComposerContext();\n const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);\n\n return supportsTextFormat ? (\n <>\n <ToolbarToggle\n name=\"Bold\"\n icon={<BoldIcon />}\n shortcut=\"Mod-B\"\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\")}\n active={isTextFormatActive(editor, \"bold\")}\n />\n\n <ToolbarToggle\n name=\"Italic\"\n icon={<ItalicIcon />}\n shortcut=\"Mod-I\"\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\")}\n active={isTextFormatActive(editor, \"italic\")}\n />\n <ToolbarToggle\n name=\"Underline\"\n icon={<UnderlineIcon />}\n shortcut=\"Mod-U\"\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\")}\n active={isTextFormatActive(editor, \"underline\")}\n />\n <ToolbarToggle\n name=\"Strikethrough\"\n icon={<StrikethroughIcon />}\n onClick={() =>\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"strikethrough\")\n }\n active={isTextFormatActive(editor, \"strikethrough\")}\n />\n <ToolbarToggle\n name=\"Inline code\"\n icon={<CodeIcon />}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\")}\n active={isTextFormatActive(editor, \"code\")}\n />\n </>\n ) : null;\n}\n\nfunction ToolbarSectionCollaboration() {\n const [editor] = useLexicalComposerContext();\n const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);\n\n return (\n <>\n {supportsThread ? (\n <ToolbarButton\n name=\"Add a comment\"\n icon={<CommentIcon />}\n onClick={() =>\n editor.dispatchCommand(OPEN_FLOATING_COMPOSER_COMMAND, undefined)\n }\n >\n Comment\n </ToolbarButton>\n ) : null}\n </>\n );\n}\n\nfunction DefaultToolbarContent() {\n const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);\n const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);\n\n return (\n <>\n <ToolbarSectionHistory />\n {supportsTextFormat ? (\n <>\n <ToolbarSeparator />\n <ToolbarBlockSelector />\n <ToolbarSectionInline />\n </>\n ) : null}\n {supportsThread ? (\n <>\n <ToolbarSeparator />\n <ToolbarSectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nconst INITIAL_COMMANDS_REGISTERED_COMMAND: LexicalCommand<void> = createCommand(\n \"INITIAL_COMMANDS_REGISTERED_COMMAND\"\n);\n\n// Re-renders its surrounding component.\nfunction useRerender() {\n const [, setRerender] = useState(false);\n\n return useCallback(() => {\n setRerender((toggle) => !toggle);\n }, [setRerender]);\n}\n\nfunction createDefaultBlockSelectorItems(): ToolbarBlockSelectorItem[] {\n const items: (ToolbarBlockSelectorItem | null)[] = [\n {\n name: \"Text\",\n icon: <TextIcon />,\n isActive: \"default\",\n setActive: () =>\n $setBlocksType($getSelection(), () => $createParagraphNode()),\n },\n {\n name: \"Heading 1\",\n icon: <H1Icon />,\n isActive: (editor) => {\n return isBlockNodeActive(editor, (node) => {\n if ($isHeadingNode(node)) {\n const tag = node.getTag();\n\n return tag === \"h1\";\n } else {\n return false;\n }\n });\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h1\")),\n },\n {\n name: \"Heading 2\",\n icon: <H2Icon />,\n isActive: (editor) => {\n return isBlockNodeActive(editor, (node) => {\n if ($isHeadingNode(node)) {\n const tag = node.getTag();\n\n return tag === \"h2\";\n } else {\n return false;\n }\n });\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h2\")),\n },\n {\n name: \"Heading 3\",\n icon: <H3Icon />,\n isActive: (editor) => {\n return isBlockNodeActive(editor, (node) => {\n if ($isHeadingNode(node)) {\n const tag = node.getTag();\n\n return tag === \"h3\";\n } else {\n return false;\n }\n });\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h3\")),\n },\n {\n name: \"Blockquote\",\n icon: <BlockquoteIcon />,\n isActive: (editor) =>\n isBlockNodeActive(editor, (node) => node.getType() === \"quote\"),\n setActive: () =>\n $setBlocksType($getSelection(), () => $createQuoteNode()),\n },\n ];\n\n return items.filter(Boolean) as ToolbarBlockSelectorItem[];\n}\n\nconst ToolbarBlockSelector = forwardRef<\n HTMLButtonElement,\n ToolbarBlockSelectorProps\n>(({ items, onKeyDown, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const closeFloatingToolbar = floatingToolbarContext?.close;\n const [editor] = useLexicalComposerContext();\n const resolvedItems = useMemo(() => {\n if (Array.isArray(items)) {\n return items;\n }\n\n const defaultItems = createDefaultBlockSelectorItems();\n\n return items ? items(defaultItems) : defaultItems;\n }, [items]);\n let defaultItem: ToolbarBlockSelectorItem | undefined;\n let activeItem = resolvedItems.find((item) => {\n if (item.isActive === \"default\") {\n defaultItem = item;\n return false;\n }\n\n return item.isActive(editor);\n });\n\n if (!activeItem) {\n activeItem = defaultItem;\n }\n\n const handleItemChange = (name: string) => {\n const item = resolvedItems.find((item) => item.name === name);\n\n if (item) {\n editor.update(() => item.setActive(editor));\n\n // If present in a floating toolbar, close it on change\n floatingToolbarContext?.close();\n }\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n\n if (\n !event.isDefaultPrevented() &&\n closeFloatingToolbar &&\n event.key === \"Escape\"\n ) {\n closeFloatingToolbar();\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [onKeyDown, closeFloatingToolbar]\n );\n\n return (\n <SelectPrimitive.Root\n value={activeItem?.name}\n onValueChange={handleItemChange}\n >\n <ShortcutTooltip content=\"Turn into…\">\n <SelectPrimitive.Trigger\n asChild\n {...props}\n ref={forwardedRef}\n onKeyDown={handleKeyDown}\n disabled={resolvedItems.length === 0}\n >\n <SelectButton variant=\"toolbar\">\n {activeItem?.name ?? \"Turn into…\"}\n </SelectButton>\n </SelectPrimitive.Trigger>\n </ShortcutTooltip>\n <SelectPrimitive.Portal>\n <FloatingToolbarExternal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={BLOCK_SELECT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n className=\"lb-root lb-portal lb-elevation lb-dropdown\"\n >\n {resolvedItems.map((item) => (\n <SelectPrimitive.Item\n key={item.name}\n value={item.name}\n className=\"lb-dropdown-item\"\n data-name={item.name}\n >\n {item.icon ? (\n <span className=\"lb-dropdown-item-icon lb-icon-container\">\n {item.icon}\n </span>\n ) : null}\n <span className=\"lb-dropdown-item-label\">\n {item.label ?? item.name}\n </span>\n {item.name === activeItem?.name ? (\n <span className=\"lb-dropdown-item-accessory lb-icon-container\">\n <CheckIcon />\n </span>\n ) : null}\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Content>\n </FloatingToolbarExternal>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n});\n\n/**\n * A static toolbar containing actions and values related to the editor.\n *\n * @example\n * <Toolbar />\n *\n * @example\n * <Toolbar >\n * <Toolbar.BlockSelector />\n * <Toolbar.Separator />\n * <Toolbar.SectionInline />\n * <Toolbar.Separator />\n * <Toolbar.Button name=\"Custom action\" onClick={() => { ... }} icon={<Icon.QuestionMark />} />\n * </Toolbar>\n */\nexport const Toolbar = Object.assign(\n forwardRef<HTMLDivElement, ToolbarProps>(\n (\n { before, after, children = DefaultToolbarContent, className, ...props },\n forwardedRef\n ) => {\n const [editor] = useLexicalComposerContext();\n const [commandsRegistered, setCommandsRegistered] = useState(false);\n const rerender = useRerender();\n\n const slotProps: ToolbarSlotProps = { editor };\n\n // Ensures that `useIsCommandRegistered` returns correct values initially.\n // It registers a low-priority one-time command to re-render once all initial commands are registered.\n useEffect(() => {\n if (commandsRegistered) {\n return;\n }\n\n const unregister = editor.registerCommand(\n INITIAL_COMMANDS_REGISTERED_COMMAND,\n () => {\n setCommandsRegistered(true);\n return true;\n },\n COMMAND_PRIORITY_LOW\n );\n\n editor.dispatchCommand(INITIAL_COMMANDS_REGISTERED_COMMAND, undefined);\n\n return unregister;\n }, [editor, commandsRegistered]);\n\n // Re-render when the selection changes to ensure components like toggles are updated.\n useEffect(() => {\n const unregister = editor.registerUpdateListener(({ tags }) => {\n return editor.getEditorState().read(() => {\n // Ignore selection updates related to collaboration\n if (tags.has(\"collaboration\")) return;\n\n rerender();\n });\n });\n\n return unregister;\n }, [editor, rerender]);\n\n return (\n <TooltipProvider>\n <div\n ref={forwardedRef}\n role=\"toolbar\"\n aria-label=\"Toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\"lb-root lb-lexical-toolbar\", className)}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </TooltipProvider>\n );\n }\n ),\n {\n /**\n * A button for triggering actions.\n *\n * @example\n * <Toolbar.Button name=\"Comment\" shortcut=\"Mod-Shift-E\" onClick={() => { ... }}>Comment</Toolbar.Button>\n *\n * @example\n * <Toolbar.Button name=\"Mention someone\" icon={<Icon.Mention />} onClick={() => { ... }} />\n */\n Button: ToolbarButton,\n\n /**\n * A toggle button for values that can be active or inactive.\n *\n * @example\n * <Toolbar.Toggle name=\"Bold\" active={isBold}>Bold</Toolbar.Toggle>\n *\n * @example\n * <Toolbar.Toggle name=\"Italic\" icon={<Icon.Italic />} shortcut=\"Mod-I\" active={isItalic} onClick={() => { ... }} />\n */\n Toggle: ToolbarToggle,\n\n /**\n * A dropdown selector to switch between different block types.\n *\n * @example\n * <Toolbar.BlockSelector />\n */\n BlockSelector: ToolbarBlockSelector,\n\n /**\n * A visual (and accessible) separator to separate sections in a toolbar.\n */\n Separator: ToolbarSeparator,\n\n /**\n * A section containing history actions. (e.g. undo, redo)\n */\n SectionHistory: ToolbarSectionHistory,\n\n /**\n * A section containing inline formatting actions. (e.g. bold, italic, underline, ...)\n */\n SectionInline: ToolbarSectionInline,\n\n /**\n * A section containing collaborative actions. (e.g. adding a comment)\n */\n SectionCollaboration: ToolbarSectionCollaboration,\n }\n);\n"],"names":["item"],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- 'use strict';
2
-
3
- var LexicalComposerContext = require('@lexical/react/LexicalComposerContext');
4
- var react = require('react');
5
-
6
- function useRootElement() {
7
- const [editor] = LexicalComposerContext.useLexicalComposerContext();
8
- const subscribe = react.useCallback(
9
- (onStoreChange) => {
10
- return editor.registerRootListener(onStoreChange);
11
- },
12
- [editor]
13
- );
14
- const getSnapshot = react.useCallback(() => {
15
- return editor.getRootElement();
16
- }, [editor]);
17
- return react.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
18
- }
19
-
20
- exports.useRootElement = useRootElement;
21
- //# sourceMappingURL=use-root-element.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-root-element.js","sources":["../src/use-root-element.ts"],"sourcesContent":["import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useCallback, useSyncExternalStore } from \"react\";\n\nexport function useRootElement(): HTMLElement | null {\n const [editor] = useLexicalComposerContext();\n\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n return editor.registerRootListener(onStoreChange);\n },\n [editor]\n );\n\n const getSnapshot = useCallback(() => {\n return editor.getRootElement();\n }, [editor]);\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n"],"names":["useLexicalComposerContext","useCallback","useSyncExternalStore"],"mappings":";;;;;AAGO,SAAS,cAAqC,GAAA;AACnD,EAAM,MAAA,CAAC,MAAM,CAAA,GAAIA,gDAA0B,EAAA,CAAA;AAE3C,EAAA,MAAM,SAAY,GAAAC,iBAAA;AAAA,IAChB,CAAC,aAA8B,KAAA;AAC7B,MAAO,OAAA,MAAA,CAAO,qBAAqB,aAAa,CAAA,CAAA;AAAA,KAClD;AAAA,IACA,CAAC,MAAM,CAAA;AAAA,GACT,CAAA;AAEA,EAAM,MAAA,WAAA,GAAcA,kBAAY,MAAM;AACpC,IAAA,OAAO,OAAO,cAAe,EAAA,CAAA;AAAA,GAC/B,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAEX,EAAO,OAAAC,0BAAA,CAAqB,SAAW,EAAA,WAAA,EAAa,WAAW,CAAA,CAAA;AACjE;;;;"}
@@ -1,19 +0,0 @@
1
- import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
2
- import { useCallback, useSyncExternalStore } from 'react';
3
-
4
- function useRootElement() {
5
- const [editor] = useLexicalComposerContext();
6
- const subscribe = useCallback(
7
- (onStoreChange) => {
8
- return editor.registerRootListener(onStoreChange);
9
- },
10
- [editor]
11
- );
12
- const getSnapshot = useCallback(() => {
13
- return editor.getRootElement();
14
- }, [editor]);
15
- return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
16
- }
17
-
18
- export { useRootElement };
19
- //# sourceMappingURL=use-root-element.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-root-element.mjs","sources":["../src/use-root-element.ts"],"sourcesContent":["import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useCallback, useSyncExternalStore } from \"react\";\n\nexport function useRootElement(): HTMLElement | null {\n const [editor] = useLexicalComposerContext();\n\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n return editor.registerRootListener(onStoreChange);\n },\n [editor]\n );\n\n const getSnapshot = useCallback(() => {\n return editor.getRootElement();\n }, [editor]);\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n"],"names":[],"mappings":";;;AAGO,SAAS,cAAqC,GAAA;AACnD,EAAM,MAAA,CAAC,MAAM,CAAA,GAAI,yBAA0B,EAAA,CAAA;AAE3C,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,aAA8B,KAAA;AAC7B,MAAO,OAAA,MAAA,CAAO,qBAAqB,aAAa,CAAA,CAAA;AAAA,KAClD;AAAA,IACA,CAAC,MAAM,CAAA;AAAA,GACT,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,OAAO,OAAO,cAAe,EAAA,CAAA;AAAA,GAC/B,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAEX,EAAO,OAAA,oBAAA,CAAqB,SAAW,EAAA,WAAA,EAAa,WAAW,CAAA,CAAA;AACjE;;;;"}