@liveblocks/react-tiptap 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 (52) hide show
  1. package/dist/LiveblocksExtension.js.map +1 -1
  2. package/dist/LiveblocksExtension.mjs.map +1 -1
  3. package/dist/comments/CommentsExtension.js +11 -20
  4. package/dist/comments/CommentsExtension.js.map +1 -1
  5. package/dist/comments/CommentsExtension.mjs +13 -22
  6. package/dist/comments/CommentsExtension.mjs.map +1 -1
  7. package/dist/comments/FloatingComposer.js +30 -27
  8. package/dist/comments/FloatingComposer.js.map +1 -1
  9. package/dist/comments/FloatingComposer.mjs +32 -29
  10. package/dist/comments/FloatingComposer.mjs.map +1 -1
  11. package/dist/index.d.mts +10 -254
  12. package/dist/index.d.ts +10 -254
  13. package/dist/index.js +0 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.mjs +0 -2
  16. package/dist/index.mjs.map +1 -1
  17. package/dist/types.js +3 -7
  18. package/dist/types.js.map +1 -1
  19. package/dist/types.mjs +3 -6
  20. package/dist/types.mjs.map +1 -1
  21. package/dist/utils.js +0 -17
  22. package/dist/utils.js.map +1 -1
  23. package/dist/utils.mjs +1 -16
  24. package/dist/utils.mjs.map +1 -1
  25. package/dist/version-history/HistoryVersionPreview.js +79 -79
  26. package/dist/version-history/HistoryVersionPreview.js.map +1 -1
  27. package/dist/version-history/HistoryVersionPreview.mjs +79 -79
  28. package/dist/version-history/HistoryVersionPreview.mjs.map +1 -1
  29. package/dist/version.js +1 -1
  30. package/dist/version.mjs +1 -1
  31. package/package.json +6 -8
  32. package/src/styles/constants.css +1 -2
  33. package/src/styles/index.css +6 -58
  34. package/src/styles/utils.css +0 -11
  35. package/styles.css +1 -1
  36. package/styles.css.map +1 -1
  37. package/dist/context.js +0 -24
  38. package/dist/context.js.map +0 -1
  39. package/dist/context.mjs +0 -21
  40. package/dist/context.mjs.map +0 -1
  41. package/dist/toolbar/FloatingToolbar.js +0 -321
  42. package/dist/toolbar/FloatingToolbar.js.map +0 -1
  43. package/dist/toolbar/FloatingToolbar.mjs +0 -318
  44. package/dist/toolbar/FloatingToolbar.mjs.map +0 -1
  45. package/dist/toolbar/Toolbar.js +0 -396
  46. package/dist/toolbar/Toolbar.js.map +0 -1
  47. package/dist/toolbar/Toolbar.mjs +0 -371
  48. package/dist/toolbar/Toolbar.mjs.map +0 -1
  49. package/dist/toolbar/shared.js +0 -39
  50. package/dist/toolbar/shared.js.map +0 -1
  51. package/dist/toolbar/shared.mjs +0 -36
  52. package/dist/toolbar/shared.mjs.map +0 -1
