{"version":3,"file":"toolbar.cjs","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  cn,\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  useLiveblocksUiConfig,\n} from \"@liveblocks/react-ui/_private\";\nimport {\n  $createParagraphNode,\n  $getSelection,\n  CAN_REDO_COMMAND,\n  CAN_UNDO_COMMAND,\n  COMMAND_PRIORITY_CRITICAL,\n  COMMAND_PRIORITY_LOW,\n  createCommand,\n  FORMAT_TEXT_COMMAND,\n  type LexicalCommand,\n  type LexicalEditor,\n  REDO_COMMAND,\n  UNDO_COMMAND,\n} from \"lexical\";\nimport { Select as SelectPrimitive, Toggle as TogglePrimitive } from \"radix-ui\";\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 { OPEN_FLOATING_COMPOSER_COMMAND } from \"../comments/floating-composer\";\nimport { isBlockNodeActive } from \"../is-block-node-active\";\nimport { useIsCommandRegistered } from \"../is-command-registered\";\nimport { isTextFormatActive } from \"../is-text-format-active\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\n\nexport const BLOCK_SELECT_SIDE_OFFSET = 10;\nexport const FLOATING_ELEMENT_COLLISION_PADDING = 10;\n\nexport interface ToolbarSlotProps {\n  editor: LexicalEditor;\n}\n\nexport type ToolbarSlot = ReactNode | ComponentType<ToolbarSlotProps>;\n\nexport interface ToolbarProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n  /**\n   * The content of the toolbar, overriding the default content.\n   * Use the `before` and `after` props if you want to keep and extend the default content.\n   */\n  children?: ToolbarSlot;\n\n  /**\n   * The content to display at the start of the toolbar.\n   */\n  before?: ToolbarSlot;\n\n  /**\n   * The content to display at the end of the toolbar.\n   */\n  after?: ToolbarSlot;\n}\n\nexport interface ToolbarButtonProps extends ComponentProps<\"button\"> {\n  /**\n   * The name of this button displayed in its tooltip.\n   */\n  name: string;\n\n  /**\n   * An optional icon displayed in this button.\n   */\n  icon?: ReactNode;\n\n  /**\n   * An optional keyboard shortcut displayed in this button's tooltip.\n   *\n   * @example\n   * \"Mod-Alt-B\" → \"⌘⌥B\" in Apple environments, \"⌃⌥B\" otherwise\n   * \"Ctrl-Shift-Escape\" → \"⌃⇧⎋\"\n   * \"Space\" → \"␣\"\n   */\n  shortcut?: string;\n}\n\nexport interface ToolbarToggleProps extends ToolbarButtonProps {\n  /**\n   * Whether the button is toggled.\n   */\n  active: boolean;\n}\n\nexport type ToolbarSeparatorProps = ComponentProps<\"div\">;\n\nexport interface ToolbarBlockSelectorItem {\n  /**\n   * The name of this block element, displayed as the label of this item.\n   */\n  name: string;\n\n  /**\n   * Optionally replace the name used as the label of this item by any content.\n   */\n  label?: ReactNode;\n\n  /**\n   * An optional icon displayed in this item.\n   */\n  icon?: ReactNode;\n\n  /**\n   * Whether this block element is currently active.\n   * Set to `\"default\"` to display this item when no other item is active.\n   */\n  isActive: ((editor: LexicalEditor) => boolean) | \"default\";\n\n  /**\n   * A callback invoked when this item is selected.\n   */\n  setActive: (editor: LexicalEditor) => void;\n}\n\nexport interface ToolbarBlockSelectorProps extends ComponentProps<\"button\"> {\n  /**\n   * The items displayed in this block selector.\n   * When provided as an array, the default items are overridden. To avoid this,\n   * a function can be provided instead and it will receive the default items.\n   *\n   * @example\n   * <Toolbar.BlockSelector\n   *   items={[\n   *     {\n   *       name: \"Text\",\n   *       isActive: \"default\",\n   *       setActive: () => { ... },\n   *     },\n   *     {\n   *       name: \"Heading 1\",\n   *       isActive: () => { ... },\n   *       setActive: () => { ... },\n   *     },\n   *   ]}\n   * />\n   *\n   * @example\n   * <Toolbar.BlockSelector\n   *   items={(defaultItems) => [\n   *     ...defaultItems,\n   *     {\n   *       name: \"Custom block\",\n   *       isActive: () => { ... },\n   *       setActive: () => { ... },\n   *     },\n   *   ]}\n   * />\n   */\n  items?:\n    | ToolbarBlockSelectorItem[]\n    | ((\n        defaultItems: ToolbarBlockSelectorItem[]\n      ) => ToolbarBlockSelectorItem[]);\n}\n\nexport function applyToolbarSlot(\n  slot: ToolbarSlot,\n  props: ToolbarSlotProps\n): ReactNode {\n  if (typeof slot === \"function\") {\n    const Component = slot;\n\n    return <Component {...props} />;\n  }\n\n  return slot;\n}\n\nconst ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n  ({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {\n    const floatingToolbarContext = useContext(FloatingToolbarContext);\n    const closeFloatingToolbar = floatingToolbarContext?.close;\n\n    const handleKeyDown = useCallback(\n      (event: KeyboardEvent<HTMLButtonElement>) => {\n        onKeyDown?.(event);\n\n        if (\n          !event.isDefaultPrevented() &&\n          closeFloatingToolbar &&\n          event.key === \"Escape\"\n        ) {\n          closeFloatingToolbar();\n          event.preventDefault();\n          event.stopPropagation();\n        }\n      },\n      [onKeyDown, closeFloatingToolbar]\n    );\n\n    return (\n      <ShortcutTooltip content={name} shortcut={shortcut}>\n        <Button\n          type=\"button\"\n          variant=\"toolbar\"\n          ref={forwardedRef}\n          icon={icon}\n          aria-label={!children ? name : undefined}\n          // Safari doesn't mark buttons as focusable, which breaks `relatedTarget`\n          // in focus/blur events. https://bugs.webkit.org/show_bug.cgi?id=254655\n          tabIndex={0}\n          {...props}\n          onKeyDown={handleKeyDown}\n        >\n          {!children && !icon ? name : 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={cn(\"lb-lexical-toolbar-separator\", className)}\n        {...props}\n      />\n    );\n  }\n);\n\nfunction ToolbarSectionHistory() {\n  const [editor] = useLexicalComposerContext();\n  const [canUndo, setCanUndo] = useState(false);\n  const [canRedo, setCanRedo] = useState(false);\n\n  useEffect(() => {\n    const unregister = mergeRegister(\n      editor.registerCommand<boolean>(\n        CAN_UNDO_COMMAND,\n        (payload) => {\n          setCanUndo(payload);\n          return false;\n        },\n        COMMAND_PRIORITY_CRITICAL\n      ),\n      editor.registerCommand<boolean>(\n        CAN_REDO_COMMAND,\n        (payload) => {\n          setCanRedo(payload);\n          return false;\n        },\n        COMMAND_PRIORITY_CRITICAL\n      )\n    );\n\n    return unregister;\n  }, [editor]);\n\n  return (\n    <>\n      <ToolbarButton\n        name=\"Undo\"\n        icon={<UndoIcon />}\n        shortcut=\"Mod-Z\"\n        onClick={() => editor.dispatchCommand(UNDO_COMMAND, undefined)}\n        disabled={!canUndo}\n      />\n      <ToolbarButton\n        name=\"Redo\"\n        icon={<RedoIcon />}\n        shortcut=\"Mod-Shift-Z\"\n        onClick={() => editor.dispatchCommand(REDO_COMMAND, undefined)}\n        disabled={!canRedo}\n      />\n    </>\n  );\n}\n\nfunction ToolbarSectionInline() {\n  const [editor] = useLexicalComposerContext();\n  const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);\n\n  return supportsTextFormat ? (\n    <>\n      <ToolbarToggle\n        name=\"Bold\"\n        icon={<BoldIcon />}\n        shortcut=\"Mod-B\"\n        onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\")}\n        active={isTextFormatActive(editor, \"bold\")}\n      />\n\n      <ToolbarToggle\n        name=\"Italic\"\n        icon={<ItalicIcon />}\n        shortcut=\"Mod-I\"\n        onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\")}\n        active={isTextFormatActive(editor, \"italic\")}\n      />\n      <ToolbarToggle\n        name=\"Underline\"\n        icon={<UnderlineIcon />}\n        shortcut=\"Mod-U\"\n        onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\")}\n        active={isTextFormatActive(editor, \"underline\")}\n      />\n      <ToolbarToggle\n        name=\"Strikethrough\"\n        icon={<StrikethroughIcon />}\n        onClick={() =>\n          editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"strikethrough\")\n        }\n        active={isTextFormatActive(editor, \"strikethrough\")}\n      />\n      <ToolbarToggle\n        name=\"Inline code\"\n        icon={<CodeIcon />}\n        onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\")}\n        active={isTextFormatActive(editor, \"code\")}\n      />\n    </>\n  ) : null;\n}\n\nfunction ToolbarSectionCollaboration() {\n  const [editor] = useLexicalComposerContext();\n  const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);\n\n  return (\n    <>\n      {supportsThread ? (\n        <ToolbarButton\n          name=\"Add a comment\"\n          icon={<CommentIcon />}\n          onClick={() =>\n            editor.dispatchCommand(OPEN_FLOATING_COMPOSER_COMMAND, undefined)\n          }\n        >\n          Comment\n        </ToolbarButton>\n      ) : null}\n    </>\n  );\n}\n\nfunction DefaultToolbarContent() {\n  const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);\n  const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);\n\n  return (\n    <>\n      <ToolbarSectionHistory />\n      {supportsTextFormat ? (\n        <>\n          <ToolbarSeparator />\n          <ToolbarBlockSelector />\n          <ToolbarSectionInline />\n        </>\n      ) : null}\n      {supportsThread ? (\n        <>\n          <ToolbarSeparator />\n          <ToolbarSectionCollaboration />\n        </>\n      ) : null}\n    </>\n  );\n}\n\nconst INITIAL_COMMANDS_REGISTERED_COMMAND: LexicalCommand<void> = createCommand(\n  \"INITIAL_COMMANDS_REGISTERED_COMMAND\"\n);\n\n// Re-renders its surrounding component.\nfunction useRerender() {\n  const [, setRerender] = useState(false);\n\n  return useCallback(() => {\n    setRerender((toggle) => !toggle);\n  }, [setRerender]);\n}\n\nfunction createDefaultBlockSelectorItems(): ToolbarBlockSelectorItem[] {\n  const items: (ToolbarBlockSelectorItem | null)[] = [\n    {\n      name: \"Text\",\n      icon: <TextIcon />,\n      isActive: \"default\",\n      setActive: () =>\n        $setBlocksType($getSelection(), () => $createParagraphNode()),\n    },\n    {\n      name: \"Heading 1\",\n      icon: <H1Icon />,\n      isActive: (editor) => {\n        return isBlockNodeActive(editor, (node) =>\n          $isHeadingNode(node) ? node.getTag() === \"h1\" : false\n        );\n      },\n      setActive: () =>\n        $setBlocksType($getSelection(), () => $createHeadingNode(\"h1\")),\n    },\n    {\n      name: \"Heading 2\",\n      icon: <H2Icon />,\n      isActive: (editor) =>\n        isBlockNodeActive(editor, (node) =>\n          $isHeadingNode(node) ? node.getTag() === \"h2\" : false\n        ),\n      setActive: () =>\n        $setBlocksType($getSelection(), () => $createHeadingNode(\"h2\")),\n    },\n    {\n      name: \"Heading 3\",\n      icon: <H3Icon />,\n      isActive: (editor) =>\n        isBlockNodeActive(editor, (node) =>\n          $isHeadingNode(node) ? node.getTag() === \"h3\" : false\n        ),\n      setActive: () =>\n        $setBlocksType($getSelection(), () => $createHeadingNode(\"h3\")),\n    },\n    {\n      name: \"Blockquote\",\n      icon: <BlockquoteIcon />,\n      isActive: (editor) =>\n        isBlockNodeActive(editor, (node) => node.getType() === \"quote\"),\n      setActive: () =>\n        $setBlocksType($getSelection(), () => $createQuoteNode()),\n    },\n  ];\n\n  return items.filter(Boolean) as ToolbarBlockSelectorItem[];\n}\n\nconst ToolbarBlockSelector = forwardRef<\n  HTMLButtonElement,\n  ToolbarBlockSelectorProps\n>(({ items, onKeyDown, ...props }, forwardedRef) => {\n  const { portalContainer } = useLiveblocksUiConfig();\n  const floatingToolbarContext = useContext(FloatingToolbarContext);\n  const closeFloatingToolbar = floatingToolbarContext?.close;\n  const [editor] = useLexicalComposerContext();\n  const resolvedItems = useMemo(() => {\n    if (Array.isArray(items)) {\n      return items;\n    }\n\n    const defaultItems = createDefaultBlockSelectorItems();\n\n    return items ? items(defaultItems) : defaultItems;\n  }, [items]);\n  let defaultItem: ToolbarBlockSelectorItem | undefined;\n  let activeItem = resolvedItems.find((item) => {\n    if (item.isActive === \"default\") {\n      defaultItem = item;\n      return false;\n    }\n\n    return item.isActive(editor);\n  });\n\n  if (!activeItem) {\n    activeItem = defaultItem;\n  }\n\n  const handleItemChange = (name: string) => {\n    const item = resolvedItems.find((item) => item.name === name);\n\n    if (item) {\n      editor.update(() => item.setActive(editor));\n\n      // If present in a floating toolbar, close it on change\n      floatingToolbarContext?.close();\n    }\n  };\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLButtonElement>) => {\n      onKeyDown?.(event);\n\n      if (\n        !event.isDefaultPrevented() &&\n        closeFloatingToolbar &&\n        event.key === \"Escape\"\n      ) {\n        closeFloatingToolbar();\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    },\n    [onKeyDown, closeFloatingToolbar]\n  );\n\n  return (\n    <SelectPrimitive.Root\n      value={activeItem?.name}\n      onValueChange={handleItemChange}\n    >\n      <ShortcutTooltip content=\"Turn into…\">\n        <SelectPrimitive.Trigger\n          asChild\n          {...props}\n          ref={forwardedRef}\n          onKeyDown={handleKeyDown}\n          disabled={resolvedItems.length === 0}\n        >\n          <SelectButton variant=\"toolbar\">\n            {activeItem?.name ?? \"Turn into…\"}\n          </SelectButton>\n        </SelectPrimitive.Trigger>\n      </ShortcutTooltip>\n      <SelectPrimitive.Portal container={portalContainer}>\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 lb-select-dropdown lb-lexical-block-selector-dropdown\"\n          >\n            {resolvedItems.map((item) => (\n              <SelectPrimitive.Item\n                key={item.name}\n                value={item.name}\n                className=\"lb-dropdown-item\"\n                data-name={item.name}\n              >\n                {item.icon ? (\n                  <span className=\"lb-dropdown-item-icon lb-icon-container\">\n                    {item.icon}\n                  </span>\n                ) : null}\n                <span className=\"lb-dropdown-item-label\">\n                  {item.label ?? item.name}\n                </span>\n                {item.name === activeItem?.name ? (\n                  <span className=\"lb-dropdown-item-accessory lb-icon-container\">\n                    <CheckIcon />\n                  </span>\n                ) : null}\n              </SelectPrimitive.Item>\n            ))}\n          </SelectPrimitive.Content>\n        </FloatingToolbarExternal>\n      </SelectPrimitive.Portal>\n    </SelectPrimitive.Root>\n  );\n});\n\n/**\n * A static toolbar containing actions and values related to the editor.\n *\n * @example\n * <Toolbar  />\n *\n * @example\n * <Toolbar >\n *   <Toolbar.BlockSelector />\n *   <Toolbar.Separator />\n *   <Toolbar.SectionInline />\n *   <Toolbar.Separator />\n *   <Toolbar.Button name=\"Custom action\" onClick={() => { ... }} icon={<Icon.QuestionMark />} />\n * </Toolbar>\n */\nexport const Toolbar = Object.assign(\n  forwardRef<HTMLDivElement, ToolbarProps>(\n    (\n      { before, after, children = DefaultToolbarContent, className, ...props },\n      forwardedRef\n    ) => {\n      const [editor] = useLexicalComposerContext();\n      const [commandsRegistered, setCommandsRegistered] = useState(false);\n      const rerender = useRerender();\n\n      const slotProps: ToolbarSlotProps = { editor };\n\n      // Ensures that `useIsCommandRegistered` returns correct values initially.\n      // It registers a low-priority one-time command to re-render once all initial commands are registered.\n      useEffect(() => {\n        if (commandsRegistered) {\n          return;\n        }\n\n        const unregister = editor.registerCommand(\n          INITIAL_COMMANDS_REGISTERED_COMMAND,\n          () => {\n            setCommandsRegistered(true);\n            return true;\n          },\n          COMMAND_PRIORITY_LOW\n        );\n\n        editor.dispatchCommand(INITIAL_COMMANDS_REGISTERED_COMMAND, undefined);\n\n        return unregister;\n      }, [editor, commandsRegistered]);\n\n      // Re-render when the selection changes to ensure components like toggles are updated.\n      useEffect(() => {\n        const unregister = editor.registerUpdateListener(({ tags }) => {\n          return editor.getEditorState().read(() => {\n            // Ignore selection updates related to collaboration\n            if (tags.has(\"collaboration\")) return;\n\n            rerender();\n          });\n        });\n\n        return unregister;\n      }, [editor, rerender]);\n\n      return (\n        <TooltipProvider>\n          <div\n            ref={forwardedRef}\n            role=\"toolbar\"\n            aria-label=\"Toolbar\"\n            aria-orientation=\"horizontal\"\n            className={cn(\"lb-root lb-lexical-toolbar\", className)}\n            {...props}\n          >\n            {applyToolbarSlot(before, slotProps)}\n            {applyToolbarSlot(children, slotProps)}\n            {applyToolbarSlot(after, slotProps)}\n          </div>\n        </TooltipProvider>\n      );\n    }\n  ),\n  {\n    /**\n     * A button for triggering actions.\n     *\n     * @example\n     * <Toolbar.Button name=\"Comment\" shortcut=\"Mod-Shift-E\" onClick={() => { ... }} />\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} />\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","cn","useLexicalComposerContext","useState","useEffect","mergeRegister","CAN_UNDO_COMMAND","COMMAND_PRIORITY_CRITICAL","CAN_REDO_COMMAND","jsxs","Fragment","UndoIcon","UNDO_COMMAND","RedoIcon","REDO_COMMAND","useIsCommandRegistered","FORMAT_TEXT_COMMAND","BoldIcon","isTextFormatActive","ItalicIcon","UnderlineIcon","StrikethroughIcon","CodeIcon","OPEN_FLOATING_COMPOSER_COMMAND","CommentIcon","createCommand","TextIcon","$setBlocksType","$getSelection","$createParagraphNode","H1Icon","isBlockNodeActive","$isHeadingNode","$createHeadingNode","H2Icon","H3Icon","BlockquoteIcon","$createQuoteNode","useLiveblocksUiConfig","useMemo","item","SelectPrimitive","SelectButton","FloatingToolbarExternal","CheckIcon","COMMAND_PRIORITY_LOW","TooltipProvider"],"mappings":"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"}