{"version":3,"file":"floating-toolbar.cjs","sources":["../../src/toolbar/floating-toolbar.tsx"],"sourcesContent":["import {\n  autoUpdate,\n  type DetectOverflowOptions,\n  flip,\n  hide,\n  inline,\n  limitShift,\n  offset,\n  shift,\n  size,\n  useFloating,\n  type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n  cn,\n  Portal,\n  TooltipProvider,\n  useInitial,\n  useRefs,\n} from \"@liveblocks/react-ui/_private\";\nimport { $getSelection, $isRangeSelection, FORMAT_TEXT_COMMAND } from \"lexical\";\nimport type {\n  ComponentProps,\n  FocusEvent as ReactFocusEvent,\n  PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\n\nimport { OPEN_FLOATING_COMPOSER_COMMAND } from \"../comments/floating-composer\";\nimport { createDOMRange } from \"../create-dom-range\";\nimport { useIsCommandRegistered } from \"../is-command-registered\";\nimport type { FloatingPosition } from \"../types\";\nimport { useRootElement } from \"../use-root-element\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\nimport {\n  applyToolbarSlot,\n  Toolbar,\n  type ToolbarSlot,\n  type ToolbarSlotProps,\n} from \"./toolbar\";\n\nexport interface FloatingToolbarProps extends Omit<\n  ComponentProps<\"div\">,\n  \"children\"\n> {\n  /**\n   * The vertical position of the floating toolbar.\n   */\n  position?: FloatingPosition;\n\n  /**\n   * The vertical offset of the floating toolbar from the selection.\n   */\n  offset?: number;\n\n  /**\n   * The content of the floating 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 floating toolbar.\n   */\n  before?: ToolbarSlot;\n\n  /**\n   * The content to display at the end of the floating toolbar.\n   */\n  after?: ToolbarSlot;\n}\n\nexport const FLOATING_TOOLBAR_COLLISION_PADDING = 10;\nconst FLOATING_TOOLBAR_OPEN_DELAY = 50;\n\nfunction DefaultFloatingToolbarContent() {\n  const supportsTextFormat = useIsCommandRegistered(FORMAT_TEXT_COMMAND);\n  const supportsThread = useIsCommandRegistered(OPEN_FLOATING_COMPOSER_COMMAND);\n\n  return (\n    <>\n      {supportsTextFormat ? (\n        <>\n          <Toolbar.BlockSelector />\n          <Toolbar.SectionInline />\n        </>\n      ) : null}\n      {supportsThread ? (\n        <>\n          <Toolbar.Separator />\n          <Toolbar.SectionCollaboration />\n        </>\n      ) : null}\n    </>\n  );\n}\n\n/**\n * A floating toolbar attached to the selection and containing actions and values related to the editor.\n *\n * @example\n * <FloatingToolbar />\n *\n * @example\n * <FloatingToolbar>\n *   <Toolbar.BlockSelector />\n *   <Toolbar.Separator />\n *   <Toolbar.SectionInline />\n *   <Toolbar.Separator />\n *   <Toolbar.Button name=\"Custom action\" onClick={() => { ... }} icon={<Icon.QuestionMark />} />\n * </FloatingToolbar>\n */\nexport const FloatingToolbar = Object.assign(\n  forwardRef<HTMLDivElement, FloatingToolbarProps>(\n    (\n      {\n        children = DefaultFloatingToolbarContent,\n        before,\n        after,\n        position = \"top\",\n        offset: sideOffset = 6,\n        onPointerDown,\n        onFocus,\n        onBlur,\n        className,\n        ...props\n      },\n      forwardedRef\n    ) => {\n      const toolbarRef = useRef<HTMLDivElement>(null);\n      const externalIds = useInitial<Set<string>>(() => new Set());\n      const [isPointerDown, setPointerDown] = useState(false);\n      const [editor] = useLexicalComposerContext();\n      const root = useRootElement();\n      const [isFocused, setFocused] = useState(false);\n      const [isManuallyClosed, setManuallyClosed] = useState(false);\n      const [hasSelectionRange, setHasSelectionRange] = useState(false);\n\n      const isOpen =\n        isFocused && !isPointerDown && hasSelectionRange && !isManuallyClosed;\n      const [delayedIsOpen, setDelayedIsOpen] = useState(isOpen);\n      const delayedIsOpenTimeoutRef = useRef<number>();\n\n      // Reset the manually closed state when there's another change\n      useEffect(() => {\n        setManuallyClosed(false);\n      }, [isFocused, hasSelectionRange, editor]);\n\n      // Don't close when the focus moves from the editor to the toolbar\n      useEffect(() => {\n        if (!root) {\n          return;\n        }\n\n        const handleFocus = () => {\n          setFocused(true);\n        };\n\n        const handleBlur = (event: FocusEvent) => {\n          if (\n            event.relatedTarget &&\n            toolbarRef.current?.contains(event.relatedTarget as Node)\n          ) {\n            return;\n          }\n\n          if (event.relatedTarget === root) {\n            return;\n          }\n\n          for (const externalId of externalIds) {\n            if (\n              document\n                .getElementById(externalId)\n                ?.contains(event.relatedTarget as Node)\n            ) {\n              return;\n            }\n          }\n\n          setFocused(false);\n        };\n\n        root.addEventListener(\"focus\", handleFocus);\n        root.addEventListener(\"blur\", handleBlur);\n\n        return () => {\n          root.removeEventListener(\"focus\", handleFocus);\n          root.removeEventListener(\"blur\", handleBlur);\n        };\n      }, [root, externalIds]);\n\n      const handleFocus = useCallback(\n        (event: ReactFocusEvent<HTMLDivElement>) => {\n          onFocus?.(event);\n\n          if (!event.isDefaultPrevented()) {\n            setFocused(true);\n          }\n        },\n        [onFocus]\n      );\n\n      // Close the toolbar when the it loses focus to something else than the editor\n      const handleBlur = useCallback(\n        (event: ReactFocusEvent<HTMLDivElement>) => {\n          onBlur?.(event);\n\n          if (!event.isDefaultPrevented()) {\n            if (\n              event.relatedTarget &&\n              toolbarRef.current?.contains(event.relatedTarget as Node)\n            ) {\n              return;\n            }\n\n            if (event.relatedTarget === root) {\n              return;\n            }\n\n            for (const externalId of externalIds) {\n              if (\n                document\n                  .getElementById(externalId)\n                  ?.contains(event.relatedTarget as Node)\n              ) {\n                return;\n              }\n            }\n\n            setFocused(false);\n          }\n        },\n        [onBlur, root, externalIds]\n      );\n\n      // Delay the opening of the toolbar to avoid flickering issues\n      useEffect(() => {\n        if (isOpen) {\n          delayedIsOpenTimeoutRef.current = window.setTimeout(() => {\n            setDelayedIsOpen(true);\n          }, FLOATING_TOOLBAR_OPEN_DELAY);\n        } else {\n          setDelayedIsOpen(false);\n        }\n\n        return () => {\n          window.clearTimeout(delayedIsOpenTimeoutRef.current);\n        };\n      }, [isOpen]);\n\n      const floatingOptions: UseFloatingOptions = useMemo(() => {\n        const detectOverflowOptions: DetectOverflowOptions = {\n          padding: FLOATING_TOOLBAR_COLLISION_PADDING,\n        };\n\n        return {\n          strategy: \"fixed\",\n          placement: position,\n          middleware: [\n            inline(detectOverflowOptions),\n            flip({ ...detectOverflowOptions, crossAxis: false }),\n            hide(detectOverflowOptions),\n            shift({\n              ...detectOverflowOptions,\n              limiter: limitShift(),\n            }),\n            offset(sideOffset),\n            size(detectOverflowOptions),\n          ],\n          whileElementsMounted: (...args) => {\n            return autoUpdate(...args, {\n              animationFrame: true,\n            });\n          },\n        };\n      }, [position, sideOffset]);\n      const {\n        refs: { setReference, setFloating },\n        strategy,\n        x,\n        y,\n        isPositioned,\n      } = useFloating({\n        ...floatingOptions,\n        open: delayedIsOpen,\n      });\n      const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n\n      const handlePointerDown = useCallback(\n        (event: ReactPointerEvent<HTMLDivElement>) => {\n          onPointerDown?.(event);\n\n          event.stopPropagation();\n\n          // Prevent the toolbar from closing when clicking on the toolbar itself\n          if (event.target === toolbarRef.current) {\n            event.preventDefault();\n          }\n        },\n        [onPointerDown]\n      );\n\n      useEffect(() => {\n        const handlePointerDown = () => {\n          setPointerDown(true);\n        };\n        const handlePointerUp = () => {\n          setPointerDown(false);\n        };\n\n        if (!root) {\n          return;\n        }\n\n        root.addEventListener(\"pointerdown\", handlePointerDown);\n        document.addEventListener(\"pointercancel\", handlePointerUp);\n        document.addEventListener(\"pointerup\", handlePointerUp);\n\n        return () => {\n          root.removeEventListener(\"pointerdown\", handlePointerDown);\n          document.removeEventListener(\"pointercancel\", handlePointerUp);\n          document.removeEventListener(\"pointerup\", handlePointerUp);\n        };\n      }, [root]);\n\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            setManuallyClosed(false);\n\n            const selection = $getSelection();\n            if (!$isRangeSelection(selection) || selection.isCollapsed()) {\n              setHasSelectionRange(false);\n              setReference(null);\n              return;\n            }\n\n            const { anchor, focus } = selection;\n\n            const range = createDOMRange(\n              editor,\n              anchor.getNode(),\n              anchor.offset,\n              focus.getNode(),\n              focus.offset\n            );\n\n            setHasSelectionRange(true);\n            setReference(range);\n          });\n        });\n\n        return unregister;\n      }, [editor, setReference]);\n\n      useEffect(() => {\n        const root = editor.getRootElement();\n\n        if (!root || !delayedIsOpen) {\n          return;\n        }\n\n        const handleKeyDown = (event: KeyboardEvent) => {\n          if (event.target !== root && event.defaultPrevented) {\n            return;\n          }\n\n          if (event.key === \"Escape\") {\n            event.preventDefault();\n            event.stopPropagation();\n\n            editor.focus();\n            setManuallyClosed(true);\n          }\n        };\n\n        root.addEventListener(\"keydown\", handleKeyDown);\n\n        return () => {\n          root.removeEventListener(\"keydown\", handleKeyDown);\n        };\n      }, [editor, delayedIsOpen]);\n\n      const close = useCallback(() => {\n        editor.focus();\n        setManuallyClosed(true);\n      }, [editor, setManuallyClosed]);\n\n      const registerExternal = useCallback(\n        (id: string) => {\n          externalIds.add(id);\n\n          return () => {\n            externalIds.delete(id);\n          };\n        },\n        [externalIds]\n      );\n\n      if (!delayedIsOpen) {\n        return null;\n      }\n\n      const slotProps: ToolbarSlotProps = { editor };\n\n      return (\n        <Portal asChild>\n          <div\n            role=\"toolbar\"\n            aria-label=\"Floating toolbar\"\n            aria-orientation=\"horizontal\"\n            className={cn(\n              \"lb-root lb-portal lb-elevation lb-lexical-floating-toolbar lb-lexical-toolbar\",\n              className\n            )}\n            ref={mergedRefs}\n            style={{\n              position: strategy,\n              top: 0,\n              left: 0,\n              transform: isPositioned\n                ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n                : \"translate3d(0, -200%, 0)\",\n              minWidth: \"max-content\",\n            }}\n            onPointerDown={handlePointerDown}\n            onFocus={handleFocus}\n            onBlur={handleBlur}\n            {...props}\n          >\n            <TooltipProvider>\n              <FloatingToolbarContext.Provider\n                value={{ close, registerExternal }}\n              >\n                {applyToolbarSlot(before, slotProps)}\n                {applyToolbarSlot(children, slotProps)}\n                {applyToolbarSlot(after, slotProps)}\n              </FloatingToolbarContext.Provider>\n            </TooltipProvider>\n          </div>\n        </Portal>\n      );\n    }\n  ),\n  {\n    /**\n     * A component that can be wrapped around elements which are rendered outside of the floating\n     * toolbar (e.g. portals) to prevent the toolbar from closing when clicking/focusing within them.\n     *\n     * @example\n     * <FloatingToolbar>\n     *   <Popover.Root>\n     *     <Popover.Trigger asChild>\n     *       <Toolbar.Button>Open popover</Toolbar.Button>\n     *     </Popover.Trigger>\n     *     <Popover.Portal>\n     *       <FloatingToolbar.External>\n     *         <Popover.Content>\n     *           This popover is rendered outside of the floating toolbar, but the toolbar will not close when clicking/focusing within it.\n     *         </Popover.Content>\n     *       </FloatingToolbar.External>\n     *     </Popover.Portal>\n     *   </Popover.Root>\n     * </FloatingToolbar>\n     */\n    External: FloatingToolbarExternal,\n  }\n);\n"],"names":["useIsCommandRegistered","FORMAT_TEXT_COMMAND","OPEN_FLOATING_COMPOSER_COMMAND","jsxs","Fragment","jsx","Toolbar","forwardRef","useRef","useInitial","useState","useLexicalComposerContext","useRootElement","useEffect","handleFocus","handleBlur","useCallback","useMemo","inline","flip","hide","shift","limitShift","offset","size","autoUpdate","useFloating","useRefs","handlePointerDown","$getSelection","$isRangeSelection","createDOMRange","root","Portal","cn","TooltipProvider","FloatingToolbarContext","applyToolbarSlot","FloatingToolbarExternal"],"mappings":"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"}