@@ -1,396 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var _private = require('@liveblocks/react-ui/_private');
5
- var SelectPrimitive = require('@radix-ui/react-select');
6
- var TogglePrimitive = require('@radix-ui/react-toggle');
7
- var react = require('react');
8
- var classnames = require('../classnames.js');
9
- var context = require('../context.js');
10
- var shared = require('./shared.js');
11
-
12
- function _interopNamespaceDefault(e) {
13
- var n = Object.create(null);
14
- if (e) {
15
- Object.keys(e).forEach(function (k) {
16
- if (k !== 'default') {
17
- var d = Object.getOwnPropertyDescriptor(e, k);
18
- Object.defineProperty(n, k, d.get ? d : {
19
- enumerable: true,
20
- get: function () { return e[k]; }
21
- });
22
- }
23
- });
24
- }
25
- n.default = e;
26
- return Object.freeze(n);
27
- }
28
-
29
- var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(SelectPrimitive);
30
- var TogglePrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(TogglePrimitive);
31
-
32
- const BLOCK_SELECT_SIDE_OFFSET = 10;
33
- const FLOATING_ELEMENT_COLLISION_PADDING = 10;
34
- function applyToolbarSlot(slot, props) {
35
- if (typeof slot === "function") {
36
- const Component = slot;
37
- return /* @__PURE__ */ jsxRuntime.jsx(Component, {
38
- ...props
39
- });
40
- }
41
- return slot;
42
- }
43
- const ToolbarButton = react.forwardRef(
44
- ({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {
45
- const floatingToolbarContext = react.useContext(shared.FloatingToolbarContext);
46
- const closeFloatingToolbar = floatingToolbarContext?.close;
47
- const handleKeyDown = react.useCallback(
48
- (event) => {
49
- onKeyDown?.(event);
50
- if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
51
- closeFloatingToolbar();
52
- event.preventDefault();
53
- event.stopPropagation();
54
- }
55
- },
56
- [onKeyDown, closeFloatingToolbar]
57
- );
58
- return /* @__PURE__ */ jsxRuntime.jsx(_private.ShortcutTooltip, {
59
- content: name,
60
- shortcut,
61
- children: /* @__PURE__ */ jsxRuntime.jsx(_private.Button, {
62
- type: "button",
63
- variant: "toolbar",
64
- ref: forwardedRef,
65
- icon,
66
- ...props,
67
- onKeyDown: handleKeyDown,
68
- children
69
- })
70
- });
71
- }
72
- );
73
- const ToolbarToggle = react.forwardRef(
74
- ({ active, ...props }, forwardedRef) => {
75
- return /* @__PURE__ */ jsxRuntime.jsx(TogglePrimitive__namespace.Root, {
76
- asChild: true,
77
- pressed: active,
78
- children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, {
79
- ref: forwardedRef,
80
- ...props
81
- })
82
- });
83
- }
84
- );
85
- function createDefaultBlockSelectorItems(editor) {
86
- const items = [
87
- {
88
- name: "Text",
89
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.TextIcon, {}),
90
- isActive: "default",
91
- setActive: (editor2) => editor2.chain().focus().clearNodes().run()
92
- },
93
- "toggleHeading" in editor.commands ? {
94
- name: "Heading 1",
95
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.H1Icon, {}),
96
- isActive: (editor2) => editor2.isActive("heading", { level: 1 }),
97
- setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 1 }).run()
98
- } : null,
99
- "toggleHeading" in editor.commands ? {
100
- name: "Heading 2",
101
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.H2Icon, {}),
102
- isActive: (editor2) => editor2.isActive("heading", { level: 2 }),
103
- setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 2 }).run()
104
- } : null,
105
- "toggleHeading" in editor.commands ? {
106
- name: "Heading 3",
107
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.H3Icon, {}),
108
- isActive: (editor2) => editor2.isActive("heading", { level: 3 }),
109
- setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 3 }).run()
110
- } : null,
111
- "toggleBulletList" in editor.commands ? {
112
- name: "Bullet list",
113
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.ListUnorderedIcon, {}),
114
- isActive: (editor2) => editor2.isActive("bulletList"),
115
- setActive: (editor2) => editor2.chain().focus().clearNodes().toggleBulletList().run()
116
- } : null,
117
- "toggleOrderedList" in editor.commands ? {
118
- name: "Numbered list",
119
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.ListOrderedIcon, {}),
120
- isActive: (editor2) => editor2.isActive("orderedList"),
121
- setActive: (editor2) => editor2.chain().focus().clearNodes().toggleOrderedList().run()
122
- } : null,
123
- "toggleBlockquote" in editor.commands ? {
124
- name: "Blockquote",
125
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.BlockquoteIcon, {}),
126
- isActive: (editor2) => editor2.isActive("blockquote"),
127
- setActive: (editor2) => editor2.chain().focus().clearNodes().toggleBlockquote().run()
128
- } : null
129
- ];
130
- return items.filter(Boolean);
131
- }
132
- const ToolbarBlockSelector = react.forwardRef(({ items, onKeyDown, ...props }, forwardedRef) => {
133
- const floatingToolbarContext = react.useContext(shared.FloatingToolbarContext);
134
- const closeFloatingToolbar = floatingToolbarContext?.close;
135
- const editor = context.useCurrentEditor(
136
- "BlockSelector",
137
- "Toolbar or FloatingToolbar"
138
- );
139
- const resolvedItems = react.useMemo(() => {
140
- if (Array.isArray(items)) {
141
- return items;
142
- }
143
- const defaultItems = createDefaultBlockSelectorItems(editor);
144
- return items ? items(defaultItems) : defaultItems;
145
- }, [editor, items]);
146
- let defaultItem;
147
- let activeItem = editor.isInitialized ? resolvedItems.find((item) => {
148
- if (item.isActive === "default") {
149
- defaultItem = item;
150
- return false;
151
- }
152
- return item.isActive(editor);
153
- }) : void 0;
154
- if (!activeItem) {
155
- activeItem = defaultItem;
156
- }
157
- const handleItemChange = (name) => {
158
- const item = resolvedItems.find((item2) => item2.name === name);
159
- if (item) {
160
- item.setActive(editor);
161
- floatingToolbarContext?.close();
162
- }
163
- };
164
- const handleKeyDown = react.useCallback(
165
- (event) => {
166
- onKeyDown?.(event);
167
- if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
168
- closeFloatingToolbar();
169
- event.preventDefault();
170
- event.stopPropagation();
171
- }
172
- },
173
- [onKeyDown, closeFloatingToolbar]
174
- );
175
- return /* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Root, {
176
- value: activeItem?.name,
177
- onValueChange: handleItemChange,
178
- children: [
179
- /* @__PURE__ */ jsxRuntime.jsx(_private.ShortcutTooltip, {
180
- content: "Turn into\u2026",
181
- children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Trigger, {
182
- asChild: true,
183
- ...props,
184
- ref: forwardedRef,
185
- onKeyDown: handleKeyDown,
186
- disabled: resolvedItems.length === 0,
187
- children: /* @__PURE__ */ jsxRuntime.jsx(_private.SelectButton, {
188
- variant: "toolbar",
189
- children: activeItem?.name ?? "Turn into\u2026"
190
- })
191
- })
192
- }),
193
- /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, {
194
- children: /* @__PURE__ */ jsxRuntime.jsx(shared.FloatingToolbarExternal, {
195
- children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Content, {
196
- position: "popper",
197
- sideOffset: BLOCK_SELECT_SIDE_OFFSET,
198
- collisionPadding: FLOATING_ELEMENT_COLLISION_PADDING,
199
- className: "lb-root lb-portal lb-elevation lb-dropdown",
200
- children: resolvedItems.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Item, {
201
- value: item.name,
202
- className: "lb-dropdown-item",
203
- "data-name": item.name,
204
- children: [
205
- item.icon ? /* @__PURE__ */ jsxRuntime.jsx("span", {
206
- className: "lb-dropdown-item-icon lb-icon-container",
207
- children: item.icon
208
- }) : null,
209
- /* @__PURE__ */ jsxRuntime.jsx("span", {
210
- className: "lb-dropdown-item-label",
211
- children: item.label ?? item.name
212
- }),
213
- item.name === activeItem?.name ? /* @__PURE__ */ jsxRuntime.jsx("span", {
214
- className: "lb-dropdown-item-accessory lb-icon-container",
215
- children: /* @__PURE__ */ jsxRuntime.jsx(_private.CheckIcon, {})
216
- }) : null
217
- ]
218
- }, item.name))
219
- })
220
- })
221
- })
222
- ]
223
- });
224
- });
225
- const ToolbarSeparator = react.forwardRef(
226
- ({ className, ...props }, forwardedRef) => {
227
- return /* @__PURE__ */ jsxRuntime.jsx("div", {
228
- ref: forwardedRef,
229
- role: "separator",
230
- "aria-orientation": "vertical",
231
- className: classnames.classNames("lb-tiptap-toolbar-separator", className),
232
- ...props
233
- });
234
- }
235
- );
236
- function ToolbarSectionHistory() {
237
- const editor = context.useCurrentEditor(
238
- "SectionHistory",
239
- "Toolbar or FloatingToolbar"
240
- );
241
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
242
- children: [
243
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, {
244
- name: "Undo",
245
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.UndoIcon, {}),
246
- shortcut: "Mod-Z",
247
- onClick: () => editor.chain().focus().undo().run(),
248
- disabled: !editor.can().chain().focus().undo().run()
249
- }),
250
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, {
251
- name: "Redo",
252
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.RedoIcon, {}),
253
- shortcut: "Mod-Shift-Z",
254
- onClick: () => editor.chain().focus().redo().run(),
255
- disabled: !editor.can().chain().focus().redo().run()
256
- })
257
- ]
258
- });
259
- }
260
- function ToolbarSectionInline() {
261
- const editor = context.useCurrentEditor(
262
- "SectionInline",
263
- "Toolbar or FloatingToolbar"
264
- );
265
- const supportsBold = "toggleBold" in editor.commands;
266
- const supportsItalic = "toggleItalic" in editor.commands;
267
- const supportsUnderline = "toggleUnderline" in editor.commands;
268
- const supportsStrike = "toggleStrike" in editor.commands;
269
- const supportsCode = "toggleCode" in editor.commands;
270
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
271
- children: [
272
- supportsBold && /* @__PURE__ */ jsxRuntime.jsx(ToolbarToggle, {
273
- name: "Bold",
274
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.BoldIcon, {}),
275
- shortcut: "Mod-B",
276
- onClick: () => editor.chain().focus().toggleBold().run(),
277
- disabled: !editor.can().chain().focus().toggleBold().run(),
278
- active: editor.isActive("bold")
279
- }),
280
- supportsItalic && /* @__PURE__ */ jsxRuntime.jsx(ToolbarToggle, {
281
- name: "Italic",
282
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.ItalicIcon, {}),
283
- shortcut: "Mod-I",
284
- onClick: () => editor.chain().focus().toggleItalic().run(),
285
- disabled: !editor.can().chain().focus().toggleItalic().run(),
286
- active: editor.isActive("italic")
287
- }),
288
- supportsUnderline && /* @__PURE__ */ jsxRuntime.jsx(ToolbarToggle, {
289
- name: "Underline",
290
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.UnderlineIcon, {}),
291
- shortcut: "Mod-U",
292
- onClick: () => editor.chain().focus().toggleUnderline().run(),
293
- disabled: !editor.can().chain().focus().toggleUnderline().run(),
294
- active: editor.isActive("underline")
295
- }),
296
- supportsStrike && /* @__PURE__ */ jsxRuntime.jsx(ToolbarToggle, {
297
- name: "Strikethrough",
298
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.StrikethroughIcon, {}),
299
- shortcut: "Mod-U",
300
- onClick: () => editor.chain().focus().toggleStrike().run(),
301
- disabled: !editor.can().chain().focus().toggleStrike().run(),
302
- active: editor.isActive("strike")
303
- }),
304
- supportsCode && /* @__PURE__ */ jsxRuntime.jsx(ToolbarToggle, {
305
- name: "Inline code",
306
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.CodeIcon, {}),
307
- shortcut: "Mod-E",
308
- onClick: () => editor.chain().focus().toggleCode().run(),
309
- disabled: !editor.can().chain().focus().toggleCode().run(),
310
- active: editor.isActive("code")
311
- })
312
- ]
313
- });
314
- }
315
- function ToolbarSectionCollaboration() {
316
- const editor = context.useCurrentEditor(
317
- "SectionCollaboration",
318
- "Toolbar or FloatingToolbar"
319
- );
320
- const supportsThread = "addPendingComment" in editor.commands;
321
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {
322
- children: supportsThread && /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, {
323
- name: "Add a comment",
324
- icon: /* @__PURE__ */ jsxRuntime.jsx(_private.CommentIcon, {}),
325
- onClick: () => editor.chain().focus().addPendingComment().run(),
326
- children: "Comment"
327
- })
328
- });
329
- }
330
- function DefaultToolbarContent({ editor }) {
331
- const supportsThread = "addPendingComment" in editor.commands;
332
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
333
- children: [
334
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarSectionHistory, {}),
335
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarSeparator, {}),
336
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarBlockSelector, {}),
337
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarSectionInline, {}),
338
- supportsThread ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
339
- children: [
340
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarSeparator, {}),
341
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarSectionCollaboration, {})
342
- ]
343
- }) : null
344
- ]
345
- });
346
- }
347
- const Toolbar = Object.assign(
348
- react.forwardRef(
349
- ({
350
- before,
351
- after,
352
- children = DefaultToolbarContent,
353
- editor,
354
- className,
355
- ...props
356
- }, forwardedRef) => {
357
- if (!editor) {
358
- return null;
359
- }
360
- const slotProps = { editor };
361
- return /* @__PURE__ */ jsxRuntime.jsx(_private.TooltipProvider, {
362
- children: /* @__PURE__ */ jsxRuntime.jsx(context.EditorProvider, {
363
- editor,
364
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", {
365
- ref: forwardedRef,
366
- role: "toolbar",
367
- "aria-label": "Toolbar",
368
- "aria-orientation": "horizontal",
369
- className: classnames.classNames("lb-root lb-tiptap-toolbar", className),
370
- ...props,
371
- children: [
372
- applyToolbarSlot(before, slotProps),
373
- applyToolbarSlot(children, slotProps),
374
- applyToolbarSlot(after, slotProps)
375
- ]
376
- })
377
- })
378
- });
379
- }
380
- ),
381
- {
382
- Button: ToolbarButton,
383
- Toggle: ToolbarToggle,
384
- BlockSelector: ToolbarBlockSelector,
385
- Separator: ToolbarSeparator,
386
- SectionHistory: ToolbarSectionHistory,
387
- SectionInline: ToolbarSectionInline,
388
- SectionCollaboration: ToolbarSectionCollaboration
389
- }
390
- );
391
-
392
- exports.BLOCK_SELECT_SIDE_OFFSET = BLOCK_SELECT_SIDE_OFFSET;
393
- exports.FLOATING_ELEMENT_COLLISION_PADDING = FLOATING_ELEMENT_COLLISION_PADDING;
394
- exports.Toolbar = Toolbar;
395
- exports.applyToolbarSlot = applyToolbarSlot;
396
- //# sourceMappingURL=Toolbar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Toolbar.js","sources":["../../src/toolbar/Toolbar.tsx"],"sourcesContent":["import {\n BlockquoteIcon,\n BoldIcon,\n Button,\n CheckIcon,\n CodeIcon,\n CommentIcon,\n H1Icon,\n H2Icon,\n H3Icon,\n ItalicIcon,\n ListOrderedIcon,\n ListUnorderedIcon,\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 type { Editor } from \"@tiptap/react\";\nimport type {\n ComponentProps,\n ComponentType,\n KeyboardEvent,\n ReactNode,\n} from \"react\";\nimport { forwardRef, useCallback, useContext, useMemo } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type { ExtendedChainedCommands } from \"../types\";\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: Editor;\n}\n\nexport type ToolbarSlot = ReactNode | ComponentType<ToolbarSlotProps>;\n\nexport interface ToolbarProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n /**\n * The Tiptap editor.\n */\n editor: Editor | null;\n\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 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: Editor) => boolean) | \"default\";\n\n /**\n * A callback invoked when this item is selected.\n */\n setActive: (editor: Editor) => 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 type ToolbarSeparatorProps = ComponentProps<\"div\">;\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\nfunction createDefaultBlockSelectorItems(\n editor: Editor\n): ToolbarBlockSelectorItem[] {\n const items: (ToolbarBlockSelectorItem | null)[] = [\n {\n name: \"Text\",\n icon: <TextIcon />,\n isActive: \"default\",\n setActive: (editor) => editor.chain().focus().clearNodes().run(),\n },\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 1\",\n icon: <H1Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 1 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 1 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 2\",\n icon: <H2Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 2 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 2 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 3\",\n icon: <H3Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 3 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 3 })\n .run(),\n }\n : null,\n \"toggleBulletList\" in editor.commands\n ? {\n name: \"Bullet list\",\n icon: <ListUnorderedIcon />,\n isActive: (editor) => editor.isActive(\"bulletList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBulletList\">\n )\n .toggleBulletList()\n .run(),\n }\n : null,\n \"toggleOrderedList\" in editor.commands\n ? {\n name: \"Numbered list\",\n icon: <ListOrderedIcon />,\n isActive: (editor) => editor.isActive(\"orderedList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleOrderedList\">\n )\n .toggleOrderedList()\n .run(),\n }\n : null,\n \"toggleBlockquote\" in editor.commands\n ? {\n name: \"Blockquote\",\n icon: <BlockquoteIcon />,\n isActive: (editor) => editor.isActive(\"blockquote\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBlockquote\">\n )\n .toggleBlockquote()\n .run(),\n }\n : null,\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 = useCurrentEditor(\n \"BlockSelector\",\n \"Toolbar or FloatingToolbar\"\n );\n const resolvedItems = useMemo(() => {\n if (Array.isArray(items)) {\n return items;\n }\n\n const defaultItems = createDefaultBlockSelectorItems(editor);\n\n return items ? items(defaultItems) : defaultItems;\n }, [editor, items]);\n let defaultItem: ToolbarBlockSelectorItem | undefined;\n let activeItem = editor.isInitialized\n ? resolvedItems.find((item) => {\n if (item.isActive === \"default\") {\n defaultItem = item;\n return false;\n }\n\n return item.isActive(editor);\n })\n : undefined;\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 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\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-tiptap-toolbar-separator\", className)}\n {...props}\n />\n );\n }\n);\n\nfunction ToolbarSectionHistory() {\n const editor = useCurrentEditor(\n \"SectionHistory\",\n \"Toolbar or FloatingToolbar\"\n );\n\n return (\n <>\n <ToolbarButton\n name=\"Undo\"\n icon={<UndoIcon />}\n shortcut=\"Mod-Z\"\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().chain().focus().undo().run()}\n />\n <ToolbarButton\n name=\"Redo\"\n icon={<RedoIcon />}\n shortcut=\"Mod-Shift-Z\"\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().chain().focus().redo().run()}\n />\n </>\n );\n}\n\nfunction ToolbarSectionInline() {\n const editor = useCurrentEditor(\n \"SectionInline\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsBold = \"toggleBold\" in editor.commands;\n const supportsItalic = \"toggleItalic\" in editor.commands;\n const supportsUnderline = \"toggleUnderline\" in editor.commands;\n const supportsStrike = \"toggleStrike\" in editor.commands;\n const supportsCode = \"toggleCode\" in editor.commands;\n\n return (\n <>\n {supportsBold && (\n <ToolbarToggle\n name=\"Bold\"\n icon={<BoldIcon />}\n shortcut=\"Mod-B\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleBold\">)\n .toggleBold()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleBold\">\n )\n .toggleBold()\n .run()\n }\n active={editor.isActive(\"bold\")}\n />\n )}\n {supportsItalic && (\n <ToolbarToggle\n name=\"Italic\"\n icon={<ItalicIcon />}\n shortcut=\"Mod-I\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleItalic\">)\n .toggleItalic()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleItalic\">\n )\n .toggleItalic()\n .run()\n }\n active={editor.isActive(\"italic\")}\n />\n )}\n {supportsUnderline && (\n <ToolbarToggle\n name=\"Underline\"\n icon={<UnderlineIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n active={editor.isActive(\"underline\")}\n />\n )}\n {supportsStrike && (\n <ToolbarToggle\n name=\"Strikethrough\"\n icon={<StrikethroughIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleStrike\">)\n .toggleStrike()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleStrike\">\n )\n .toggleStrike()\n .run()\n }\n active={editor.isActive(\"strike\")}\n />\n )}\n {supportsCode && (\n <ToolbarToggle\n name=\"Inline code\"\n icon={<CodeIcon />}\n shortcut=\"Mod-E\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleCode\">)\n .toggleCode()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleCode\">\n )\n .toggleCode()\n .run()\n }\n active={editor.isActive(\"code\")}\n />\n )}\n </>\n );\n}\n\nfunction ToolbarSectionCollaboration() {\n const editor = useCurrentEditor(\n \"SectionCollaboration\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n {supportsThread && (\n <ToolbarButton\n name=\"Add a comment\"\n icon={<CommentIcon />}\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"addPendingComment\">\n )\n .addPendingComment()\n .run()\n }\n >\n Comment\n </ToolbarButton>\n )}\n </>\n );\n}\n\nfunction DefaultToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <ToolbarSectionHistory />\n <ToolbarSeparator />\n <ToolbarBlockSelector />\n <ToolbarSectionInline />\n {supportsThread ? (\n <>\n <ToolbarSeparator />\n <ToolbarSectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\n/**\n * A static toolbar containing actions and values related to the editor.\n *\n * @example\n * <Toolbar editor={editor} />\n *\n * @example\n * <Toolbar editor={editor}>\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 {\n before,\n after,\n children = DefaultToolbarContent,\n editor,\n className,\n ...props\n },\n forwardedRef\n ) => {\n if (!editor) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return (\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <div\n ref={forwardedRef}\n role=\"toolbar\"\n aria-label=\"Toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\"lb-root lb-tiptap-toolbar\", className)}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </EditorProvider>\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":["jsx","forwardRef","useContext","FloatingToolbarContext","useCallback","ShortcutTooltip","Button","TogglePrimitive","TextIcon","editor","H1Icon","H2Icon","H3Icon","ListUnorderedIcon","ListOrderedIcon","BlockquoteIcon","useCurrentEditor","useMemo","item","jsxs","SelectPrimitive","SelectButton","FloatingToolbarExternal","CheckIcon","classNames","Fragment","UndoIcon","RedoIcon","BoldIcon","ItalicIcon","UnderlineIcon","StrikethroughIcon","CodeIcon","CommentIcon","TooltipProvider","EditorProvider"],"mappings":"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"}