{"version":3,"sources":["../src/createVirtualElement.ts","../src/hooks/useFloatingToolbar.ts","../src/hooks/useVirtualFloating.ts","../src/libs/floating-ui.ts","../src/utils/getBoundingClientRect.ts","../src/utils/makeClientRect.ts","../src/utils/mergeClientRects.ts","../src/utils/createVirtualRef.ts","../src/utils/getDOMSelectionBoundingClientRect.ts","../src/utils/getRangeBoundingClientRect.ts","../src/utils/getSelectionBoundingClientRect.ts"],"sourcesContent":["import type { ClientRectObject } from '@floating-ui/core';\nimport type { VirtualElement } from '@floating-ui/react';\n\nexport const getDefaultBoundingClientRect = (): ClientRectObject => ({\n  bottom: 9999,\n  height: 0,\n  left: -9999,\n  right: 9999,\n  top: -9999,\n  width: 0,\n  x: 0,\n  y: 0,\n});\n\nexport const createVirtualElement = (): VirtualElement => ({\n  getBoundingClientRect: getDefaultBoundingClientRect,\n});\n","import React from 'react';\n\nimport { mergeProps } from '@udecode/plate';\nimport {\n  useEditorReadOnly,\n  useEditorRef,\n  useEditorSelector,\n  useFocused,\n  useOnClickOutside,\n} from '@udecode/plate/react';\n\nimport {\n  type UseVirtualFloatingOptions,\n  getSelectionBoundingClientRect,\n  useVirtualFloating,\n} from '..';\n\nexport type FloatingToolbarState = {\n  floatingOptions?: UseVirtualFloatingOptions;\n  hideToolbar?: boolean;\n  showWhenReadOnly?: boolean;\n};\n\nexport const useFloatingToolbarState = ({\n  editorId,\n  floatingOptions,\n  focusedEditorId,\n  hideToolbar,\n  showWhenReadOnly,\n}: {\n  editorId: string;\n  focusedEditorId: string | null;\n} & FloatingToolbarState) => {\n  const editor = useEditorRef();\n  const selectionExpanded = useEditorSelector(\n    () => editor.api.isExpanded(),\n    []\n  );\n  const selectionText = useEditorSelector(() => editor.api.string(), []);\n  const readOnly = useEditorReadOnly();\n\n  const focused = useFocused();\n\n  const [open, setOpen] = React.useState(false);\n  const [waitForCollapsedSelection, setWaitForCollapsedSelection] =\n    React.useState(false);\n  const [mousedown, setMousedown] = React.useState(false);\n\n  const floating = useVirtualFloating(\n    mergeProps(\n      {\n        open,\n        getBoundingClientRect: () => getSelectionBoundingClientRect(editor),\n        onOpenChange: setOpen,\n      },\n      floatingOptions\n    )\n  );\n\n  return {\n    editorId,\n    floating,\n    focused,\n    focusedEditorId,\n    hideToolbar,\n    mousedown,\n    open,\n    readOnly,\n    selectionExpanded,\n    selectionText,\n    setMousedown,\n    setOpen,\n    setWaitForCollapsedSelection,\n    showWhenReadOnly,\n    waitForCollapsedSelection,\n  };\n};\n\nexport const useFloatingToolbar = ({\n  editorId,\n  floating,\n  focusedEditorId,\n  hideToolbar,\n  mousedown,\n  open,\n  readOnly,\n  selectionExpanded,\n  selectionText,\n  setMousedown,\n  setOpen,\n  setWaitForCollapsedSelection,\n  showWhenReadOnly,\n  waitForCollapsedSelection,\n}: ReturnType<typeof useFloatingToolbarState>) => {\n  // On refocus, the editor keeps the previous selection,\n  // so we need to wait it's collapsed at the new position before displaying the floating toolbar.\n  React.useEffect(() => {\n    if (!(editorId === focusedEditorId)) {\n      setWaitForCollapsedSelection(true);\n    }\n    if (!selectionExpanded) {\n      setWaitForCollapsedSelection(false);\n    }\n  }, [\n    editorId,\n    focusedEditorId,\n    selectionExpanded,\n    setWaitForCollapsedSelection,\n  ]);\n\n  React.useEffect(() => {\n    const mouseup = () => setMousedown(false);\n    const mousedown = () => setMousedown(true);\n\n    document.addEventListener('mouseup', mouseup);\n    document.addEventListener('mousedown', mousedown);\n\n    return () => {\n      document.removeEventListener('mouseup', mouseup);\n      document.removeEventListener('mousedown', mousedown);\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  React.useEffect(() => {\n    if (\n      !selectionExpanded ||\n      !selectionText ||\n      (mousedown && !open) ||\n      hideToolbar ||\n      (readOnly && !showWhenReadOnly)\n    ) {\n      setOpen(false);\n    } else if (\n      selectionText &&\n      selectionExpanded &&\n      (!waitForCollapsedSelection || readOnly)\n    ) {\n      setOpen(true);\n    }\n  }, [\n    setOpen,\n    editorId,\n    focusedEditorId,\n    hideToolbar,\n    showWhenReadOnly,\n    selectionExpanded,\n    selectionText,\n    mousedown,\n    waitForCollapsedSelection,\n    open,\n    readOnly,\n  ]);\n\n  const { update } = floating;\n\n  useEditorSelector(() => {\n    update?.();\n  }, [update]);\n\n  const clickOutsideRef = useOnClickOutside(\n    () => {\n      setOpen(false);\n    },\n    {\n      ignoreClass: 'ignore-click-outside/toolbar',\n    }\n  );\n\n  return {\n    clickOutsideRef,\n    hidden: !open,\n    props: {\n      style: floating.style,\n    },\n    ref: floating.refs.setFloating,\n  };\n};\n","import React from 'react';\n\nimport type { ClientRectObject } from '@floating-ui/core';\n\nimport { useIsomorphicLayoutEffect } from '@udecode/plate/react';\n\nimport {\n  createVirtualElement,\n  getDefaultBoundingClientRect,\n} from '../createVirtualElement';\nimport {\n  type ReferenceType,\n  type UseFloatingOptions,\n  type UseFloatingReturn,\n  type VirtualElement,\n  autoUpdate,\n  useFloating,\n} from '../libs/floating-ui';\n\nexport interface UseVirtualFloatingOptions extends Partial<UseFloatingOptions> {\n  open?: boolean;\n  getBoundingClientRect?: () => ClientRectObject;\n}\n\nexport interface UseVirtualFloatingReturn<\n  RT extends ReferenceType = ReferenceType,\n> extends UseFloatingReturn<RT> {\n  style: React.CSSProperties;\n  virtualElementRef: React.MutableRefObject<VirtualElement>;\n}\n\n/**\n * `useFloating` with a controlled virtual element. Used to follow cursor\n * position.\n *\n * Default options:\n *\n * - `whileElementsMounted: autoUpdate`\n *\n * Additional options:\n *\n * - `getBoundingClientRect` to get the bounding client rect.\n * - `hidden` to hide the floating element\n *\n * Additional returns:\n *\n * - `style` to apply to the floating element\n * - `virtualElementRef`\n *\n * @see useFloating\n * @see https://floating-ui.com/docs/react-dom#virtual-element\n */\nexport const useVirtualFloating = <RT extends ReferenceType = ReferenceType>({\n  getBoundingClientRect = getDefaultBoundingClientRect,\n  ...floatingOptions\n}: UseVirtualFloatingOptions): UseVirtualFloatingReturn<RT> => {\n  const virtualElementRef = React.useRef<RT>(createVirtualElement() as RT);\n  const [visible, setVisible] = React.useState(true);\n\n  const floatingResult = useFloating<RT>({\n    // update on scroll and resize\n    whileElementsMounted: autoUpdate,\n    ...floatingOptions,\n  });\n\n  const { middlewareData, refs, strategy, update, x, y } = floatingResult;\n\n  useIsomorphicLayoutEffect(() => {\n    virtualElementRef.current.getBoundingClientRect = getBoundingClientRect;\n  }, [getBoundingClientRect, update]);\n\n  useIsomorphicLayoutEffect(() => {\n    refs.setReference(virtualElementRef.current);\n  }, [refs]);\n\n  useIsomorphicLayoutEffect(() => {\n    if (!middlewareData?.hide) return;\n\n    const { referenceHidden } = middlewareData.hide;\n\n    setVisible(!referenceHidden);\n  }, [middlewareData.hide]);\n\n  return {\n    ...floatingResult,\n    style: {\n      display: floatingOptions.open === false ? 'none' : undefined,\n      left: x ?? 0,\n      position: strategy,\n      top: y ?? 0,\n      visibility: visible ? undefined : 'hidden',\n    },\n    virtualElementRef,\n  };\n};\n","export type {\n  AlignedPlacement,\n  AutoUpdateOptions,\n  Axis,\n  Boundary,\n  ClientRectObject,\n  ComputePositionConfig,\n  ComputePositionReturn,\n  ContextData,\n  Coords,\n  DetectOverflowOptions,\n  Dimensions,\n  ElementContext,\n  ElementProps,\n  ElementRects,\n  Elements,\n  ExtendedRefs,\n  FloatingContext,\n  FloatingElement,\n  FloatingEvents,\n  FloatingNodeType,\n  FloatingTreeType,\n  Length,\n  Middleware,\n  MiddlewareData,\n  MiddlewareReturn,\n  NodeScroll,\n  Padding,\n  Placement,\n  Platform,\n  Rect,\n  ReferenceElement,\n  ReferenceType,\n  RootBoundary,\n  Side,\n  SideObject,\n  SizeOptions,\n  Strategy,\n  UseFloatingData,\n  UseFloatingOptions,\n  UseFloatingReturn,\n  VirtualElement,\n} from '@floating-ui/react';\n\nexport {\n  // dom\n  arrow,\n  autoPlacement,\n  autoUpdate,\n  computePosition,\n  detectOverflow,\n  flip,\n  FloatingArrow,\n  FloatingDelayGroup,\n  FloatingFocusManager,\n  FloatingNode,\n  FloatingOverlay,\n  FloatingPortal,\n  FloatingTree,\n  getOverflowAncestors,\n  hide,\n  // core\n  inline,\n  limitShift,\n  offset,\n  // react\n  safePolygon,\n  shift,\n  size,\n  useClick,\n  useDelayGroup,\n  useDelayGroupContext,\n  useDismiss,\n  useFloating,\n  useFloatingNodeId,\n  useFloatingParentNodeId,\n  useFloatingPortalNode,\n  useFloatingTree,\n  useFocus,\n  useHover,\n  useId,\n  useInteractions,\n  useListNavigation,\n  useRole,\n  useTypeahead,\n} from '@floating-ui/react';\n","import {\n  type Editor,\n  type TLocation,\n  type TRange,\n  PathApi,\n} from '@udecode/plate';\n\nimport { mergeClientRects } from './mergeClientRects';\n\nexport const getBoundingClientRect = (\n  editor: Editor,\n  at?: TLocation | TLocation[]\n): DOMRect | undefined => {\n  const atRanges: TRange[] = (() => {\n    if (!at) return [editor.selection].filter(Boolean) as TRange[];\n\n    const atArray = Array.isArray(at) && !PathApi.isPath(at) ? at : [at];\n\n    return atArray.map((location) => editor.api.range(location)!);\n  })();\n\n  const clientRects = atRanges\n    .map((range) => editor.api.toDOMRange(range)?.getBoundingClientRect())\n    .filter(Boolean) as DOMRect[];\n\n  if (clientRects.length === 0) return undefined;\n\n  return mergeClientRects(clientRects);\n};\n","export const makeClientRect = ({\n  bottom,\n  left,\n  right,\n  top,\n}: {\n  bottom: number;\n  left: number;\n  right: number;\n  top: number;\n}): DOMRect => {\n  const width = right - left;\n  const height = bottom - top;\n\n  const props: Omit<DOMRect, 'toJSON'> = {\n    bottom,\n    height,\n    left,\n    right,\n    top,\n    width,\n    x: left,\n    y: top,\n  };\n\n  return {\n    ...props,\n    toJSON: () => props,\n  };\n};\n","import { makeClientRect } from './makeClientRect';\n\nexport const mergeClientRects = (clientRects: DOMRect[]): DOMRect => {\n  if (clientRects.length === 0) {\n    throw new Error('clientRects should not be empty');\n  }\n\n  return makeClientRect({\n    bottom: Math.max(...clientRects.map((rect) => rect.bottom)),\n    left: Math.min(...clientRects.map((rect) => rect.left)),\n    right: Math.max(...clientRects.map((rect) => rect.right)),\n    top: Math.min(...clientRects.map((rect) => rect.top)),\n  });\n};\n","import type React from 'react';\n\nimport type { Editor, TLocation } from '@udecode/plate';\n\nimport { getBoundingClientRect } from './getBoundingClientRect';\n\nexport type VirtualRef = React.RefObject<Pick<\n  HTMLElement,\n  'getBoundingClientRect'\n> | null>;\n\nexport const createVirtualRef = (\n  editor: Editor,\n  at?: TLocation | TLocation[],\n  {\n    fallbackRect,\n  }: {\n    fallbackRect?: ClientRect;\n  } = {}\n): VirtualRef => ({\n  current: {\n    getBoundingClientRect: () => {\n      const rect = getBoundingClientRect(editor, at) || fallbackRect;\n\n      if (!rect) {\n        throw new Error(\n          'Could not get the bounding client rect of the location. Please provide a fallbackRect.'\n        );\n      }\n\n      return rect;\n    },\n  },\n});\n","import type { ClientRectObject } from '@floating-ui/core';\n\nimport { getDefaultBoundingClientRect } from '../createVirtualElement';\n\n/** Get bounding client rect of the editor selection */\nexport const getDOMSelectionBoundingClientRect = (): ClientRectObject => {\n  const domSelection = window.getSelection();\n\n  if (!domSelection || domSelection.rangeCount < 1) {\n    return getDefaultBoundingClientRect();\n  }\n\n  const domRange = domSelection.getRangeAt(0);\n\n  return domRange.getBoundingClientRect();\n};\n","import type { ClientRectObject } from '@floating-ui/core';\nimport type { Editor, TRange } from '@udecode/plate';\n\nimport { getDefaultBoundingClientRect } from '../createVirtualElement';\n\n/** Get bounding client rect by slate range */\nexport const getRangeBoundingClientRect = (\n  editor: Editor,\n  at: TRange | null\n): ClientRectObject => {\n  if (!at) return getDefaultBoundingClientRect();\n\n  const domRange = editor.api.toDOMRange(at);\n\n  if (!domRange) return getDefaultBoundingClientRect();\n\n  return domRange.getBoundingClientRect();\n};\n","import type { ClientRectObject } from '@floating-ui/core';\nimport type { PlateEditor } from '@udecode/plate/react';\n\nimport { getDefaultBoundingClientRect } from '../createVirtualElement';\nimport { getRangeBoundingClientRect } from './getRangeBoundingClientRect';\n\n/** Get bounding client rect of the editor selection */\nexport const getSelectionBoundingClientRect = (\n  editor: PlateEditor\n): ClientRectObject => {\n  if (editor.api.isExpanded()) {\n    return getRangeBoundingClientRect(editor, editor.selection);\n  }\n\n  return getDefaultBoundingClientRect();\n};\n"],"mappings":"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","names":["mousedown","React","getBoundingClientRect","React"]}