@liveblocks/react-lexical 2.16.0-toolbars1 → 2.16.0-toolbars3

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.
@@ -3,17 +3,17 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext
3
3
  import { $isHeadingNode, $createHeadingNode, $createQuoteNode } from '@lexical/rich-text';
4
4
  import { $setBlocksType } from '@lexical/selection';
5
5
  import { mergeRegister } from '@lexical/utils';
6
- import { ShortcutTooltip, Button, UndoIcon, RedoIcon, BoldIcon, ItalicIcon, UnderlineIcon, StrikethroughIcon, CodeIcon, CommentIcon, ChevronDownIcon, CheckIcon, TooltipProvider } from '@liveblocks/react-ui/_private';
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
7
  import * as SelectPrimitive from '@radix-ui/react-select';
8
8
  import * as TogglePrimitive from '@radix-ui/react-toggle';
9
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, useState, useEffect, useCallback, useContext, useMemo } from 'react';
10
+ import { forwardRef, useContext, useCallback, useState, useEffect, useMemo } from 'react';
11
11
  import { classNames } from '../classnames.mjs';
12
12
  import { OPEN_FLOATING_COMPOSER_COMMAND } from '../comments/floating-composer.mjs';
13
13
  import { getSelectedBlockElement } from '../get-selected-block-element.mjs';
14
14
  import { useIsCommandRegistered } from '../is-command-registered.mjs';
15
15
  import { isTextFormatActive } from '../is-text-format-active.mjs';
16
- import { FloatingToolbarContext } from './floating-toolbar-context.mjs';
16
+ import { FloatingToolbarContext, FloatingToolbarExternal } from './shared.mjs';
17
17
 
18
18
  const BLOCK_SELECT_SIDE_OFFSET = 10;
19
19
  const FLOATING_ELEMENT_COLLISION_PADDING = 10;
@@ -27,7 +27,20 @@ function applyToolbarSlot(slot, props) {
27
27
  return slot;
28
28
  }
29
29
  const ToolbarButton = forwardRef(
30
- ({ icon, children, name, shortcut, ...props }, forwardedRef) => {
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
+ );
31
44
  return /* @__PURE__ */ jsx(ShortcutTooltip, {
32
45
  content: name,
33
46
  shortcut,
@@ -37,6 +50,7 @@ const ToolbarButton = forwardRef(
37
50
  ref: forwardedRef,
38
51
  icon,
39
52
  ...props,
53
+ onKeyDown: handleKeyDown,
40
54
  children
41
55
  })
42
56
  });
@@ -195,11 +209,18 @@ function useRerender() {
195
209
  }
