@liveblocks/react-tiptap 2.15.1 → 2.16.0-toolbars1

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