196
210
  function createDefaultBlockSelectorItems() {
197
211
  const items = [
212
+ {
213
+ name: "Text",
214
+ icon: /* @__PURE__ */ jsx(TextIcon, {}),
215
+ isActive: "default",
216
+ setActive: () => $setBlocksType($getSelection(), () => $createParagraphNode())
217
+ },
198
218
  {
199
219
  name: "Heading 1",
200
- isActive: (selectedBlock) => {
201
- if ($isHeadingNode(selectedBlock)) {
202
- const tag = selectedBlock.getTag();
220
+ icon: /* @__PURE__ */ jsx(H1Icon, {}),
221
+ isActive: (element) => {
222
+ if ($isHeadingNode(element)) {
223
+ const tag = element.getTag();
203
224
  return tag === "h1";
204
225
  } else {
205
226
  return false;
@@ -209,9 +230,10 @@ function createDefaultBlockSelectorItems() {
209
230
  },
210
231
  {
211
232
  name: "Heading 2",
212
- isActive: (selectedBlock) => {
213
- if ($isHeadingNode(selectedBlock)) {
214
- const tag = selectedBlock.getTag();
233
+ icon: /* @__PURE__ */ jsx(H2Icon, {}),
234
+ isActive: (element) => {
235
+ if ($isHeadingNode(element)) {
236
+ const tag = element.getTag();
215
237
  return tag === "h2";
216
238
  } else {
217
239
  return false;
@@ -221,9 +243,10 @@ function createDefaultBlockSelectorItems() {
221
243
  },
222
244
  {
223
245
  name: "Heading 3",
224
- isActive: (selectedBlock) => {
225
- if ($isHeadingNode(selectedBlock)) {
226
- const tag = selectedBlock.getTag();
246
+ icon: /* @__PURE__ */ jsx(H3Icon, {}),
247
+ isActive: (element) => {
248
+ if ($isHeadingNode(element)) {
249
+ const tag = element.getTag();
227
250
  return tag === "h3";
228
251
  } else {
229
252
  return false;
@@ -233,31 +256,36 @@ function createDefaultBlockSelectorItems() {
233
256
  },
234
257
  {
235
258
  name: "Blockquote",
236
- isActive: (selectedBlock) => selectedBlock?.getType() === "quote",
259
+ icon: /* @__PURE__ */ jsx(BlockquoteIcon, {}),
260
+ isActive: (element) => element?.getType() === "quote",
237
261
  setActive: () => $setBlocksType($getSelection(), () => $createQuoteNode())
238
262
  }
239
263
  ];
240
264
  return items.filter(Boolean);
241
265
  }
242
- const blockSelectorTextItem = {
243
- name: "Text",
244
- isActive: () => false,
245
- setActive: () => $setBlocksType($getSelection(), () => $createParagraphNode())
246
- };
247
- const ToolbarBlockSelector = forwardRef(({ items, ...props }, forwardedRef) => {
266
+ const ToolbarBlockSelector = forwardRef(({ items, onKeyDown, ...props }, forwardedRef) => {
248
267
  const floatingToolbarContext = useContext(FloatingToolbarContext);
268
+ const closeFloatingToolbar = floatingToolbarContext?.close;
249
269
  const [editor] = useLexicalComposerContext();
250
- const selectedBlockElement = getSelectedBlockElement(editor);
270
+ const element = getSelectedBlockElement(editor);
251
271
  const resolvedItems = useMemo(() => {
252
- const resolvedItems2 = items ?? createDefaultBlockSelectorItems();
253
- return [blockSelectorTextItem, ...resolvedItems2];
272
+ if (Array.isArray(items)) {
273
+ return items;
274
+ }
275
+ const defaultItems = createDefaultBlockSelectorItems();
276
+ return items ? items(defaultItems) : defaultItems;
254
277
  }, [items]);
255
- const activeItem = useMemo(
256
- () => resolvedItems.find(
257
- (item) => item.isActive(selectedBlockElement, editor)
258
- ) ?? blockSelectorTextItem,
259
- [selectedBlockElement, editor, resolvedItems]
260
- );
278
+ let defaultItem;
279
+ let activeItem = resolvedItems.find((item) => {
280
+ if (item.isActive === "default") {
281
+ defaultItem = item;
282
+ return false;
283
+ }
284
+ return item.isActive(element, editor);
285
+ });
286
+ if (!activeItem) {
287
+ activeItem = defaultItem;
288
+ }
261
289
  const handleItemChange = (name) => {
262
290
  const item = resolvedItems.find((item2) => item2.name === name);
263
291
  if (item) {
@@ -265,8 +293,19 @@ const ToolbarBlockSelector = forwardRef(({ items, ...props }, forwardedRef) => {
265
293
  floatingToolbarContext?.close();
266
294
  }
267
295
  };
296
+ const handleKeyDown = useCallback(
297
+ (event) => {
298
+ onKeyDown?.(event);
299
+ if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
300
+ closeFloatingToolbar();
301
+ event.preventDefault();
302
+ event.stopPropagation();
303
+ }
304
+ },
305
+ [onKeyDown, closeFloatingToolbar]
306
+ );
268
307
  return /* @__PURE__ */ jsxs(SelectPrimitive.Root, {
269
- value: activeItem.name,
308
+ value: activeItem?.name,
270
309
  onValueChange: handleItemChange,
271
310
  children: [
272
311
  /* @__PURE__ */ jsx(ShortcutTooltip, {
@@ -275,43 +314,42 @@ const ToolbarBlockSelector = forwardRef(({ items, ...props }, forwardedRef) => {
275
314
  asChild: true,
276
315
  ...props,
277
316
  ref: forwardedRef,
278
- children: /* @__PURE__ */ jsxs(Button, {
279
- type: "button",
317
+ onKeyDown: handleKeyDown,
318
+ disabled: resolvedItems.length === 0,
319
+ children: /* @__PURE__ */ jsx(SelectButton, {
280
320
  variant: "toolbar",
281
- children: [
282
- /* @__PURE__ */ jsx(SelectPrimitive.Value, {
283
- children: activeItem.name
284
- }),
285
- /* @__PURE__ */ jsx(SelectPrimitive.Icon, {
286
- className: "lb-dropdown-chevron",
287
- children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
288
- })
289
- ]
321
+ children: activeItem?.name ?? "Turn into\u2026"
290
322
  })
291
323
  })
292
324
  }),
293
325
  /* @__PURE__ */ jsx(SelectPrimitive.Portal, {
294
- children: /* @__PURE__ */ jsx(SelectPrimitive.Content, {
295
- position: "popper",
296
- sideOffset: BLOCK_SELECT_SIDE_OFFSET,
297
- collisionPadding: FLOATING_ELEMENT_COLLISION_PADDING,
298
- className: "lb-root lb-portal lb-elevation lb-dropdown",
299
- children: resolvedItems.map((item) => /* @__PURE__ */ jsxs(SelectPrimitive.Item, {
300
- value: item.name,
301
- className: "lb-dropdown-item",
302
- children: [
303
- /* @__PURE__ */ jsx("span", {
304
- className: "lb-dropdown-item-label",
305
- children: /* @__PURE__ */ jsx(SelectPrimitive.ItemText, {
306
- children: item.name
307
- })
308
- }),
309
- item.name === activeItem.name ? /* @__PURE__ */ jsx("span", {
310
- className: "lb-dropdown-item-accessory lb-icon-container",
311
- children: /* @__PURE__ */ jsx(CheckIcon, {})
312
- }) : null
313
- ]
314
- }, item.name))
326
+ children: /* @__PURE__ */ jsx(FloatingToolbarExternal, {
327
+ children: /* @__PURE__ */ jsx(SelectPrimitive.Content, {
328
+ position: "popper",
329
+ sideOffset: BLOCK_SELECT_SIDE_OFFSET,
330
+ collisionPadding: FLOATING_ELEMENT_COLLISION_PADDING,
331
+ className: "lb-root lb-portal lb-elevation lb-dropdown",
332
+ children: resolvedItems.map((item) => /* @__PURE__ */ jsxs(SelectPrimitive.Item, {
333
+ value: item.name,
334
+ className: "lb-dropdown-item",
335
+ children: [
336
+ item.icon ? /* @__PURE__ */ jsx("span", {
337
+ className: "lb-dropdown-item-icon lb-icon-container",
338
+ children: item.icon
339
+ }) : null,
340
+ /* @__PURE__ */ jsx("span", {
341
+ className: "lb-dropdown-item-label",
342
+ children: /* @__PURE__ */ jsx(SelectPrimitive.ItemText, {
343
+ children: item.name
344
+ })
345
+ }),
346
+ item.name === activeItem?.name ? /* @__PURE__ */ jsx("span", {
347
+ className: "lb-dropdown-item-accessory lb-icon-container",
348
+ children: /* @__PURE__ */ jsx(CheckIcon, {})
349
+ }) : null
350
+ ]
351
+ }, item.name))
352
+ })
315
353
  })
316
354
  })
317
355
  ]
@@ -1 +1 @@
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 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 {\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 type LexicalNode,\n REDO_COMMAND,\n UNDO_COMMAND,\n} from \"lexical\";\nimport type { ComponentProps, ComponentType, ReactNode } 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 { getSelectedBlockElement } from \"../get-selected-block-element\";\nimport { useIsCommandRegistered } from \"../is-command-registered\";\nimport { isTextFormatActive } from \"../is-text-format-active\";\nimport { FloatingToolbarContext } from \"./floating-toolbar-context\";\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 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\ntype ToolbarSeparatorProps = ComponentProps<\"div\">;\n\ninterface ToolbarBlockSelectorItem {\n name: string;\n isActive: (\n selectedBlockElement: LexicalNode | null,\n editor: LexicalEditor\n ) => boolean;\n setActive: (editor: LexicalEditor) => void;\n}\n\ninterface ToolbarBlockSelectorProps extends ComponentProps<\"button\"> {\n items?: 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, ...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\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: \"Heading 1\",\n isActive: (selectedBlock) => {\n if ($isHeadingNode(selectedBlock)) {\n const tag = selectedBlock.getTag();\n\n return tag === \"h1\";\n } else {\n return false;\n }\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h1\")),\n },\n {\n name: \"Heading 2\",\n isActive: (selectedBlock) => {\n if ($isHeadingNode(selectedBlock)) {\n const tag = selectedBlock.getTag();\n\n return tag === \"h2\";\n } else {\n return false;\n }\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h2\")),\n },\n {\n name: \"Heading 3\",\n isActive: (selectedBlock) => {\n if ($isHeadingNode(selectedBlock)) {\n const tag = selectedBlock.getTag();\n\n return tag === \"h3\";\n } else {\n return false;\n }\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h3\")),\n },\n {\n name: \"Blockquote\",\n isActive: (selectedBlock) => selectedBlock?.getType() === \"quote\",\n setActive: () =>\n $setBlocksType($getSelection(), () => $createQuoteNode()),\n },\n ];\n\n return items.filter(Boolean) as ToolbarBlockSelectorItem[];\n}\n\nconst blockSelectorTextItem: ToolbarBlockSelectorItem = {\n name: \"Text\",\n isActive: () => false,\n setActive: () =>\n $setBlocksType($getSelection(), () => $createParagraphNode()),\n};\n\nconst ToolbarBlockSelector = forwardRef<\n HTMLButtonElement,\n ToolbarBlockSelectorProps\n>(({ items, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const [editor] = useLexicalComposerContext();\n const selectedBlockElement = getSelectedBlockElement(editor);\n const resolvedItems = useMemo(() => {\n const resolvedItems = items ?? createDefaultBlockSelectorItems();\n return [blockSelectorTextItem, ...resolvedItems];\n }, [items]);\n\n const activeItem = useMemo(\n () =>\n resolvedItems.find((item) =>\n item.isActive(selectedBlockElement, editor)\n ) ?? blockSelectorTextItem,\n [selectedBlockElement, editor, resolvedItems]\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 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\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 Button: ToolbarButton,\n Toggle: ToolbarToggle,\n Separator: ToolbarSeparator,\n SectionHistory: ToolbarSectionHistory,\n SectionInline: ToolbarSectionInline,\n SectionCollaboration: ToolbarSectionCollaboration,\n BlockSelector: ToolbarBlockSelector,\n }\n);\n"],"names":["resolvedItems","item"],"mappings":"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"}
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 type LexicalNode,\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 { getSelectedBlockElement } from \"../get-selected-block-element\";\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 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\ntype ToolbarSeparatorProps = ComponentProps<\"div\">;\n\ninterface ToolbarBlockSelectorItem {\n name: string;\n icon?: ReactNode;\n isActive:\n | ((element: LexicalNode | null, editor: LexicalEditor) => boolean)\n | \"default\";\n setActive: (editor: LexicalEditor) => void;\n}\n\ninterface ToolbarBlockSelectorProps extends ComponentProps<\"button\"> {\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: (element) => {\n if ($isHeadingNode(element)) {\n const tag = element.getTag();\n\n return tag === \"h1\";\n } else {\n return false;\n }\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h1\")),\n },\n {\n name: \"Heading 2\",\n icon: <H2Icon />,\n isActive: (element) => {\n if ($isHeadingNode(element)) {\n const tag = element.getTag();\n\n return tag === \"h2\";\n } else {\n return false;\n }\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h2\")),\n },\n {\n name: \"Heading 3\",\n icon: <H3Icon />,\n isActive: (element) => {\n if ($isHeadingNode(element)) {\n const tag = element.getTag();\n\n return tag === \"h3\";\n } else {\n return false;\n }\n },\n setActive: () =>\n $setBlocksType($getSelection(), () => $createHeadingNode(\"h3\")),\n },\n {\n name: \"Blockquote\",\n icon: <BlockquoteIcon />,\n isActive: (element) => element?.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 element = getSelectedBlockElement(editor);\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(element, 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 >\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 <SelectPrimitive.ItemText>\n {item.name}\n </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 </FloatingToolbarExternal>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n});\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 Button: ToolbarButton,\n Toggle: ToolbarToggle,\n Separator: ToolbarSeparator,\n SectionHistory: ToolbarSectionHistory,\n SectionInline: ToolbarSectionInline,\n SectionCollaboration: ToolbarSectionCollaboration,\n BlockSelector: ToolbarBlockSelector,\n }\n);\n"],"names":["item"],"mappings":"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"}
package/dist/version.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const PKG_NAME = "@liveblocks/react-lexical";
4
- const PKG_VERSION = typeof "2.16.0-toolbars1" === "string" && "2.16.0-toolbars1";
4
+ const PKG_VERSION = typeof "2.16.0-toolbars3" === "string" && "2.16.0-toolbars3";
5
5
  const PKG_FORMAT = typeof "cjs" === "string" && "cjs";
6
6
 
7
7
  exports.PKG_FORMAT = PKG_FORMAT;
package/dist/version.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  const PKG_NAME = "@liveblocks/react-lexical";
2
- const PKG_VERSION = typeof "2.16.0-toolbars1" === "string" && "2.16.0-toolbars1";
2
+ const PKG_VERSION = typeof "2.16.0-toolbars3" === "string" && "2.16.0-toolbars3";
3
3
  const PKG_FORMAT = typeof "esm" === "string" && "esm";
4
4
 
5
5
  export { PKG_FORMAT, PKG_NAME, PKG_VERSION };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liveblocks/react-lexical",
3
- "version": "2.16.0-toolbars1",
3
+ "version": "2.16.0-toolbars3",
4
4
  "description": "A lexical react plugin to enable collaboration, comments, live cursors, and more.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "commonjs",
@@ -42,11 +42,11 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@floating-ui/react-dom": "^2.1.1",
45
- "@liveblocks/client": "2.16.0-toolbars1",
46
- "@liveblocks/core": "2.16.0-toolbars1",
47
- "@liveblocks/react": "2.16.0-toolbars1",
48
- "@liveblocks/react-ui": "2.16.0-toolbars1",
49
- "@liveblocks/yjs": "2.16.0-toolbars1",
45
+ "@liveblocks/client": "2.16.0-toolbars3",
46
+ "@liveblocks/core": "2.16.0-toolbars3",
47
+ "@liveblocks/react": "2.16.0-toolbars3",
48
+ "@liveblocks/react-ui": "2.16.0-toolbars3",
49
+ "@liveblocks/yjs": "2.16.0-toolbars3",
50
50
  "@radix-ui/react-select": "^2.1.2",
51
51
  "@radix-ui/react-toggle": "^1.1.0",
52
52
  "yjs": "^13.6.18"
@@ -1,8 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
-
5
- const FloatingToolbarContext = react.createContext(null);
6
-
7
- exports.FloatingToolbarContext = FloatingToolbarContext;
8
- //# sourceMappingURL=floating-toolbar-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"floating-toolbar-context.js","sources":["../../src/toolbar/floating-toolbar-context.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\n// This file is separate to avoid circular dependencies\n\ntype FloatingToolbarContext = {\n close: () => void;\n};\n\nexport const FloatingToolbarContext =\n createContext<FloatingToolbarContext | null>(null);\n"],"names":["createContext"],"mappings":";;;;AAQa,MAAA,sBAAA,GACXA,oBAA6C,IAAI;;;;"}
@@ -1,6 +0,0 @@
1
- import { createContext } from 'react';
2
-
3
- const FloatingToolbarContext = createContext(null);
4
-
5
- export { FloatingToolbarContext };
6
- //# sourceMappingURL=floating-toolbar-context.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"floating-toolbar-context.mjs","sources":["../../src/toolbar/floating-toolbar-context.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\n// This file is separate to avoid circular dependencies\n\ntype FloatingToolbarContext = {\n close: () => void;\n};\n\nexport const FloatingToolbarContext =\n createContext<FloatingToolbarContext | null>(null);\n"],"names":[],"mappings":";;AAQa,MAAA,sBAAA,GACX,cAA6C,IAAI;;;;"}