@yoopta/themes-shadcn 6.0.0-beta.14 → 6.0.0-beta.15

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 (109) hide show
  1. package/dist/table/components/row-controls.d.ts.map +1 -1
  2. package/package.json +2 -2
  3. package/dist/accordion.js.map +0 -1
  4. package/dist/blockquote.js.map +0 -1
  5. package/dist/callout.js.map +0 -1
  6. package/dist/carousel.js.map +0 -1
  7. package/dist/chunks/Combination-2202c874.js +0 -1080
  8. package/dist/chunks/Combination-2202c874.js.map +0 -1
  9. package/dist/chunks/_tslib-514d60fe.js +0 -67
  10. package/dist/chunks/_tslib-514d60fe.js.map +0 -1
  11. package/dist/chunks/arrow-right-cc37c75c.js +0 -30
  12. package/dist/chunks/arrow-right-cc37c75c.js.map +0 -1
  13. package/dist/chunks/button-f9af7cb3.js +0 -76
  14. package/dist/chunks/button-f9af7cb3.js.map +0 -1
  15. package/dist/chunks/card-29720641.js +0 -38
  16. package/dist/chunks/card-29720641.js.map +0 -1
  17. package/dist/chunks/check-530fff0e.js +0 -14
  18. package/dist/chunks/check-530fff0e.js.map +0 -1
  19. package/dist/chunks/chevron-down-544d1acd.js +0 -16
  20. package/dist/chunks/chevron-down-544d1acd.js.map +0 -1
  21. package/dist/chunks/chevron-up-053cba03.js +0 -14
  22. package/dist/chunks/chevron-up-053cba03.js.map +0 -1
  23. package/dist/chunks/code-2ff9cc0c.js +0 -17
  24. package/dist/chunks/code-2ff9cc0c.js.map +0 -1
  25. package/dist/chunks/createLucideIcon-02eb7854.js +0 -95
  26. package/dist/chunks/createLucideIcon-02eb7854.js.map +0 -1
  27. package/dist/chunks/dropdown-menu-ac777fdc.js +0 -1165
  28. package/dist/chunks/dropdown-menu-ac777fdc.js.map +0 -1
  29. package/dist/chunks/external-link-43895ded.js +0 -18
  30. package/dist/chunks/external-link-43895ded.js.map +0 -1
  31. package/dist/chunks/file-text-99674d8d.js +0 -20
  32. package/dist/chunks/file-text-99674d8d.js.map +0 -1
  33. package/dist/chunks/hover-card-134f053d.js +0 -257
  34. package/dist/chunks/hover-card-134f053d.js.map +0 -1
  35. package/dist/chunks/index-056b596e.js +0 -16
  36. package/dist/chunks/index-056b596e.js.map +0 -1
  37. package/dist/chunks/index-35823769.js +0 -222
  38. package/dist/chunks/index-35823769.js.map +0 -1
  39. package/dist/chunks/index-41c4abc4.js +0 -3805
  40. package/dist/chunks/index-41c4abc4.js.map +0 -1
  41. package/dist/chunks/index-454935af.js +0 -71
  42. package/dist/chunks/index-454935af.js.map +0 -1
  43. package/dist/chunks/index-ae9b48d5.js +0 -12
  44. package/dist/chunks/index-ae9b48d5.js.map +0 -1
  45. package/dist/chunks/index-b8a83ba5.js +0 -335
  46. package/dist/chunks/index-b8a83ba5.js.map +0 -1
  47. package/dist/chunks/index-b8f2908d.js +0 -40
  48. package/dist/chunks/index-b8f2908d.js.map +0 -1
  49. package/dist/chunks/index-c655a86f.js +0 -7
  50. package/dist/chunks/index-c655a86f.js.map +0 -1
  51. package/dist/chunks/index-c90e54a4.js +0 -190
  52. package/dist/chunks/index-c90e54a4.js.map +0 -1
  53. package/dist/chunks/index-cf5f0d71.js +0 -2907
  54. package/dist/chunks/index-cf5f0d71.js.map +0 -1
  55. package/dist/chunks/index-d9171717.js +0 -13
  56. package/dist/chunks/index-d9171717.js.map +0 -1
  57. package/dist/chunks/index-dd0fd848.js +0 -70
  58. package/dist/chunks/index-dd0fd848.js.map +0 -1
  59. package/dist/chunks/input-5608c2c9.js +0 -13
  60. package/dist/chunks/input-5608c2c9.js.map +0 -1
  61. package/dist/chunks/label-c9152e49.js +0 -168
  62. package/dist/chunks/label-c9152e49.js.map +0 -1
  63. package/dist/chunks/language-select-bdc50f20.js +0 -44
  64. package/dist/chunks/language-select-bdc50f20.js.map +0 -1
  65. package/dist/chunks/play-1a34ad05.js +0 -16
  66. package/dist/chunks/play-1a34ad05.js.map +0 -1
  67. package/dist/chunks/plus-fcea2532.js +0 -17
  68. package/dist/chunks/plus-fcea2532.js.map +0 -1
  69. package/dist/chunks/popover-ef29b0ac.js +0 -300
  70. package/dist/chunks/popover-ef29b0ac.js.map +0 -1
  71. package/dist/chunks/scroll-area-17d8c584.js +0 -726
  72. package/dist/chunks/scroll-area-17d8c584.js.map +0 -1
  73. package/dist/chunks/select-98610101.js +0 -1213
  74. package/dist/chunks/select-98610101.js.map +0 -1
  75. package/dist/chunks/separator-9e6aa45b.js +0 -172
  76. package/dist/chunks/separator-9e6aa45b.js.map +0 -1
  77. package/dist/chunks/sparkles-8922a4af.js +0 -26
  78. package/dist/chunks/sparkles-8922a4af.js.map +0 -1
  79. package/dist/chunks/style-inject.es-746bb8ed.js +0 -29
  80. package/dist/chunks/style-inject.es-746bb8ed.js.map +0 -1
  81. package/dist/chunks/tabs-9cfbd3cc.js +0 -204
  82. package/dist/chunks/tabs-9cfbd3cc.js.map +0 -1
  83. package/dist/chunks/tooltip-f1e02ae0.js +0 -800
  84. package/dist/chunks/tooltip-f1e02ae0.js.map +0 -1
  85. package/dist/chunks/trash-2-be728dd2.js +0 -20
  86. package/dist/chunks/trash-2-be728dd2.js.map +0 -1
  87. package/dist/chunks/upload-0f56ec3e.js +0 -44
  88. package/dist/chunks/upload-0f56ec3e.js.map +0 -1
  89. package/dist/chunks/utils-131071a4.js +0 -2500
  90. package/dist/chunks/utils-131071a4.js.map +0 -1
  91. package/dist/chunks/x-2f6cf742.js +0 -17
  92. package/dist/chunks/x-2f6cf742.js.map +0 -1
  93. package/dist/code-group.js.map +0 -1
  94. package/dist/code.js.map +0 -1
  95. package/dist/divider.js.map +0 -1
  96. package/dist/embed.js.map +0 -1
  97. package/dist/file.js.map +0 -1
  98. package/dist/headings.js.map +0 -1
  99. package/dist/image.js.map +0 -1
  100. package/dist/index.js.map +0 -1
  101. package/dist/link.js.map +0 -1
  102. package/dist/lists.js.map +0 -1
  103. package/dist/mention.js.map +0 -1
  104. package/dist/paragraph.js.map +0 -1
  105. package/dist/steps.js.map +0 -1
  106. package/dist/table-of-contents.js.map +0 -1
  107. package/dist/table.js.map +0 -1
  108. package/dist/tabs.js.map +0 -1
  109. package/dist/video.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"mention.js","sources":["../../../../node_modules/lucide-react/src/icons/at-sign.ts","../../../../node_modules/lucide-react/src/icons/hash.ts","../../../../node_modules/lucide-react/src/icons/mail.ts","../src/mention/elements/mention/mention-avatar.tsx","../src/mention/types.ts","../src/mention/elements/mention/mention-element.tsx","../../../../node_modules/slate/src/interfaces/path-ref.ts","../../../../node_modules/slate/src/interfaces/path.ts","../../../../../../../.yarn/berry/cache/@babel-runtime-npm-7.23.2-d013d6cf7e-10.zip/node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../../../../.yarn/berry/cache/@babel-runtime-npm-7.23.2-d013d6cf7e-10.zip/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../../../../../.yarn/berry/cache/@babel-runtime-npm-7.23.2-d013d6cf7e-10.zip/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../../../../../.yarn/berry/cache/@babel-runtime-npm-7.23.2-d013d6cf7e-10.zip/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../../../../.yarn/berry/cache/@babel-runtime-npm-7.23.2-d013d6cf7e-10.zip/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../../../../.yarn/berry/cache/@babel-runtime-npm-7.23.2-d013d6cf7e-10.zip/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../node_modules/slate/src/interfaces/range.ts","../../../../node_modules/slate/src/interfaces/element.ts","../../../../node_modules/slate/src/interfaces/node.ts","../../../../node_modules/slate/src/interfaces/operation.ts","../../../../node_modules/slate/src/utils/is-object.ts","../../../../node_modules/slate/src/utils/deep-equal.ts","../../../../node_modules/slate/src/utils/get-default-insert-location.ts","../../../../node_modules/slate/src/utils/string.ts","../../../../node_modules/slate/src/editor/is-editor.ts","../../../../node_modules/slate/src/interfaces/editor.ts","../../../../node_modules/slate/src/interfaces/point.ts","../../../../node_modules/slate/src/interfaces/scrubber.ts","../../../../node_modules/slate/src/interfaces/text.ts","../../../../node_modules/slate/src/utils/modify.ts","../../../../node_modules/slate/src/interfaces/transforms/general.ts","../../../../node_modules/slate/src/interfaces/transforms/node.ts","../../../../node_modules/slate/src/interfaces/transforms/selection.ts","../../../../node_modules/slate/src/interfaces/transforms/text.ts","../../../../node_modules/slate/src/interfaces/transforms/index.ts","../../../plugins/mention/src/types.ts","../../../plugins/mention/src/commands/index.ts","../../../../node_modules/lodash/_freeGlobal.js","../../../../node_modules/lodash/_root.js","../../../../node_modules/lodash/_Symbol.js","../../../../node_modules/lodash/_getRawTag.js","../../../../node_modules/lodash/_baseGetTag.js","../../../../node_modules/is-hotkey/lib/index.js","../../../../node_modules/slate-dom/src/utils/dom.ts","../../../../node_modules/slate-dom/src/utils/environment.ts","../../../../node_modules/slate-dom/src/utils/key.ts","../../../../node_modules/slate-dom/src/utils/weak-maps.ts","../../../../node_modules/slate-dom/src/plugin/dom-editor.ts","../../../../node_modules/slate-dom/src/utils/hotkeys.ts","../../../../node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../../../../node_modules/@juggle/resize-observer/lib/utils/freeze.js","../../../../node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../../../../node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../../../../node_modules/@juggle/resize-observer/lib/utils/global.js","../../../../node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../../../../node_modules/slate-react/src/hooks/use-slate-static.tsx","../../../../node_modules/slate-react/src/plugin/react-editor.ts","../../../../node_modules/slate-react/src/components/restore-dom/restore-dom-manager.ts","../../../../node_modules/slate-react/src/components/restore-dom/restore-dom.tsx","../../../../node_modules/slate-react/src/utils/environment.ts","../../../plugins/mention/src/utils/index.ts","../../../plugins/mention/src/plugin/mention-plugin.tsx","../../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../../node_modules/@floating-ui/react/dist/floating-ui.react.mjs","../../../plugins/mention/src/hooks/use-mention-dropdown.ts","../src/mention/elements/mention/mention-item.tsx","../src/mention/elements/mention/mention-dropdown.tsx","../src/mention/index.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AtSign\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI0IiAvPgogIDxwYXRoIGQ9Ik0xNiA4djVhMyAzIDAgMCAwIDYgMHYtMWExMCAxMCAwIDEgMC00IDgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/at-sign\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AtSign = createLucideIcon('AtSign', [\n ['circle', { cx: '12', cy: '12', r: '4', key: '4exip2' }],\n ['path', { d: 'M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8', key: '7n84p3' }],\n]);\n\nexport default AtSign;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Hash\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8bGluZSB4MT0iNCIgeDI9IjIwIiB5MT0iOSIgeTI9IjkiIC8+CiAgPGxpbmUgeDE9IjQiIHgyPSIyMCIgeTE9IjE1IiB5Mj0iMTUiIC8+CiAgPGxpbmUgeDE9IjEwIiB4Mj0iOCIgeTE9IjMiIHkyPSIyMSIgLz4KICA8bGluZSB4MT0iMTYiIHgyPSIxNCIgeTE9IjMiIHkyPSIyMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/hash\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Hash = createLucideIcon('Hash', [\n ['line', { x1: '4', x2: '20', y1: '9', y2: '9', key: '4lhtct' }],\n ['line', { x1: '4', x2: '20', y1: '15', y2: '15', key: 'vyu0kd' }],\n ['line', { x1: '10', x2: '8', y1: '3', y2: '21', key: '1ggp8o' }],\n ['line', { x1: '16', x2: '14', y1: '3', y2: '21', key: 'weycgp' }],\n]);\n\nexport default Hash;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Mail\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHg9IjIiIHk9IjQiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Im0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/mail\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mail = createLucideIcon('Mail', [\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2', key: '18n3k1' }],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7', key: '1ocrg3' }],\n]);\n\nexport default Mail;\n","import { useMemo } from 'react';\n\nimport { cn } from '../../../utils';\n\ntype MentionAvatarSize = 'inline' | 'sm' | 'md' | 'lg';\n\ntype MentionAvatarProps = {\n name: string;\n avatar?: string;\n size?: MentionAvatarSize;\n className?: string;\n};\n\nconst sizeStyles: Record<MentionAvatarSize, { width: string; height: string; fontSize: string }> = {\n // Inline size uses em units to match parent text line height\n inline: { width: '1em', height: '1em', fontSize: '0.6em' },\n sm: { width: '20px', height: '20px', fontSize: '10px' },\n md: { width: '28px', height: '28px', fontSize: '11px' },\n lg: { width: '36px', height: '36px', fontSize: '12px' },\n};\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].slice(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nfunction stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i += 1) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash); // eslint-disable-line no-bitwise\n }\n\n const colors = [\n 'bg-red-500',\n 'bg-orange-500',\n 'bg-amber-500',\n 'bg-yellow-500',\n 'bg-lime-500',\n 'bg-green-500',\n 'bg-emerald-500',\n 'bg-teal-500',\n 'bg-cyan-500',\n 'bg-sky-500',\n 'bg-blue-500',\n 'bg-indigo-500',\n 'bg-violet-500',\n 'bg-purple-500',\n 'bg-fuchsia-500',\n 'bg-pink-500',\n 'bg-rose-500',\n ];\n\n return colors[Math.abs(hash) % colors.length];\n}\n\nexport const MentionAvatar = ({ name, avatar, size = 'inline', className }: MentionAvatarProps) => {\n const initials = useMemo(() => getInitials(name), [name]);\n const bgColor = useMemo(() => stringToColor(name), [name]);\n const styles = sizeStyles[size];\n\n if (avatar) {\n return (\n <img\n src={avatar}\n alt={name}\n style={{ width: styles.width, height: styles.height }}\n className={cn('rounded-full object-cover flex-shrink-0', className)}\n />\n );\n }\n\n return (\n <div\n style={{ width: styles.width, height: styles.height }}\n className={cn(\n 'rounded-full flex items-center justify-center font-medium text-white flex-shrink-0',\n bgColor,\n className,\n )}>\n {initials}\n </div>\n );\n};\n","import type { MentionItem, MentionType } from '@yoopta/mention';\n\nexport type MentionThemeConfig = {\n /** Show avatar in mention element */\n showAvatar?: boolean;\n /** Show type badge */\n showTypeBadge?: boolean;\n /** Custom colors per mention type */\n typeColors?: Partial<Record<MentionType, string>>;\n};\n\nexport type MentionItemRenderProps<TMeta = Record<string, unknown>> = {\n item: MentionItem<TMeta>;\n index: number;\n selected: boolean;\n onSelect: () => void;\n};\n\nexport const DEFAULT_TYPE_COLORS: Record<string, string> = {\n user: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n channel: 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200',\n page: 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200',\n custom: 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200',\n};\n","import { useState } from 'react';\nimport type { PluginElementRenderProps } from '@yoopta/editor';\nimport { Elements, useYooptaEditor } from '@yoopta/editor';\nimport type { MentionElementProps, MentionType } from '@yoopta/mention';\nimport copy from 'copy-to-clipboard';\nimport { AtSign, Check, Copy, ExternalLink, FileText, Hash, Mail, Trash2 } from 'lucide-react';\n\nimport { MentionAvatar } from './mention-avatar';\nimport { Button } from '../../../ui/button';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from '../../../ui/hover-card';\nimport { cn } from '../../../utils';\nimport { DEFAULT_TYPE_COLORS } from '../../types';\n\ntype MentionMeta = {\n url?: string;\n description?: string;\n email?: string;\n [key: string]: unknown;\n};\n\nconst TypeIcon = ({ type }: { type?: MentionType }) => {\n const iconClass = 'w-3.5 h-3.5';\n switch (type) {\n case 'user':\n return <AtSign className={iconClass} />;\n case 'channel':\n return <Hash className={iconClass} />;\n case 'page':\n return <FileText className={iconClass} />;\n default:\n return <AtSign className={iconClass} />;\n }\n};\n\nexport const MentionElement = (props: PluginElementRenderProps) => {\n const { attributes, children, element, blockId } = props;\n const editor = useYooptaEditor();\n const [copied, setCopied] = useState(false);\n\n const { id, name, avatar, type, meta } = element.props as MentionElementProps<MentionMeta>;\n const typeColor = type ? DEFAULT_TYPE_COLORS[type] ?? DEFAULT_TYPE_COLORS.custom : null;\n const mentionUrl = meta?.url;\n const description = meta?.description;\n\n const handleDelete = (e: React.MouseEvent) => {\n if (editor.readOnly) return;\n e.preventDefault();\n e.stopPropagation();\n\n const mentionPath = Elements.getElementPath(editor, {\n blockId,\n element,\n });\n\n if (!mentionPath) return;\n\n Elements.deleteElement(editor, {\n type: 'mention',\n path: mentionPath,\n blockId,\n });\n };\n\n const handleOpenUrl = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (mentionUrl) {\n window.open(mentionUrl, '_blank', 'noopener,noreferrer');\n }\n };\n\n const handleCopy = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const textToCopy = mentionUrl ?? `@${name}`;\n const success = copy(textToCopy);\n\n if (success) {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }\n };\n\n const handleClick = (e: React.MouseEvent) => {\n if (mentionUrl && e.metaKey) {\n handleOpenUrl(e);\n }\n };\n\n return (\n <HoverCard openDelay={300} closeDelay={150}>\n <HoverCardTrigger asChild>\n <span\n {...attributes}\n contentEditable={false}\n onClick={handleClick}\n data-mention-id={id}\n data-mention-type={type}\n className={cn(\n 'inline-flex items-center align-baseline',\n 'bg-primary/10 text-primary font-medium',\n 'hover:bg-primary/15 transition-colors cursor-pointer',\n )}\n style={{\n borderRadius: '0.25rem',\n padding: '0.125em 0.35em',\n margin: '0 0.1em',\n gap: '0.25em',\n fontSize: '0.9em',\n lineHeight: 1.4,\n verticalAlign: 'baseline',\n }}\n >\n <MentionAvatar name={name} avatar={avatar} size=\"inline\" />\n <span>{name}</span>\n {children}\n </span>\n </HoverCardTrigger>\n\n <HoverCardContent\n className=\"w-72 p-0\"\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n onMouseDown={(e) => e.stopPropagation()}\n onClick={(e) => e.stopPropagation()}>\n {/* Header with avatar and name */}\n <div className=\"p-2\">\n <div className=\"flex items-start gap-3\">\n <MentionAvatar name={name} avatar={avatar} size=\"md\" />\n <div className=\"flex-1 min-w-0 pt-0.5\">\n <div className=\"flex items-center gap-2\">\n <h4 className=\"font-semibold text-sm truncate\">{name}</h4>\n {type && (\n <span\n className={cn(\n 'inline-flex items-center gap-1 text-[10px] px-1.5 py-0.5 rounded-md font-medium shrink-0',\n typeColor,\n )}>\n <TypeIcon type={type} />\n {type}\n </span>\n )}\n </div>\n {description && (\n <p className=\"text-xs text-muted-foreground line-clamp-2 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n </div>\n </div>\n\n {/* Contact info */}\n {(meta?.email || mentionUrl) && (\n <div className=\"px-2 pb-2 space-y-1\">\n {meta?.email && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Mail className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{meta.email}</span>\n </div>\n )}\n {mentionUrl && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <ExternalLink className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{mentionUrl}</span>\n </div>\n )}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center gap-0.5 p-1 border-t\">\n {mentionUrl && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 px-2 text-xs flex-1\"\n onClick={handleOpenUrl}>\n <ExternalLink className=\"w-3.5 h-3.5 mr-1.5\" />\n Open\n </Button>\n )}\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 px-2 text-xs flex-1\"\n onClick={handleCopy}>\n {copied ? (\n <>\n <Check className=\"w-3.5 h-3.5 mr-1.5 text-green-600 dark:text-green-400\" />\n <span className=\"text-green-600 dark:text-green-400\">Copied</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3.5 h-3.5 mr-1.5\" />\n Copy\n </>\n )}\n </Button>\n\n {!editor.readOnly && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-muted-foreground hover:text-destructive hover:bg-destructive/10\"\n onClick={handleDelete}\n title=\"Delete mention\">\n <Trash2 className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n </div>\n </HoverCardContent>\n </HoverCard>\n );\n};\n","import { Operation, Path } from '..'\n\n/**\n * `PathRef` objects keep a specific path in a document synced over time as new\n * operations are applied to the editor. You can access their `current` property\n * at any time for the up-to-date path value.\n */\n\nexport interface PathRef {\n current: Path | null\n affinity: 'forward' | 'backward' | null\n unref(): Path | null\n}\n\nexport interface PathRefInterface {\n /**\n * Transform the path ref's current value by an operation.\n */\n transform: (ref: PathRef, op: Operation) => void\n}\n\n// eslint-disable-next-line no-redeclare\nexport const PathRef: PathRefInterface = {\n transform(ref: PathRef, op: Operation): void {\n const { current, affinity } = ref\n\n if (current == null) {\n return\n }\n\n const path = Path.transform(current, op, { affinity })\n ref.current = path\n\n if (path == null) {\n ref.unref()\n }\n },\n}\n","import {\n InsertNodeOperation,\n MergeNodeOperation,\n MoveNodeOperation,\n Operation,\n RemoveNodeOperation,\n SplitNodeOperation,\n} from '..'\nimport { TextDirection } from '../types/types'\n\n/**\n * `Path` arrays are a list of indexes that describe a node's exact position in\n * a Slate node tree. Although they are usually relative to the root `Editor`\n * object, they can be relative to any `Node` object.\n */\n\nexport type Path = number[]\n\nexport interface PathAncestorsOptions {\n reverse?: boolean\n}\n\nexport interface PathLevelsOptions {\n reverse?: boolean\n}\n\nexport interface PathTransformOptions {\n affinity?: TextDirection | null\n}\n\nexport interface PathInterface {\n /**\n * Get a list of ancestor paths for a given path.\n *\n * The paths are sorted from shallowest to deepest ancestor. However, if the\n * `reverse: true` option is passed, they are reversed.\n */\n ancestors: (path: Path, options?: PathAncestorsOptions) => Path[]\n\n /**\n * Get the common ancestor path of two paths.\n */\n common: (path: Path, another: Path) => Path\n\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare: (path: Path, another: Path) => -1 | 0 | 1\n\n /**\n * Check if a path ends after one of the indexes in another.\n */\n endsAfter: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path ends at one of the indexes in another.\n */\n endsAt: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path ends before one of the indexes in another.\n */\n endsBefore: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path is exactly equal to another.\n */\n equals: (path: Path, another: Path) => boolean\n\n /**\n * Check if the path of previous sibling node exists\n */\n hasPrevious: (path: Path) => boolean\n\n /**\n * Check if a path is after another.\n */\n isAfter: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path is an ancestor of another.\n */\n isAncestor: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path is before another.\n */\n isBefore: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path is a child of another.\n */\n isChild: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path is equal to or an ancestor of another.\n */\n isCommon: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path is a descendant of another.\n */\n isDescendant: (path: Path, another: Path) => boolean\n\n /**\n * Check if a path is the parent of another.\n */\n isParent: (path: Path, another: Path) => boolean\n\n /**\n * Check is a value implements the `Path` interface.\n */\n isPath: (value: any) => value is Path\n\n /**\n * Check if a path is a sibling of another.\n */\n isSibling: (path: Path, another: Path) => boolean\n\n /**\n * Get a list of paths at every level down to a path. Note: this is the same\n * as `Path.ancestors`, but including the path itself.\n *\n * The paths are sorted from shallowest to deepest. However, if the `reverse:\n * true` option is passed, they are reversed.\n */\n levels: (path: Path, options?: PathLevelsOptions) => Path[]\n\n /**\n * Given a path, get the path to the next sibling node.\n */\n next: (path: Path) => Path\n\n /**\n * Returns whether this operation can affect paths or not. Used as an\n * optimization when updating dirty paths during normalization\n *\n * NOTE: This *must* be kept in sync with the implementation of 'transform'\n * below\n */\n operationCanTransformPath: (\n operation: Operation\n ) => operation is\n | InsertNodeOperation\n | RemoveNodeOperation\n | MergeNodeOperation\n | SplitNodeOperation\n | MoveNodeOperation\n\n /**\n * Given a path, return a new path referring to the parent node above it.\n */\n parent: (path: Path) => Path\n\n /**\n * Given a path, get the path to the previous sibling node.\n */\n previous: (path: Path) => Path\n\n /**\n * Get a path relative to an ancestor.\n */\n relative: (path: Path, ancestor: Path) => Path\n\n /**\n * Transform a path by an operation.\n */\n transform: (\n path: Path,\n operation: Operation,\n options?: PathTransformOptions\n ) => Path | null\n}\n\n// eslint-disable-next-line no-redeclare\nexport const Path: PathInterface = {\n ancestors(path: Path, options: PathAncestorsOptions = {}): Path[] {\n const { reverse = false } = options\n let paths = Path.levels(path, options)\n\n if (reverse) {\n paths = paths.slice(1)\n } else {\n paths = paths.slice(0, -1)\n }\n\n return paths\n },\n\n common(path: Path, another: Path): Path {\n const common: Path = []\n\n for (let i = 0; i < path.length && i < another.length; i++) {\n const av = path[i]\n const bv = another[i]\n\n if (av !== bv) {\n break\n }\n\n common.push(av)\n }\n\n return common\n },\n\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length)\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1\n if (path[i] > another[i]) return 1\n }\n\n return 0\n },\n\n endsAfter(path: Path, another: Path): boolean {\n const i = path.length - 1\n const as = path.slice(0, i)\n const bs = another.slice(0, i)\n const av = path[i]\n const bv = another[i]\n return Path.equals(as, bs) && av > bv\n },\n\n endsAt(path: Path, another: Path): boolean {\n const i = path.length\n const as = path.slice(0, i)\n const bs = another.slice(0, i)\n return Path.equals(as, bs)\n },\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1\n const as = path.slice(0, i)\n const bs = another.slice(0, i)\n const av = path[i]\n const bv = another[i]\n return Path.equals(as, bs) && av < bv\n },\n\n equals(path: Path, another: Path): boolean {\n return (\n path.length === another.length && path.every((n, i) => n === another[i])\n )\n },\n\n hasPrevious(path: Path): boolean {\n return path[path.length - 1] > 0\n },\n\n isAfter(path: Path, another: Path): boolean {\n return Path.compare(path, another) === 1\n },\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0\n },\n\n isBefore(path: Path, another: Path): boolean {\n return Path.compare(path, another) === -1\n },\n\n isChild(path: Path, another: Path): boolean {\n return (\n path.length === another.length + 1 && Path.compare(path, another) === 0\n )\n },\n\n isCommon(path: Path, another: Path): boolean {\n return path.length <= another.length && Path.compare(path, another) === 0\n },\n\n isDescendant(path: Path, another: Path): boolean {\n return path.length > another.length && Path.compare(path, another) === 0\n },\n\n isParent(path: Path, another: Path): boolean {\n return (\n path.length + 1 === another.length && Path.compare(path, another) === 0\n )\n },\n\n isPath(value: any): value is Path {\n return (\n Array.isArray(value) &&\n (value.length === 0 || typeof value[0] === 'number')\n )\n },\n\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false\n }\n\n const as = path.slice(0, -1)\n const bs = another.slice(0, -1)\n const al = path[path.length - 1]\n const bl = another[another.length - 1]\n return al !== bl && Path.equals(as, bs)\n },\n\n levels(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options\n const list: Path[] = []\n\n for (let i = 0; i <= path.length; i++) {\n list.push(path.slice(0, i))\n }\n\n if (reverse) {\n list.reverse()\n }\n\n return list\n },\n\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(\n `Cannot get the next path of a root path [${path}], because it has no next index.`\n )\n }\n\n const last = path[path.length - 1]\n return path.slice(0, -1).concat(last + 1)\n },\n\n operationCanTransformPath(\n operation: Operation\n ): operation is\n | InsertNodeOperation\n | RemoveNodeOperation\n | MergeNodeOperation\n | SplitNodeOperation\n | MoveNodeOperation {\n switch (operation.type) {\n case 'insert_node':\n case 'remove_node':\n case 'merge_node':\n case 'split_node':\n case 'move_node':\n return true\n default:\n return false\n }\n },\n\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`)\n }\n\n return path.slice(0, -1)\n },\n\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(\n `Cannot get the previous path of a root path [${path}], because it has no previous index.`\n )\n }\n\n const last = path[path.length - 1]\n\n if (last <= 0) {\n throw new Error(\n `Cannot get the previous path of a first child path [${path}] because it would result in a negative index.`\n )\n }\n\n return path.slice(0, -1).concat(last - 1)\n },\n\n relative(path: Path, ancestor: Path): Path {\n if (!Path.isAncestor(ancestor, path) && !Path.equals(path, ancestor)) {\n throw new Error(\n `Cannot get the relative path of [${path}] inside ancestor [${ancestor}], because it is not above or equal to the path.`\n )\n }\n\n return path.slice(ancestor.length)\n },\n\n transform(\n path: Path | null,\n operation: Operation,\n options: PathTransformOptions = {}\n ): Path | null {\n if (!path) return null\n\n // PERF: use destructing instead of immer\n const p = [...path]\n const { affinity = 'forward' } = options\n\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (path.length === 0) {\n return p\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation\n\n if (\n Path.equals(op, p) ||\n Path.endsBefore(op, p) ||\n Path.isAncestor(op, p)\n ) {\n p[op.length - 1] += 1\n }\n\n break\n }\n\n case 'remove_node': {\n const { path: op } = operation\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1\n }\n\n break\n }\n\n case 'merge_node': {\n const { path: op, position } = operation\n\n if (Path.equals(op, p) || Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1\n } else if (Path.isAncestor(op, p)) {\n p[op.length - 1] -= 1\n p[op.length] += position\n }\n\n break\n }\n\n case 'split_node': {\n const { path: op, position } = operation\n\n if (Path.equals(op, p)) {\n if (affinity === 'forward') {\n p[p.length - 1] += 1\n } else if (affinity === 'backward') {\n // Nothing, because it still refers to the right path.\n } else {\n return null\n }\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] += 1\n } else if (Path.isAncestor(op, p) && path[op.length] >= position) {\n p[op.length - 1] += 1\n p[op.length] -= position\n }\n\n break\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return p\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice()\n\n if (Path.endsBefore(op, onp) && op.length < onp.length) {\n copy[op.length - 1] -= 1\n }\n\n return copy.concat(p.slice(op.length))\n } else if (\n Path.isSibling(op, onp) &&\n (Path.isAncestor(onp, p) || Path.equals(onp, p))\n ) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1\n } else {\n p[op.length - 1] += 1\n }\n } else if (\n Path.endsBefore(onp, p) ||\n Path.equals(onp, p) ||\n Path.isAncestor(onp, p)\n ) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1\n }\n\n p[onp.length - 1] += 1\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1\n }\n\n p[op.length - 1] -= 1\n }\n\n break\n }\n }\n\n return p\n },\n}\n","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","import { ExtendedType, Operation, Path, Point, PointEntry, isObject } from '..'\nimport { RangeDirection } from '../types/types'\n\n/**\n * `Range` objects are a set of points that refer to a specific span of a Slate\n * document. They can define a span inside a single node or a can span across\n * multiple nodes.\n */\n\nexport interface BaseRange {\n anchor: Point\n focus: Point\n}\n\nexport type Range = ExtendedType<'Range', BaseRange>\n\nexport interface RangeEdgesOptions {\n reverse?: boolean\n}\n\nexport interface RangeTransformOptions {\n affinity?: RangeDirection | null\n}\n\nexport interface RangeInterface {\n /**\n * Get the start and end points of a range, in the order in which they appear\n * in the document.\n */\n edges: (range: Range, options?: RangeEdgesOptions) => [Point, Point]\n\n /**\n * Get the end point of a range.\n */\n end: (range: Range) => Point\n\n /**\n * Check if a range is exactly equal to another.\n */\n equals: (range: Range, another: Range) => boolean\n\n /**\n * Check if a range includes a path, a point or part of another range.\n */\n includes: (range: Range, target: Path | Point | Range) => boolean\n\n /**\n * Check if a range includes another range.\n */\n surrounds: (range: Range, target: Range) => boolean\n\n /**\n * Get the intersection of a range with another.\n */\n intersection: (range: Range, another: Range) => Range | null\n\n /**\n * Check if a range is backward, meaning that its anchor point appears in the\n * document _after_ its focus point.\n */\n isBackward: (range: Range) => boolean\n\n /**\n * Check if a range is collapsed, meaning that both its anchor and focus\n * points refer to the exact same position in the document.\n */\n isCollapsed: (range: Range) => boolean\n\n /**\n * Check if a range is expanded.\n *\n * This is the opposite of [[Range.isCollapsed]] and is provided for legibility.\n */\n isExpanded: (range: Range) => boolean\n\n /**\n * Check if a range is forward.\n *\n * This is the opposite of [[Range.isBackward]] and is provided for legibility.\n */\n isForward: (range: Range) => boolean\n\n /**\n * Check if a value implements the [[Range]] interface.\n */\n isRange: (value: any) => value is Range\n\n /**\n * Iterate through all of the point entries in a range.\n */\n points: (range: Range) => Generator<PointEntry, void, undefined>\n\n /**\n * Get the start point of a range.\n */\n start: (range: Range) => Point\n\n /**\n * Transform a range by an operation.\n */\n transform: (\n range: Range,\n op: Operation,\n options?: RangeTransformOptions\n ) => Range | null\n}\n\n// eslint-disable-next-line no-redeclare\nexport const Range: RangeInterface = {\n edges(range: Range, options: RangeEdgesOptions = {}): [Point, Point] {\n const { reverse = false } = options\n const { anchor, focus } = range\n return Range.isBackward(range) === reverse\n ? [anchor, focus]\n : [focus, anchor]\n },\n\n end(range: Range): Point {\n const [, end] = Range.edges(range)\n return end\n },\n\n equals(range: Range, another: Range): boolean {\n return (\n Point.equals(range.anchor, another.anchor) &&\n Point.equals(range.focus, another.focus)\n )\n },\n\n surrounds(range: Range, target: Range): boolean {\n const intersectionRange = Range.intersection(range, target)\n if (!intersectionRange) {\n return false\n }\n return Range.equals(intersectionRange, target)\n },\n\n includes(range: Range, target: Path | Point | Range): boolean {\n if (Range.isRange(target)) {\n if (\n Range.includes(range, target.anchor) ||\n Range.includes(range, target.focus)\n ) {\n return true\n }\n\n const [rs, re] = Range.edges(range)\n const [ts, te] = Range.edges(target)\n return Point.isBefore(rs, ts) && Point.isAfter(re, te)\n }\n\n const [start, end] = Range.edges(range)\n let isAfterStart = false\n let isBeforeEnd = false\n\n if (Point.isPoint(target)) {\n isAfterStart = Point.compare(target, start) >= 0\n isBeforeEnd = Point.compare(target, end) <= 0\n } else {\n isAfterStart = Path.compare(target, start.path) >= 0\n isBeforeEnd = Path.compare(target, end.path) <= 0\n }\n\n return isAfterStart && isBeforeEnd\n },\n\n intersection(range: Range, another: Range): Range | null {\n const { anchor, focus, ...rest } = range\n const [s1, e1] = Range.edges(range)\n const [s2, e2] = Range.edges(another)\n const start = Point.isBefore(s1, s2) ? s2 : s1\n const end = Point.isBefore(e1, e2) ? e1 : e2\n\n if (Point.isBefore(end, start)) {\n return null\n } else {\n return { anchor: start, focus: end, ...rest }\n }\n },\n\n isBackward(range: Range): boolean {\n const { anchor, focus } = range\n return Point.isAfter(anchor, focus)\n },\n\n isCollapsed(range: Range): boolean {\n const { anchor, focus } = range\n return Point.equals(anchor, focus)\n },\n\n isExpanded(range: Range): boolean {\n return !Range.isCollapsed(range)\n },\n\n isForward(range: Range): boolean {\n return !Range.isBackward(range)\n },\n\n isRange(value: any): value is Range {\n return (\n isObject(value) &&\n Point.isPoint(value.anchor) &&\n Point.isPoint(value.focus)\n )\n },\n\n *points(range: Range): Generator<PointEntry, void, undefined> {\n yield [range.anchor, 'anchor']\n yield [range.focus, 'focus']\n },\n\n start(range: Range): Point {\n const [start] = Range.edges(range)\n return start\n },\n\n transform(\n range: Range | null,\n op: Operation,\n options: RangeTransformOptions = {}\n ): Range | null {\n if (range === null) {\n return null\n }\n\n const { affinity = 'inward' } = options\n let affinityAnchor: 'forward' | 'backward' | null\n let affinityFocus: 'forward' | 'backward' | null\n\n if (affinity === 'inward') {\n // If the range is collapsed, make sure to use the same affinity to\n // avoid the two points passing each other and expanding in the opposite\n // direction\n const isCollapsed = Range.isCollapsed(range)\n if (Range.isForward(range)) {\n affinityAnchor = 'forward'\n affinityFocus = isCollapsed ? affinityAnchor : 'backward'\n } else {\n affinityAnchor = 'backward'\n affinityFocus = isCollapsed ? affinityAnchor : 'forward'\n }\n } else if (affinity === 'outward') {\n if (Range.isForward(range)) {\n affinityAnchor = 'backward'\n affinityFocus = 'forward'\n } else {\n affinityAnchor = 'forward'\n affinityFocus = 'backward'\n }\n } else {\n affinityAnchor = affinity\n affinityFocus = affinity\n }\n const anchor = Point.transform(range.anchor, op, {\n affinity: affinityAnchor,\n })\n const focus = Point.transform(range.focus, op, { affinity: affinityFocus })\n\n if (!anchor || !focus) {\n return null\n }\n\n return { anchor, focus }\n },\n}\n","import {\n Ancestor,\n Descendant,\n Editor,\n ExtendedType,\n Node,\n Path,\n isObject,\n} from '..'\n\n/**\n * `Element` objects are a type of node in a Slate document that contain other\n * element nodes or text nodes. They can be either \"blocks\" or \"inlines\"\n * depending on the Slate editor's configuration.\n */\n\nexport interface BaseElement {\n children: Descendant[]\n}\n\nexport type Element = ExtendedType<'Element', BaseElement>\n\nexport interface ElementIsElementOptions {\n deep?: boolean\n}\n\nexport interface ElementInterface {\n /**\n * Check if a value implements the 'Ancestor' interface.\n */\n isAncestor: (\n value: any,\n options?: ElementIsElementOptions\n ) => value is Ancestor\n\n /**\n * Check if a value implements the `Element` interface.\n */\n isElement: (value: any, options?: ElementIsElementOptions) => value is Element\n\n /**\n * Check if a value is an array of `Element` objects.\n */\n isElementList: (\n value: any,\n options?: ElementIsElementOptions\n ) => value is Element[]\n\n /**\n * Check if a set of props is a partial of Element.\n */\n isElementProps: (props: any) => props is Partial<Element>\n\n /**\n * Check if a value implements the `Element` interface and has elementKey with selected value.\n * Default it check to `type` key value\n */\n isElementType: <T extends Element>(\n value: any,\n elementVal: string,\n elementKey?: string\n ) => value is T\n\n /**\n * Check if an element matches set of properties.\n *\n * Note: this checks custom properties, and it does not ensure that any\n * children are equivalent.\n */\n matches: (element: Element, props: Partial<Element>) => boolean\n}\n\n/**\n * Shared the function with isElementType utility\n */\nconst isElement = (\n value: any,\n { deep = false }: ElementIsElementOptions = {}\n): value is Element => {\n if (!isObject(value)) return false\n\n // PERF: No need to use the full Editor.isEditor here\n const isEditor = typeof value.apply === 'function'\n if (isEditor) return false\n\n const isChildrenValid = deep\n ? Node.isNodeList(value.children)\n : Array.isArray(value.children)\n\n return isChildrenValid\n}\n\n// eslint-disable-next-line no-redeclare\nexport const Element: ElementInterface = {\n isAncestor(\n value: any,\n { deep = false }: ElementIsElementOptions = {}\n ): value is Ancestor {\n return isObject(value) && Node.isNodeList(value.children, { deep })\n },\n\n isElement,\n\n isElementList(\n value: any,\n { deep = false }: ElementIsElementOptions = {}\n ): value is Element[] {\n return (\n Array.isArray(value) &&\n value.every(val => Element.isElement(val, { deep }))\n )\n },\n\n isElementProps(props: any): props is Partial<Element> {\n return (props as Partial<Element>).children !== undefined\n },\n\n isElementType: <T extends Element>(\n value: any,\n elementVal: string,\n elementKey: string = 'type'\n ): value is T => {\n return (\n isElement(value) && value[<keyof Descendant>elementKey] === elementVal\n )\n },\n\n matches(element: Element, props: Partial<Element>): boolean {\n for (const key in props) {\n if (key === 'children') {\n continue\n }\n\n if (element[<keyof Descendant>key] !== props[<keyof Descendant>key]) {\n return false\n }\n }\n\n return true\n },\n}\n\n/**\n * `ElementEntry` objects refer to an `Element` and the `Path` where it can be\n * found inside a root node.\n */\nexport type ElementEntry = [Element, Path]\n","import { Editor, Path, Range, Scrubber, Text } from '..'\nimport { Element, ElementEntry } from './element'\nimport { modifyChildren, modifyLeaf, removeChildren } from '../utils/modify'\n\n/**\n * The `Node` union type represents all of the different types of nodes that\n * occur in a Slate document tree.\n */\n\nexport type BaseNode = Editor | Element | Text\nexport type Node = Editor | Element | Text\n\nexport interface NodeAncestorsOptions {\n reverse?: boolean\n}\n\nexport interface NodeChildrenOptions {\n reverse?: boolean\n}\n\nexport interface NodeDescendantsOptions {\n from?: Path\n to?: Path\n reverse?: boolean\n pass?: (node: NodeEntry) => boolean\n}\n\nexport interface NodeElementsOptions {\n from?: Path\n to?: Path\n reverse?: boolean\n pass?: (node: NodeEntry) => boolean\n}\n\nexport interface NodeIsNodeOptions {\n deep?: boolean\n}\n\nexport interface NodeLevelsOptions {\n reverse?: boolean\n}\n\nexport interface NodeNodesOptions {\n from?: Path\n to?: Path\n reverse?: boolean\n pass?: (entry: NodeEntry) => boolean\n}\n\nexport interface NodeTextsOptions {\n from?: Path\n to?: Path\n reverse?: boolean\n pass?: (node: NodeEntry) => boolean\n}\n\nexport interface NodeInterface {\n /**\n * Get the node at a specific path, asserting that it's an ancestor node.\n */\n ancestor: (root: Node, path: Path) => Ancestor\n\n /**\n * Return a generator of all the ancestor nodes above a specific path.\n *\n * By default the order is top-down, from highest to lowest ancestor in\n * the tree, but you can pass the `reverse: true` option to go bottom-up.\n */\n ancestors: (\n root: Node,\n path: Path,\n options?: NodeAncestorsOptions\n ) => Generator<NodeEntry<Ancestor>, void, undefined>\n\n /**\n * Get the child of a node at a specific index.\n */\n child: (root: Node, index: number) => Descendant\n\n /**\n * Iterate over the children of a node at a specific path.\n */\n children: (\n root: Node,\n path: Path,\n options?: NodeChildrenOptions\n ) => Generator<NodeEntry<Descendant>, void, undefined>\n\n /**\n * Get an entry for the common ancesetor node of two paths.\n */\n common: (root: Node, path: Path, another: Path) => NodeEntry\n\n /**\n * Get the node at a specific path, asserting that it's a descendant node.\n */\n descendant: (root: Node, path: Path) => Descendant\n\n /**\n * Return a generator of all the descendant node entries inside a root node.\n */\n descendants: (\n root: Node,\n options?: NodeDescendantsOptions\n ) => Generator<NodeEntry<Descendant>, void, undefined>\n\n /**\n * Return a generator of all the element nodes inside a root node. Each iteration\n * will return an `ElementEntry` tuple consisting of `[Element, Path]`. If the\n * root node is an element it will be included in the iteration as well.\n */\n elements: (\n root: Node,\n options?: NodeElementsOptions\n ) => Generator<ElementEntry, void, undefined>\n\n /**\n * Extract props from a Node.\n */\n extractProps: (node: Node) => NodeProps\n\n /**\n * Get the first leaf node entry in a root node from a path.\n */\n first: (root: Node, path: Path) => NodeEntry\n\n /**\n * Get the sliced fragment represented by a range inside a root node.\n */\n fragment: <T extends Ancestor = Editor>(\n root: T,\n range: Range\n ) => T['children']\n\n /**\n * Get the descendant node referred to by a specific path. If the path is an\n * empty array, it refers to the root node itself.\n */\n get: (root: Node, path: Path) => Node\n\n /**\n * Similar to get, but returns undefined if the node does not exist.\n */\n getIf: (root: Node, path: Path) => Node | undefined\n\n /**\n * Check if a descendant node exists at a specific path.\n */\n has: (root: Node, path: Path) => boolean\n\n /**\n * Check if a value implements the `Node` interface.\n */\n isNode: (value: any, options?: NodeIsNodeOptions) => value is Node\n\n /**\n * Check if a value is a list of `Node` objects.\n */\n isNodeList: (value: any, options?: NodeIsNodeOptions) => value is Node[]\n\n /**\n * Get the last leaf node entry in a root node from a path.\n */\n last: (root: Node, path: Path) => NodeEntry\n\n /**\n * Get the node at a specific path, ensuring it's a leaf text node.\n */\n leaf: (root: Node, path: Path) => Text\n\n /**\n * Return a generator of the in a branch of the tree, from a specific path.\n *\n * By default the order is top-down, from highest to lowest node in the tree,\n * but you can pass the `reverse: true` option to go bottom-up.\n */\n levels: (\n root: Node,\n path: Path,\n options?: NodeLevelsOptions\n ) => Generator<NodeEntry, void, undefined>\n\n /**\n * Check if a node matches a set of props.\n */\n matches: (node: Node, props: Partial<Node>) => boolean\n\n /**\n * Return a generator of all the node entries of a root node. Each entry is\n * returned as a `[Node, Path]` tuple, with the path referring to the node's\n * position inside the root node.\n */\n nodes: (\n root: Node,\n options?: NodeNodesOptions\n ) => Generator<NodeEntry, void, undefined>\n\n /**\n * Get the parent of a node at a specific path.\n */\n parent: (root: Node, path: Path) => Ancestor\n\n /**\n * Get the concatenated text string of a node's content.\n *\n * Note that this will not include spaces or line breaks between block nodes.\n * It is not a user-facing string, but a string for performing offset-related\n * computations for a node.\n */\n string: (node: Node) => string\n\n /**\n * Return a generator of all leaf text nodes in a root node.\n */\n texts: (\n root: Node,\n options?: NodeTextsOptions\n ) => Generator<NodeEntry<Text>, void, undefined>\n}\n\n// eslint-disable-next-line no-redeclare\nexport const Node: NodeInterface = {\n ancestor(root: Node, path: Path): Ancestor {\n const node = Node.get(root, path)\n\n if (Text.isText(node)) {\n throw new Error(\n `Cannot get the ancestor node at path [${path}] because it refers to a text node instead: ${Scrubber.stringify(\n node\n )}`\n )\n }\n\n return node\n },\n\n *ancestors(\n root: Node,\n path: Path,\n options: NodeAncestorsOptions = {}\n ): Generator<NodeEntry<Ancestor>, void, undefined> {\n for (const p of Path.ancestors(path, options)) {\n const n = Node.ancestor(root, p)\n const entry: NodeEntry<Ancestor> = [n, p]\n yield entry\n }\n },\n\n child(root: Node, index: number): Descendant {\n if (Text.isText(root)) {\n throw new Error(\n `Cannot get the child of a text node: ${Scrubber.stringify(root)}`\n )\n }\n\n const c = root.children[index] as Descendant\n\n if (c == null) {\n throw new Error(\n `Cannot get child at index \\`${index}\\` in node: ${Scrubber.stringify(\n root\n )}`\n )\n }\n\n return c\n },\n\n *children(\n root: Node,\n path: Path,\n options: NodeChildrenOptions = {}\n ): Generator<NodeEntry<Descendant>, void, undefined> {\n const { reverse = false } = options\n const ancestor = Node.ancestor(root, path)\n const { children } = ancestor\n let index = reverse ? children.length - 1 : 0\n\n while (reverse ? index >= 0 : index < children.length) {\n const child = Node.child(ancestor, index)\n const childPath = path.concat(index)\n yield [child, childPath]\n index = reverse ? index - 1 : index + 1\n }\n },\n\n common(root: Node, path: Path, another: Path): NodeEntry {\n const p = Path.common(path, another)\n const n = Node.get(root, p)\n return [n, p]\n },\n\n descendant(root: Node, path: Path): Descendant {\n const node = Node.get(root, path)\n\n if (Editor.isEditor(node)) {\n throw new Error(\n `Cannot get the descendant node at path [${path}] because it refers to the root editor node instead: ${Scrubber.stringify(\n node\n )}`\n )\n }\n\n return node\n },\n\n *descendants(\n root: Node,\n options: NodeDescendantsOptions = {}\n ): Generator<NodeEntry<Descendant>, void, undefined> {\n for (const [node, path] of Node.nodes(root, options)) {\n if (path.length !== 0) {\n // NOTE: we have to coerce here because checking the path's length does\n // guarantee that `node` is not a `Editor`, but TypeScript doesn't know.\n yield [node, path] as NodeEntry<Descendant>\n }\n }\n },\n\n *elements(\n root: Node,\n options: NodeElementsOptions = {}\n ): Generator<ElementEntry, void, undefined> {\n for (const [node, path] of Node.nodes(root, options)) {\n if (Element.isElement(node)) {\n yield [node, path]\n }\n }\n },\n\n extractProps(node: Node): NodeProps {\n if (Element.isAncestor(node)) {\n const { children, ...properties } = node\n\n return properties\n } else {\n const { text, ...properties } = node\n\n return properties\n }\n },\n\n first(root: Node, path: Path): NodeEntry {\n const p = path.slice()\n let n = Node.get(root, p)\n\n while (n) {\n if (Text.isText(n) || n.children.length === 0) {\n break\n } else {\n n = n.children[0]\n p.push(0)\n }\n }\n\n return [n, p]\n },\n\n fragment<T extends Ancestor = Editor>(root: T, range: Range): T['children'] {\n const newRoot = { children: root.children }\n\n const [start, end] = Range.edges(range)\n const nodeEntries = Node.nodes(newRoot, {\n reverse: true,\n pass: ([, path]) => !Range.includes(range, path),\n })\n\n for (const [, path] of nodeEntries) {\n if (!Range.includes(range, path)) {\n const index = path[path.length - 1]\n\n modifyChildren(newRoot, Path.parent(path), children =>\n removeChildren(children, index, 1)\n )\n }\n\n if (Path.equals(path, end.path)) {\n modifyLeaf(newRoot, path, node => {\n const before = node.text.slice(0, end.offset)\n return { ...node, text: before }\n })\n }\n\n if (Path.equals(path, start.path)) {\n modifyLeaf(newRoot, path, node => {\n const before = node.text.slice(start.offset)\n return { ...node, text: before }\n })\n }\n }\n\n return newRoot.children\n },\n\n get(root: Node, path: Path): Node {\n const node = Node.getIf(root, path)\n if (node === undefined) {\n throw new Error(\n `Cannot find a descendant at path [${path}] in node: ${Scrubber.stringify(\n root\n )}`\n )\n }\n return node\n },\n\n getIf(root: Node, path: Path): Node | undefined {\n let node = root\n\n for (let i = 0; i < path.length; i++) {\n const p = path[i]\n\n if (Text.isText(node) || !node.children[p]) {\n return\n }\n\n node = node.children[p]\n }\n\n return node\n },\n\n has(root: Node, path: Path): boolean {\n let node = root\n\n for (let i = 0; i < path.length; i++) {\n const p = path[i]\n\n if (Text.isText(node) || !node.children[p]) {\n return false\n }\n\n node = node.children[p]\n }\n\n return true\n },\n\n isNode(value: any, { deep = false }: NodeIsNodeOptions = {}): value is Node {\n return (\n Text.isText(value) ||\n Element.isElement(value, { deep }) ||\n Editor.isEditor(value, { deep })\n )\n },\n\n isNodeList(\n value: any,\n { deep = false }: NodeIsNodeOptions = {}\n ): value is Node[] {\n return (\n Array.isArray(value) && value.every(val => Node.isNode(val, { deep }))\n )\n },\n\n last(root: Node, path: Path): NodeEntry {\n const p = path.slice()\n let n = Node.get(root, p)\n\n while (n) {\n if (Text.isText(n) || n.children.length === 0) {\n break\n } else {\n const i = n.children.length - 1\n n = n.children[i]\n p.push(i)\n }\n }\n\n return [n, p]\n },\n\n leaf(root: Node, path: Path): Text {\n const node = Node.get(root, path)\n\n if (!Text.isText(node)) {\n throw new Error(\n `Cannot get the leaf node at path [${path}] because it refers to a non-leaf node: ${Scrubber.stringify(\n node\n )}`\n )\n }\n\n return node\n },\n\n *levels(\n root: Node,\n path: Path,\n options: NodeLevelsOptions = {}\n ): Generator<NodeEntry, void, undefined> {\n for (const p of Path.levels(path, options)) {\n const n = Node.get(root, p)\n yield [n, p]\n }\n },\n\n matches(node: Node, props: Partial<Node>): boolean {\n return (\n (Element.isElement(node) &&\n Element.isElementProps(props) &&\n Element.matches(node, props)) ||\n (Text.isText(node) &&\n Text.isTextProps(props) &&\n Text.matches(node, props))\n )\n },\n\n *nodes(\n root: Node,\n options: NodeNodesOptions = {}\n ): Generator<NodeEntry, void, undefined> {\n const { pass, reverse = false } = options\n const { from = [], to } = options\n const visited = new Set()\n let p: Path = []\n let n = root\n\n while (true) {\n if (to && (reverse ? Path.isBefore(p, to) : Path.isAfter(p, to))) {\n break\n }\n\n if (!visited.has(n)) {\n yield [n, p]\n }\n\n // If we're allowed to go downward and we haven't descended yet, do.\n if (\n !visited.has(n) &&\n !Text.isText(n) &&\n n.children.length !== 0 &&\n (pass == null || pass([n, p]) === false)\n ) {\n visited.add(n)\n let nextIndex = reverse ? n.children.length - 1 : 0\n\n if (Path.isAncestor(p, from)) {\n nextIndex = from[p.length]\n }\n\n p = p.concat(nextIndex)\n n = Node.get(root, p)\n continue\n }\n\n // If we're at the root and we can't go down, we're done.\n if (p.length === 0) {\n break\n }\n\n // If we're going forward...\n if (!reverse) {\n const newPath = Path.next(p)\n\n if (Node.has(root, newPath)) {\n p = newPath\n n = Node.get(root, p)\n continue\n }\n }\n\n // If we're going backward...\n if (reverse && p[p.length - 1] !== 0) {\n const newPath = Path.previous(p)\n p = newPath\n n = Node.get(root, p)\n continue\n }\n\n // Otherwise we're going upward...\n p = Path.parent(p)\n n = Node.get(root, p)\n visited.add(n)\n }\n },\n\n parent(root: Node, path: Path): Ancestor {\n const parentPath = Path.parent(path)\n const p = Node.get(root, parentPath)\n\n if (Text.isText(p)) {\n throw new Error(\n `Cannot get the parent of path [${path}] because it does not exist in the root.`\n )\n }\n\n return p\n },\n\n string(node: Node): string {\n if (Text.isText(node)) {\n return node.text\n } else {\n return node.children.map(Node.string).join('')\n }\n },\n\n *texts(\n root: Node,\n options: NodeTextsOptions = {}\n ): Generator<NodeEntry<Text>, void, undefined> {\n for (const [node, path] of Node.nodes(root, options)) {\n if (Text.isText(node)) {\n yield [node, path]\n }\n }\n },\n}\n\n/**\n * The `Descendant` union type represents nodes that are descendants in the\n * tree. It is returned as a convenience in certain cases to narrow a value\n * further than the more generic `Node` union.\n */\n\nexport type Descendant = Element | Text\n\n/**\n * The `Ancestor` union type represents nodes that are ancestors in the tree.\n * It is returned as a convenience in certain cases to narrow a value further\n * than the more generic `Node` union.\n */\n\nexport type Ancestor = Editor | Element\n\n/**\n * `NodeEntry` objects are returned when iterating over the nodes in a Slate\n * document tree. They consist of the node and its `Path` relative to the root\n * node in the document.\n */\n\nexport type NodeEntry<T extends Node = Node> = [T, Path]\n\n/**\n * Convenience type for returning the props of a node.\n */\nexport type NodeProps =\n | Omit<Editor, 'children'>\n | Omit<Element, 'children'>\n | Omit<Text, 'text'>\n","import { ExtendedType, Node, Path, Range, isObject } from '..'\n\nexport type BaseInsertNodeOperation = {\n type: 'insert_node'\n path: Path\n node: Node\n}\n\nexport type InsertNodeOperation = ExtendedType<\n 'InsertNodeOperation',\n BaseInsertNodeOperation\n>\n\nexport type BaseInsertTextOperation = {\n type: 'insert_text'\n path: Path\n offset: number\n text: string\n}\n\nexport type InsertTextOperation = ExtendedType<\n 'InsertTextOperation',\n BaseInsertTextOperation\n>\n\nexport type BaseMergeNodeOperation = {\n type: 'merge_node'\n path: Path\n position: number\n properties: Partial<Node>\n}\n\nexport type MergeNodeOperation = ExtendedType<\n 'MergeNodeOperation',\n BaseMergeNodeOperation\n>\n\nexport type BaseMoveNodeOperation = {\n type: 'move_node'\n path: Path\n newPath: Path\n}\n\nexport type MoveNodeOperation = ExtendedType<\n 'MoveNodeOperation',\n BaseMoveNodeOperation\n>\n\nexport type BaseRemoveNodeOperation = {\n type: 'remove_node'\n path: Path\n node: Node\n}\n\nexport type RemoveNodeOperation = ExtendedType<\n 'RemoveNodeOperation',\n BaseRemoveNodeOperation\n>\n\nexport type BaseRemoveTextOperation = {\n type: 'remove_text'\n path: Path\n offset: number\n text: string\n}\n\nexport type RemoveTextOperation = ExtendedType<\n 'RemoveTextOperation',\n BaseRemoveTextOperation\n>\n\nexport type BaseSetNodeOperation = {\n type: 'set_node'\n path: Path\n properties: Partial<Node>\n newProperties: Partial<Node>\n}\n\nexport type SetNodeOperation = ExtendedType<\n 'SetNodeOperation',\n BaseSetNodeOperation\n>\n\nexport type BaseSetSelectionOperation =\n | {\n type: 'set_selection'\n properties: null\n newProperties: Range\n }\n | {\n type: 'set_selection'\n properties: Partial<Range>\n newProperties: Partial<Range>\n }\n | {\n type: 'set_selection'\n properties: Range\n newProperties: null\n }\n\nexport type SetSelectionOperation = ExtendedType<\n 'SetSelectionOperation',\n BaseSetSelectionOperation\n>\n\nexport type BaseSplitNodeOperation = {\n type: 'split_node'\n path: Path\n position: number\n properties: Partial<Node>\n}\n\nexport type SplitNodeOperation = ExtendedType<\n 'SplitNodeOperation',\n BaseSplitNodeOperation\n>\n\nexport type NodeOperation =\n | InsertNodeOperation\n | MergeNodeOperation\n | MoveNodeOperation\n | RemoveNodeOperation\n | SetNodeOperation\n | SplitNodeOperation\n\nexport type SelectionOperation = SetSelectionOperation\n\nexport type TextOperation = InsertTextOperation | RemoveTextOperation\n\n/**\n * `Operation` objects define the low-level instructions that Slate editors use\n * to apply changes to their internal state. Representing all changes as\n * operations is what allows Slate editors to easily implement history,\n * collaboration, and other features.\n */\n\nexport type BaseOperation = NodeOperation | SelectionOperation | TextOperation\nexport type Operation = ExtendedType<'Operation', BaseOperation>\n\nexport interface OperationInterface {\n /**\n * Check if a value is a `NodeOperation` object.\n */\n isNodeOperation: (value: any) => value is NodeOperation\n\n /**\n * Check if a value is an `Operation` object.\n */\n isOperation: (value: any) => value is Operation\n\n /**\n * Check if a value is a list of `Operation` objects.\n */\n isOperationList: (value: any) => value is Operation[]\n\n /**\n * Check if a value is a `SelectionOperation` object.\n */\n isSelectionOperation: (value: any) => value is SelectionOperation\n\n /**\n * Check if a value is a `TextOperation` object.\n */\n isTextOperation: (value: any) => value is TextOperation\n\n /**\n * Invert an operation, returning a new operation that will exactly undo the\n * original when applied.\n */\n inverse: (op: Operation) => Operation\n}\n\n// eslint-disable-next-line no-redeclare\nexport const Operation: OperationInterface = {\n isNodeOperation(value: any): value is NodeOperation {\n return Operation.isOperation(value) && value.type.endsWith('_node')\n },\n\n isOperation(value: any): value is Operation {\n if (!isObject(value)) {\n return false\n }\n\n switch (value.type) {\n case 'insert_node':\n return Path.isPath(value.path) && Node.isNode(value.node)\n case 'insert_text':\n return (\n typeof value.offset === 'number' &&\n typeof value.text === 'string' &&\n Path.isPath(value.path)\n )\n case 'merge_node':\n return (\n typeof value.position === 'number' &&\n Path.isPath(value.path) &&\n isObject(value.properties)\n )\n case 'move_node':\n return Path.isPath(value.path) && Path.isPath(value.newPath)\n case 'remove_node':\n return Path.isPath(value.path) && Node.isNode(value.node)\n case 'remove_text':\n return (\n typeof value.offset === 'number' &&\n typeof value.text === 'string' &&\n Path.isPath(value.path)\n )\n case 'set_node':\n return (\n Path.isPath(value.path) &&\n isObject(value.properties) &&\n isObject(value.newProperties)\n )\n case 'set_selection':\n return (\n (value.properties === null && Range.isRange(value.newProperties)) ||\n (value.newProperties === null && Range.isRange(value.properties)) ||\n (isObject(value.properties) && isObject(value.newProperties))\n )\n case 'split_node':\n return (\n Path.isPath(value.path) &&\n typeof value.position === 'number' &&\n isObject(value.properties)\n )\n default:\n return false\n }\n },\n\n isOperationList(value: any): value is Operation[] {\n return (\n Array.isArray(value) && value.every(val => Operation.isOperation(val))\n )\n },\n\n isSelectionOperation(value: any): value is SelectionOperation {\n return Operation.isOperation(value) && value.type.endsWith('_selection')\n },\n\n isTextOperation(value: any): value is TextOperation {\n return Operation.isOperation(value) && value.type.endsWith('_text')\n },\n\n inverse(op: Operation): Operation {\n switch (op.type) {\n case 'insert_node': {\n return { ...op, type: 'remove_node' }\n }\n\n case 'insert_text': {\n return { ...op, type: 'remove_text' }\n }\n\n case 'merge_node': {\n return { ...op, type: 'split_node', path: Path.previous(op.path) }\n }\n\n case 'move_node': {\n const { newPath, path } = op\n\n // PERF: in this case the move operation is a no-op anyways.\n if (Path.equals(newPath, path)) {\n return op\n }\n\n // If the move happens completely within a single parent the path and\n // newPath are stable with respect to each other.\n if (Path.isSibling(path, newPath)) {\n return { ...op, path: newPath, newPath: path }\n }\n\n // If the move does not happen within a single parent it is possible\n // for the move to impact the true path to the location where the node\n // was removed from and where it was inserted. We have to adjust for this\n // and find the original path. We can accomplish this (only in non-sibling)\n // moves by looking at the impact of the move operation on the node\n // after the original move path.\n const inversePath = Path.transform(path, op)!\n const inverseNewPath = Path.transform(Path.next(path), op)!\n return { ...op, path: inversePath, newPath: inverseNewPath }\n }\n\n case 'remove_node': {\n return { ...op, type: 'insert_node' }\n }\n\n case 'remove_text': {\n return { ...op, type: 'insert_text' }\n }\n\n case 'set_node': {\n const { properties, newProperties } = op\n return { ...op, properties: newProperties, newProperties: properties }\n }\n\n case 'set_selection': {\n const { properties, newProperties } = op\n\n if (properties == null) {\n return {\n ...op,\n properties: newProperties as Range,\n newProperties: null,\n }\n } else if (newProperties == null) {\n return {\n ...op,\n properties: null,\n newProperties: properties as Range,\n }\n } else {\n return { ...op, properties: newProperties, newProperties: properties }\n }\n }\n\n case 'split_node': {\n return { ...op, type: 'merge_node', path: Path.next(op.path) }\n }\n }\n },\n}\n","export const isObject = (value: any) =>\n typeof value === 'object' && value !== null\n","import { isObject } from './is-object'\n\n/*\n Custom deep equal comparison for Slate nodes.\n\n We don't need general purpose deep equality;\n Slate only supports plain values, Arrays, and nested objects.\n Complex values nested inside Arrays are not supported.\n\n Slate objects are designed to be serialised, so\n missing keys are deliberately normalised to undefined.\n */\nexport const isDeepEqual = (\n node: Record<string, any>,\n another: Record<string, any>\n): boolean => {\n for (const key in node) {\n const a = node[key]\n const b = another[key]\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n } else if (isObject(a) && isObject(b)) {\n if (!isDeepEqual(a, b)) return false\n } else if (a !== b) {\n return false\n }\n }\n\n /*\n Deep object equality is only necessary in one direction; in the reverse direction\n we are only looking for keys that are missing.\n As above, undefined keys are normalised to missing.\n */\n\n for (const key in another) {\n if (node[key] === undefined && another[key] !== undefined) {\n return false\n }\n }\n\n return true\n}\n","import { Editor, Location } from '../interfaces'\n\n/**\n * Get the default location to insert content into the editor.\n * By default, use the selection as the target location. But if there is\n * no selection, insert at the end of the document since that is such a\n * common use case when inserting from a non-selected state.\n */\nexport const getDefaultInsertLocation = (editor: Editor): Location => {\n if (editor.selection) {\n return editor.selection\n } else if (editor.children.length > 0) {\n return Editor.end(editor, [])\n } else {\n return [0]\n }\n}\n","// Character (grapheme cluster) boundaries are determined according to\n// the default grapheme cluster boundary specification, extended grapheme clusters variant[1].\n//\n// References:\n//\n// [1] https://www.unicode.org/reports/tr29/#Default_Grapheme_Cluster_Table\n// [2] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakProperty.txt\n// [3] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.html\n// [4] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt\n\n/**\n * Get the distance to the end of the first character in a string of text.\n */\n\nexport const getCharacterDistance = (str: string, isRTL = false): number => {\n const isLTR = !isRTL\n const codepoints = isRTL ? codepointsIteratorRTL(str) : str\n\n let left: CodepointType = CodepointType.None\n let right: CodepointType = CodepointType.None\n let distance = 0\n // Evaluation of these conditions are deferred.\n let gb11: boolean | null = null // Is GB11 applicable?\n let gb12Or13: boolean | null = null // Is GB12 or GB13 applicable?\n\n for (const char of codepoints) {\n const code = char.codePointAt(0)\n if (!code) break\n\n const type = getCodepointType(char, code)\n ;[left, right] = isLTR ? [right, type] : [type, left]\n\n if (\n intersects(left, CodepointType.ZWJ) &&\n intersects(right, CodepointType.ExtPict)\n ) {\n if (isLTR) {\n gb11 = endsWithEmojiZWJ(str.substring(0, distance))\n } else {\n gb11 = endsWithEmojiZWJ(str.substring(0, str.length - distance))\n }\n if (!gb11) break\n }\n\n if (\n intersects(left, CodepointType.RI) &&\n intersects(right, CodepointType.RI)\n ) {\n if (gb12Or13 !== null) {\n gb12Or13 = !gb12Or13\n } else {\n if (isLTR) {\n gb12Or13 = true\n } else {\n gb12Or13 = endsWithOddNumberOfRIs(\n str.substring(0, str.length - distance)\n )\n }\n }\n if (!gb12Or13) break\n }\n\n if (\n left !== CodepointType.None &&\n right !== CodepointType.None &&\n isBoundaryPair(left, right)\n ) {\n break\n }\n\n distance += char.length\n }\n\n return distance || 1\n}\n\nconst SPACE = /\\s/\nconst PUNCTUATION =\n /[\\u002B\\u0021-\\u0023\\u0025-\\u002A\\u002C-\\u002F\\u003A\\u003B\\u003F\\u0040\\u005B-\\u005D\\u005F\\u007B\\u007D\\u00A1\\u00A7\\u00AB\\u00B6\\u00B7\\u00BB\\u00BF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E3B\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\nconst CHAMELEON = /['\\u2018\\u2019]/\n\n/**\n * Get the distance to the end of the first word in a string of text.\n */\n\nexport const getWordDistance = (text: string, isRTL = false): number => {\n let dist = 0\n let started = false\n\n while (text.length > 0) {\n const charDist = getCharacterDistance(text, isRTL)\n const [char, remaining] = splitByCharacterDistance(text, charDist, isRTL)\n\n if (isWordCharacter(char, remaining, isRTL)) {\n started = true\n dist += charDist\n } else if (!started) {\n dist += charDist\n } else {\n break\n }\n\n text = remaining\n }\n\n return dist\n}\n\n/**\n * Split a string in two parts at a given distance starting from the end when\n * `isRTL` is set to `true`.\n */\n\nexport const splitByCharacterDistance = (\n str: string,\n dist: number,\n isRTL?: boolean\n): [string, string] => {\n if (isRTL) {\n const at = str.length - dist\n return [str.slice(at, str.length), str.slice(0, at)]\n }\n\n return [str.slice(0, dist), str.slice(dist)]\n}\n\n/**\n * Check if a character is a word character. The `remaining` argument is used\n * because sometimes you must read subsequent characters to truly determine it.\n */\n\nconst isWordCharacter = (\n char: string,\n remaining: string,\n isRTL = false\n): boolean => {\n if (SPACE.test(char)) {\n return false\n }\n\n // Chameleons count as word characters as long as they're in a word, so\n // recurse to see if the next one is a word character or not.\n if (CHAMELEON.test(char)) {\n const charDist = getCharacterDistance(remaining, isRTL)\n const [nextChar, nextRemaining] = splitByCharacterDistance(\n remaining,\n charDist,\n isRTL\n )\n\n if (isWordCharacter(nextChar, nextRemaining, isRTL)) {\n return true\n }\n }\n\n if (PUNCTUATION.test(char)) {\n return false\n }\n\n return true\n}\n\n/**\n * Iterate on codepoints from right to left.\n */\n\nexport const codepointsIteratorRTL = function* (str: string) {\n const end = str.length - 1\n\n for (let i = 0; i < str.length; i++) {\n const char1 = str.charAt(end - i)\n\n if (isLowSurrogate(char1.charCodeAt(0))) {\n const char2 = str.charAt(end - i - 1)\n if (isHighSurrogate(char2.charCodeAt(0))) {\n yield char2 + char1\n\n i++\n continue\n }\n }\n\n yield char1\n }\n}\n\n/**\n * Is `charCode` a high surrogate.\n *\n * https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates\n */\n\nconst isHighSurrogate = (charCode: number) => {\n return charCode >= 0xd800 && charCode <= 0xdbff\n}\n\n/**\n * Is `charCode` a low surrogate.\n *\n * https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates\n */\n\nconst isLowSurrogate = (charCode: number) => {\n return charCode >= 0xdc00 && charCode <= 0xdfff\n}\n\nenum CodepointType {\n None = 0,\n Extend = 1 << 0,\n ZWJ = 1 << 1,\n RI = 1 << 2,\n Prepend = 1 << 3,\n SpacingMark = 1 << 4,\n L = 1 << 5,\n V = 1 << 6,\n T = 1 << 7,\n LV = 1 << 8,\n LVT = 1 << 9,\n ExtPict = 1 << 10,\n Any = 1 << 11,\n}\n\nconst reExtend = /^[\\p{Gr_Ext}\\p{EMod}]$/u\nconst rePrepend =\n /^[\\u0600-\\u0605\\u06DD\\u070F\\u0890-\\u0891\\u08E2\\u0D4E\\u{110BD}\\u{110CD}\\u{111C2}-\\u{111C3}\\u{1193F}\\u{11941}\\u{11A3A}\\u{11A84}-\\u{11A89}\\u{11D46}]$/u\nconst reSpacingMark =\n /^[\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F\\u0982-\\u0983\\u09BF-\\u09C0\\u09C7-\\u09C8\\u09CB-\\u09CC\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB-\\u0ACC\\u0B02-\\u0B03\\u0B40\\u0B47-\\u0B48\\u0B4B-\\u0B4C\\u0BBF\\u0BC1-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82-\\u0C83\\u0CBE\\u0CC0-\\u0CC1\\u0CC3-\\u0CC4\\u0CC7-\\u0CC8\\u0CCA-\\u0CCB\\u0D02-\\u0D03\\u0D3F-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D82-\\u0D83\\u0DD0-\\u0DD1\\u0DD8-\\u0DDE\\u0DF2-\\u0DF3\\u0E33\\u0EB3\\u0F3E-\\u0F3F\\u0F7F\\u1031\\u103B-\\u103C\\u1056-\\u1057\\u1084\\u1715\\u1734\\u17B6\\u17BE-\\u17C5\\u17C7-\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930-\\u1931\\u1933-\\u1938\\u1A19-\\u1A1A\\u1A55\\u1A57\\u1A6D-\\u1A72\\u1B04\\u1B3B\\u1B3D-\\u1B41\\u1B43-\\u1B44\\u1B82\\u1BA1\\u1BA6-\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2-\\u1BF3\\u1C24-\\u1C2B\\u1C34-\\u1C35\\u1CE1\\u1CF7\\uA823-\\uA824\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C3\\uA952-\\uA953\\uA983\\uA9B4-\\uA9B5\\uA9BA-\\uA9BB\\uA9BE-\\uA9C0\\uAA2F-\\uAA30\\uAA33-\\uAA34\\uAA4D\\uAAEB\\uAAEE-\\uAAEF\\uAAF5\\uABE3-\\uABE4\\uABE6-\\uABE7\\uABE9-\\uABEA\\uABEC\\u{11000}\\u{11002}\\u{11082}\\u{110B0}-\\u{110B2}\\u{110B7}-\\u{110B8}\\u{1112C}\\u{11145}-\\u{11146}\\u{11182}\\u{111B3}-\\u{111B5}\\u{111BF}-\\u{111C0}\\u{111CE}\\u{1122C}-\\u{1122E}\\u{11232}-\\u{11233}\\u{11235}\\u{112E0}-\\u{112E2}\\u{11302}-\\u{11303}\\u{1133F}\\u{11341}-\\u{11344}\\u{11347}-\\u{11348}\\u{1134B}-\\u{1134D}\\u{11362}-\\u{11363}\\u{11435}-\\u{11437}\\u{11440}-\\u{11441}\\u{11445}\\u{114B1}-\\u{114B2}\\u{114B9}\\u{114BB}-\\u{114BC}\\u{114BE}\\u{114C1}\\u{115B0}-\\u{115B1}\\u{115B8}-\\u{115BB}\\u{115BE}\\u{11630}-\\u{11632}\\u{1163B}-\\u{1163C}\\u{1163E}\\u{116AC}\\u{116AE}-\\u{116AF}\\u{116B6}\\u{11726}\\u{1182C}-\\u{1182E}\\u{11838}\\u{11931}-\\u{11935}\\u{11937}-\\u{11938}\\u{1193D}\\u{11940}\\u{11942}\\u{119D1}-\\u{119D3}\\u{119DC}-\\u{119DF}\\u{119E4}\\u{11A39}\\u{11A57}-\\u{11A58}\\u{11A97}\\u{11C2F}\\u{11C3E}\\u{11CA9}\\u{11CB1}\\u{11CB4}\\u{11D8A}-\\u{11D8E}\\u{11D93}-\\u{11D94}\\u{11D96}\\u{11EF5}-\\u{11EF6}\\u{16F51}-\\u{16F87}\\u{16FF0}-\\u{16FF1}\\u{1D166}\\u{1D16D}]$/u\nconst reL = /^[\\u1100-\\u115F\\uA960-\\uA97C]$/u\nconst reV = /^[\\u1160-\\u11A7\\uD7B0-\\uD7C6]$/u\nconst reT = /^[\\u11A8-\\u11FF\\uD7CB-\\uD7FB]$/u\nconst reLV =\n /^[\\uAC00\\uAC1C\\uAC38\\uAC54\\uAC70\\uAC8C\\uACA8\\uACC4\\uACE0\\uACFC\\uAD18\\uAD34\\uAD50\\uAD6C\\uAD88\\uADA4\\uADC0\\uADDC\\uADF8\\uAE14\\uAE30\\uAE4C\\uAE68\\uAE84\\uAEA0\\uAEBC\\uAED8\\uAEF4\\uAF10\\uAF2C\\uAF48\\uAF64\\uAF80\\uAF9C\\uAFB8\\uAFD4\\uAFF0\\uB00C\\uB028\\uB044\\uB060\\uB07C\\uB098\\uB0B4\\uB0D0\\uB0EC\\uB108\\uB124\\uB140\\uB15C\\uB178\\uB194\\uB1B0\\uB1CC\\uB1E8\\uB204\\uB220\\uB23C\\uB258\\uB274\\uB290\\uB2AC\\uB2C8\\uB2E4\\uB300\\uB31C\\uB338\\uB354\\uB370\\uB38C\\uB3A8\\uB3C4\\uB3E0\\uB3FC\\uB418\\uB434\\uB450\\uB46C\\uB488\\uB4A4\\uB4C0\\uB4DC\\uB4F8\\uB514\\uB530\\uB54C\\uB568\\uB584\\uB5A0\\uB5BC\\uB5D8\\uB5F4\\uB610\\uB62C\\uB648\\uB664\\uB680\\uB69C\\uB6B8\\uB6D4\\uB6F0\\uB70C\\uB728\\uB744\\uB760\\uB77C\\uB798\\uB7B4\\uB7D0\\uB7EC\\uB808\\uB824\\uB840\\uB85C\\uB878\\uB894\\uB8B0\\uB8CC\\uB8E8\\uB904\\uB920\\uB93C\\uB958\\uB974\\uB990\\uB9AC\\uB9C8\\uB9E4\\uBA00\\uBA1C\\uBA38\\uBA54\\uBA70\\uBA8C\\uBAA8\\uBAC4\\uBAE0\\uBAFC\\uBB18\\uBB34\\uBB50\\uBB6C\\uBB88\\uBBA4\\uBBC0\\uBBDC\\uBBF8\\uBC14\\uBC30\\uBC4C\\uBC68\\uBC84\\uBCA0\\uBCBC\\uBCD8\\uBCF4\\uBD10\\uBD2C\\uBD48\\uBD64\\uBD80\\uBD9C\\uBDB8\\uBDD4\\uBDF0\\uBE0C\\uBE28\\uBE44\\uBE60\\uBE7C\\uBE98\\uBEB4\\uBED0\\uBEEC\\uBF08\\uBF24\\uBF40\\uBF5C\\uBF78\\uBF94\\uBFB0\\uBFCC\\uBFE8\\uC004\\uC020\\uC03C\\uC058\\uC074\\uC090\\uC0AC\\uC0C8\\uC0E4\\uC100\\uC11C\\uC138\\uC154\\uC170\\uC18C\\uC1A8\\uC1C4\\uC1E0\\uC1FC\\uC218\\uC234\\uC250\\uC26C\\uC288\\uC2A4\\uC2C0\\uC2DC\\uC2F8\\uC314\\uC330\\uC34C\\uC368\\uC384\\uC3A0\\uC3BC\\uC3D8\\uC3F4\\uC410\\uC42C\\uC448\\uC464\\uC480\\uC49C\\uC4B8\\uC4D4\\uC4F0\\uC50C\\uC528\\uC544\\uC560\\uC57C\\uC598\\uC5B4\\uC5D0\\uC5EC\\uC608\\uC624\\uC640\\uC65C\\uC678\\uC694\\uC6B0\\uC6CC\\uC6E8\\uC704\\uC720\\uC73C\\uC758\\uC774\\uC790\\uC7AC\\uC7C8\\uC7E4\\uC800\\uC81C\\uC838\\uC854\\uC870\\uC88C\\uC8A8\\uC8C4\\uC8E0\\uC8FC\\uC918\\uC934\\uC950\\uC96C\\uC988\\uC9A4\\uC9C0\\uC9DC\\uC9F8\\uCA14\\uCA30\\uCA4C\\uCA68\\uCA84\\uCAA0\\uCABC\\uCAD8\\uCAF4\\uCB10\\uCB2C\\uCB48\\uCB64\\uCB80\\uCB9C\\uCBB8\\uCBD4\\uCBF0\\uCC0C\\uCC28\\uCC44\\uCC60\\uCC7C\\uCC98\\uCCB4\\uCCD0\\uCCEC\\uCD08\\uCD24\\uCD40\\uCD5C\\uCD78\\uCD94\\uCDB0\\uCDCC\\uCDE8\\uCE04\\uCE20\\uCE3C\\uCE58\\uCE74\\uCE90\\uCEAC\\uCEC8\\uCEE4\\uCF00\\uCF1C\\uCF38\\uCF54\\uCF70\\uCF8C\\uCFA8\\uCFC4\\uCFE0\\uCFFC\\uD018\\uD034\\uD050\\uD06C\\uD088\\uD0A4\\uD0C0\\uD0DC\\uD0F8\\uD114\\uD130\\uD14C\\uD168\\uD184\\uD1A0\\uD1BC\\uD1D8\\uD1F4\\uD210\\uD22C\\uD248\\uD264\\uD280\\uD29C\\uD2B8\\uD2D4\\uD2F0\\uD30C\\uD328\\uD344\\uD360\\uD37C\\uD398\\uD3B4\\uD3D0\\uD3EC\\uD408\\uD424\\uD440\\uD45C\\uD478\\uD494\\uD4B0\\uD4CC\\uD4E8\\uD504\\uD520\\uD53C\\uD558\\uD574\\uD590\\uD5AC\\uD5C8\\uD5E4\\uD600\\uD61C\\uD638\\uD654\\uD670\\uD68C\\uD6A8\\uD6C4\\uD6E0\\uD6FC\\uD718\\uD734\\uD750\\uD76C\\uD788]$/u\nconst reLVT =\n /^[\\uAC01-\\uAC1B\\uAC1D-\\uAC37\\uAC39-\\uAC53\\uAC55-\\uAC6F\\uAC71-\\uAC8B\\uAC8D-\\uACA7\\uACA9-\\uACC3\\uACC5-\\uACDF\\uACE1-\\uACFB\\uACFD-\\uAD17\\uAD19-\\uAD33\\uAD35-\\uAD4F\\uAD51-\\uAD6B\\uAD6D-\\uAD87\\uAD89-\\uADA3\\uADA5-\\uADBF\\uADC1-\\uADDB\\uADDD-\\uADF7\\uADF9-\\uAE13\\uAE15-\\uAE2F\\uAE31-\\uAE4B\\uAE4D-\\uAE67\\uAE69-\\uAE83\\uAE85-\\uAE9F\\uAEA1-\\uAEBB\\uAEBD-\\uAED7\\uAED9-\\uAEF3\\uAEF5-\\uAF0F\\uAF11-\\uAF2B\\uAF2D-\\uAF47\\uAF49-\\uAF63\\uAF65-\\uAF7F\\uAF81-\\uAF9B\\uAF9D-\\uAFB7\\uAFB9-\\uAFD3\\uAFD5-\\uAFEF\\uAFF1-\\uB00B\\uB00D-\\uB027\\uB029-\\uB043\\uB045-\\uB05F\\uB061-\\uB07B\\uB07D-\\uB097\\uB099-\\uB0B3\\uB0B5-\\uB0CF\\uB0D1-\\uB0EB\\uB0ED-\\uB107\\uB109-\\uB123\\uB125-\\uB13F\\uB141-\\uB15B\\uB15D-\\uB177\\uB179-\\uB193\\uB195-\\uB1AF\\uB1B1-\\uB1CB\\uB1CD-\\uB1E7\\uB1E9-\\uB203\\uB205-\\uB21F\\uB221-\\uB23B\\uB23D-\\uB257\\uB259-\\uB273\\uB275-\\uB28F\\uB291-\\uB2AB\\uB2AD-\\uB2C7\\uB2C9-\\uB2E3\\uB2E5-\\uB2FF\\uB301-\\uB31B\\uB31D-\\uB337\\uB339-\\uB353\\uB355-\\uB36F\\uB371-\\uB38B\\uB38D-\\uB3A7\\uB3A9-\\uB3C3\\uB3C5-\\uB3DF\\uB3E1-\\uB3FB\\uB3FD-\\uB417\\uB419-\\uB433\\uB435-\\uB44F\\uB451-\\uB46B\\uB46D-\\uB487\\uB489-\\uB4A3\\uB4A5-\\uB4BF\\uB4C1-\\uB4DB\\uB4DD-\\uB4F7\\uB4F9-\\uB513\\uB515-\\uB52F\\uB531-\\uB54B\\uB54D-\\uB567\\uB569-\\uB583\\uB585-\\uB59F\\uB5A1-\\uB5BB\\uB5BD-\\uB5D7\\uB5D9-\\uB5F3\\uB5F5-\\uB60F\\uB611-\\uB62B\\uB62D-\\uB647\\uB649-\\uB663\\uB665-\\uB67F\\uB681-\\uB69B\\uB69D-\\uB6B7\\uB6B9-\\uB6D3\\uB6D5-\\uB6EF\\uB6F1-\\uB70B\\uB70D-\\uB727\\uB729-\\uB743\\uB745-\\uB75F\\uB761-\\uB77B\\uB77D-\\uB797\\uB799-\\uB7B3\\uB7B5-\\uB7CF\\uB7D1-\\uB7EB\\uB7ED-\\uB807\\uB809-\\uB823\\uB825-\\uB83F\\uB841-\\uB85B\\uB85D-\\uB877\\uB879-\\uB893\\uB895-\\uB8AF\\uB8B1-\\uB8CB\\uB8CD-\\uB8E7\\uB8E9-\\uB903\\uB905-\\uB91F\\uB921-\\uB93B\\uB93D-\\uB957\\uB959-\\uB973\\uB975-\\uB98F\\uB991-\\uB9AB\\uB9AD-\\uB9C7\\uB9C9-\\uB9E3\\uB9E5-\\uB9FF\\uBA01-\\uBA1B\\uBA1D-\\uBA37\\uBA39-\\uBA53\\uBA55-\\uBA6F\\uBA71-\\uBA8B\\uBA8D-\\uBAA7\\uBAA9-\\uBAC3\\uBAC5-\\uBADF\\uBAE1-\\uBAFB\\uBAFD-\\uBB17\\uBB19-\\uBB33\\uBB35-\\uBB4F\\uBB51-\\uBB6B\\uBB6D-\\uBB87\\uBB89-\\uBBA3\\uBBA5-\\uBBBF\\uBBC1-\\uBBDB\\uBBDD-\\uBBF7\\uBBF9-\\uBC13\\uBC15-\\uBC2F\\uBC31-\\uBC4B\\uBC4D-\\uBC67\\uBC69-\\uBC83\\uBC85-\\uBC9F\\uBCA1-\\uBCBB\\uBCBD-\\uBCD7\\uBCD9-\\uBCF3\\uBCF5-\\uBD0F\\uBD11-\\uBD2B\\uBD2D-\\uBD47\\uBD49-\\uBD63\\uBD65-\\uBD7F\\uBD81-\\uBD9B\\uBD9D-\\uBDB7\\uBDB9-\\uBDD3\\uBDD5-\\uBDEF\\uBDF1-\\uBE0B\\uBE0D-\\uBE27\\uBE29-\\uBE43\\uBE45-\\uBE5F\\uBE61-\\uBE7B\\uBE7D-\\uBE97\\uBE99-\\uBEB3\\uBEB5-\\uBECF\\uBED1-\\uBEEB\\uBEED-\\uBF07\\uBF09-\\uBF23\\uBF25-\\uBF3F\\uBF41-\\uBF5B\\uBF5D-\\uBF77\\uBF79-\\uBF93\\uBF95-\\uBFAF\\uBFB1-\\uBFCB\\uBFCD-\\uBFE7\\uBFE9-\\uC003\\uC005-\\uC01F\\uC021-\\uC03B\\uC03D-\\uC057\\uC059-\\uC073\\uC075-\\uC08F\\uC091-\\uC0AB\\uC0AD-\\uC0C7\\uC0C9-\\uC0E3\\uC0E5-\\uC0FF\\uC101-\\uC11B\\uC11D-\\uC137\\uC139-\\uC153\\uC155-\\uC16F\\uC171-\\uC18B\\uC18D-\\uC1A7\\uC1A9-\\uC1C3\\uC1C5-\\uC1DF\\uC1E1-\\uC1FB\\uC1FD-\\uC217\\uC219-\\uC233\\uC235-\\uC24F\\uC251-\\uC26B\\uC26D-\\uC287\\uC289-\\uC2A3\\uC2A5-\\uC2BF\\uC2C1-\\uC2DB\\uC2DD-\\uC2F7\\uC2F9-\\uC313\\uC315-\\uC32F\\uC331-\\uC34B\\uC34D-\\uC367\\uC369-\\uC383\\uC385-\\uC39F\\uC3A1-\\uC3BB\\uC3BD-\\uC3D7\\uC3D9-\\uC3F3\\uC3F5-\\uC40F\\uC411-\\uC42B\\uC42D-\\uC447\\uC449-\\uC463\\uC465-\\uC47F\\uC481-\\uC49B\\uC49D-\\uC4B7\\uC4B9-\\uC4D3\\uC4D5-\\uC4EF\\uC4F1-\\uC50B\\uC50D-\\uC527\\uC529-\\uC543\\uC545-\\uC55F\\uC561-\\uC57B\\uC57D-\\uC597\\uC599-\\uC5B3\\uC5B5-\\uC5CF\\uC5D1-\\uC5EB\\uC5ED-\\uC607\\uC609-\\uC623\\uC625-\\uC63F\\uC641-\\uC65B\\uC65D-\\uC677\\uC679-\\uC693\\uC695-\\uC6AF\\uC6B1-\\uC6CB\\uC6CD-\\uC6E7\\uC6E9-\\uC703\\uC705-\\uC71F\\uC721-\\uC73B\\uC73D-\\uC757\\uC759-\\uC773\\uC775-\\uC78F\\uC791-\\uC7AB\\uC7AD-\\uC7C7\\uC7C9-\\uC7E3\\uC7E5-\\uC7FF\\uC801-\\uC81B\\uC81D-\\uC837\\uC839-\\uC853\\uC855-\\uC86F\\uC871-\\uC88B\\uC88D-\\uC8A7\\uC8A9-\\uC8C3\\uC8C5-\\uC8DF\\uC8E1-\\uC8FB\\uC8FD-\\uC917\\uC919-\\uC933\\uC935-\\uC94F\\uC951-\\uC96B\\uC96D-\\uC987\\uC989-\\uC9A3\\uC9A5-\\uC9BF\\uC9C1-\\uC9DB\\uC9DD-\\uC9F7\\uC9F9-\\uCA13\\uCA15-\\uCA2F\\uCA31-\\uCA4B\\uCA4D-\\uCA67\\uCA69-\\uCA83\\uCA85-\\uCA9F\\uCAA1-\\uCABB\\uCABD-\\uCAD7\\uCAD9-\\uCAF3\\uCAF5-\\uCB0F\\uCB11-\\uCB2B\\uCB2D-\\uCB47\\uCB49-\\uCB63\\uCB65-\\uCB7F\\uCB81-\\uCB9B\\uCB9D-\\uCBB7\\uCBB9-\\uCBD3\\uCBD5-\\uCBEF\\uCBF1-\\uCC0B\\uCC0D-\\uCC27\\uCC29-\\uCC43\\uCC45-\\uCC5F\\uCC61-\\uCC7B\\uCC7D-\\uCC97\\uCC99-\\uCCB3\\uCCB5-\\uCCCF\\uCCD1-\\uCCEB\\uCCED-\\uCD07\\uCD09-\\uCD23\\uCD25-\\uCD3F\\uCD41-\\uCD5B\\uCD5D-\\uCD77\\uCD79-\\uCD93\\uCD95-\\uCDAF\\uCDB1-\\uCDCB\\uCDCD-\\uCDE7\\uCDE9-\\uCE03\\uCE05-\\uCE1F\\uCE21-\\uCE3B\\uCE3D-\\uCE57\\uCE59-\\uCE73\\uCE75-\\uCE8F\\uCE91-\\uCEAB\\uCEAD-\\uCEC7\\uCEC9-\\uCEE3\\uCEE5-\\uCEFF\\uCF01-\\uCF1B\\uCF1D-\\uCF37\\uCF39-\\uCF53\\uCF55-\\uCF6F\\uCF71-\\uCF8B\\uCF8D-\\uCFA7\\uCFA9-\\uCFC3\\uCFC5-\\uCFDF\\uCFE1-\\uCFFB\\uCFFD-\\uD017\\uD019-\\uD033\\uD035-\\uD04F\\uD051-\\uD06B\\uD06D-\\uD087\\uD089-\\uD0A3\\uD0A5-\\uD0BF\\uD0C1-\\uD0DB\\uD0DD-\\uD0F7\\uD0F9-\\uD113\\uD115-\\uD12F\\uD131-\\uD14B\\uD14D-\\uD167\\uD169-\\uD183\\uD185-\\uD19F\\uD1A1-\\uD1BB\\uD1BD-\\uD1D7\\uD1D9-\\uD1F3\\uD1F5-\\uD20F\\uD211-\\uD22B\\uD22D-\\uD247\\uD249-\\uD263\\uD265-\\uD27F\\uD281-\\uD29B\\uD29D-\\uD2B7\\uD2B9-\\uD2D3\\uD2D5-\\uD2EF\\uD2F1-\\uD30B\\uD30D-\\uD327\\uD329-\\uD343\\uD345-\\uD35F\\uD361-\\uD37B\\uD37D-\\uD397\\uD399-\\uD3B3\\uD3B5-\\uD3CF\\uD3D1-\\uD3EB\\uD3ED-\\uD407\\uD409-\\uD423\\uD425-\\uD43F\\uD441-\\uD45B\\uD45D-\\uD477\\uD479-\\uD493\\uD495-\\uD4AF\\uD4B1-\\uD4CB\\uD4CD-\\uD4E7\\uD4E9-\\uD503\\uD505-\\uD51F\\uD521-\\uD53B\\uD53D-\\uD557\\uD559-\\uD573\\uD575-\\uD58F\\uD591-\\uD5AB\\uD5AD-\\uD5C7\\uD5C9-\\uD5E3\\uD5E5-\\uD5FF\\uD601-\\uD61B\\uD61D-\\uD637\\uD639-\\uD653\\uD655-\\uD66F\\uD671-\\uD68B\\uD68D-\\uD6A7\\uD6A9-\\uD6C3\\uD6C5-\\uD6DF\\uD6E1-\\uD6FB\\uD6FD-\\uD717\\uD719-\\uD733\\uD735-\\uD74F\\uD751-\\uD76B\\uD76D-\\uD787\\uD789-\\uD7A3]$/u\nconst reExtPict = /^\\p{ExtPict}$/u\n\nconst getCodepointType = (char: string, code: number): CodepointType => {\n let type = CodepointType.Any\n if (char.search(reExtend) !== -1) {\n type |= CodepointType.Extend\n }\n if (code === 0x200d) {\n type |= CodepointType.ZWJ\n }\n if (code >= 0x1f1e6 && code <= 0x1f1ff) {\n type |= CodepointType.RI\n }\n if (char.search(rePrepend) !== -1) {\n type |= CodepointType.Prepend\n }\n if (char.search(reSpacingMark) !== -1) {\n type |= CodepointType.SpacingMark\n }\n if (char.search(reL) !== -1) {\n type |= CodepointType.L\n }\n if (char.search(reV) !== -1) {\n type |= CodepointType.V\n }\n if (char.search(reT) !== -1) {\n type |= CodepointType.T\n }\n if (char.search(reLV) !== -1) {\n type |= CodepointType.LV\n }\n if (char.search(reLVT) !== -1) {\n type |= CodepointType.LVT\n }\n if (char.search(reExtPict) !== -1) {\n type |= CodepointType.ExtPict\n }\n\n return type\n}\n\nfunction intersects(x: CodepointType, y: CodepointType) {\n return (x & y) !== 0\n}\n\nconst NonBoundaryPairs: [CodepointType, CodepointType][] = [\n // GB6\n [\n CodepointType.L,\n CodepointType.L | CodepointType.V | CodepointType.LV | CodepointType.LVT,\n ],\n // GB7\n [CodepointType.LV | CodepointType.V, CodepointType.V | CodepointType.T],\n // GB8\n [CodepointType.LVT | CodepointType.T, CodepointType.T],\n // GB9\n [CodepointType.Any, CodepointType.Extend | CodepointType.ZWJ],\n // GB9a\n [CodepointType.Any, CodepointType.SpacingMark],\n // GB9b\n [CodepointType.Prepend, CodepointType.Any],\n // GB11\n [CodepointType.ZWJ, CodepointType.ExtPict],\n // GB12 and GB13\n [CodepointType.RI, CodepointType.RI],\n]\n\nfunction isBoundaryPair(left: CodepointType, right: CodepointType) {\n return (\n NonBoundaryPairs.findIndex(\n r => intersects(left, r[0]) && intersects(right, r[1])\n ) === -1\n )\n}\n\nconst endingEmojiZWJ = /\\p{ExtPict}[\\p{Gr_Ext}\\p{EMod}]*\\u200D$/u\nconst endsWithEmojiZWJ = (str: string): boolean => {\n return str.search(endingEmojiZWJ) !== -1\n}\n\nconst endingRIs = /\\p{RI}+$/gu\nconst endsWithOddNumberOfRIs = (str: string): boolean => {\n const match = str.match(endingRIs)\n if (match === null) {\n return false\n } else {\n // A RI is represented by a surrogate pair.\n const numRIs = match[0].length / 2\n return numRIs % 2 === 1\n }\n}\n","import { Editor, EditorInterface } from '../interfaces/editor'\nimport { Range } from '../interfaces/range'\nimport { Node } from '../interfaces/node'\nimport { Operation } from '../interfaces/operation'\nimport { isObject } from '../utils'\n\nexport const isEditor: EditorInterface['isEditor'] = (\n value: any,\n { deep = false } = {}\n): value is Editor => {\n if (!isObject(value)) {\n return false\n }\n\n const isEditor =\n typeof value.addMark === 'function' &&\n typeof value.apply === 'function' &&\n typeof value.deleteFragment === 'function' &&\n typeof value.insertBreak === 'function' &&\n typeof value.insertSoftBreak === 'function' &&\n typeof value.insertFragment === 'function' &&\n typeof value.insertNode === 'function' &&\n typeof value.insertText === 'function' &&\n typeof value.isElementReadOnly === 'function' &&\n typeof value.isInline === 'function' &&\n typeof value.isSelectable === 'function' &&\n typeof value.isVoid === 'function' &&\n typeof value.normalizeNode === 'function' &&\n typeof value.onChange === 'function' &&\n typeof value.removeMark === 'function' &&\n typeof value.getDirtyPaths === 'function' &&\n (value.marks === null || isObject(value.marks)) &&\n (value.selection === null || Range.isRange(value.selection)) &&\n (!deep || Node.isNodeList(value.children)) &&\n Operation.isOperationList(value.operations)\n\n return isEditor\n}\n","import {\n Ancestor,\n Descendant,\n Element,\n ExtendedType,\n Location,\n Node,\n NodeEntry,\n Operation,\n Path,\n PathRef,\n Point,\n PointRef,\n Range,\n RangeRef,\n Span,\n Text,\n Transforms,\n} from '..'\nimport {\n LeafEdge,\n MaximizeMode,\n RangeDirection,\n SelectionMode,\n TextDirection,\n TextUnit,\n TextUnitAdjustment,\n} from '../types/types'\nimport { OmitFirstArg } from '../utils/types'\nimport { isEditor } from '../editor/is-editor'\nimport {\n TextInsertFragmentOptions,\n TextInsertTextOptions,\n} from './transforms/text'\nimport { NodeInsertNodesOptions } from './transforms/node'\n\n/**\n * The `Editor` interface stores all the state of a Slate editor. It is extended\n * by plugins that wish to add their own helpers and implement new behaviors.\n */\nexport interface BaseEditor {\n // Core state.\n\n children: Descendant[]\n selection: Selection\n operations: Operation[]\n marks: EditorMarks | null\n\n // Overrideable core methods.\n\n apply: (operation: Operation) => void\n getDirtyPaths: (operation: Operation) => Path[]\n getFragment: () => Descendant[]\n isElementReadOnly: (element: Element) => boolean\n isSelectable: (element: Element) => boolean\n markableVoid: (element: Element) => boolean\n normalizeNode: (\n entry: NodeEntry,\n options?: {\n operation?: Operation\n fallbackElement?: () => Element\n }\n ) => void\n onChange: (options?: { operation?: Operation }) => void\n shouldNormalize: ({\n iteration,\n dirtyPaths,\n operation,\n }: {\n iteration: number\n initialDirtyPathsLength: number\n dirtyPaths: Path[]\n operation?: Operation\n }) => boolean\n\n // Overrideable core transforms.\n\n addMark: OmitFirstArg<typeof Editor.addMark>\n collapse: OmitFirstArg<typeof Transforms.collapse>\n delete: OmitFirstArg<typeof Transforms.delete>\n deleteBackward: (unit: TextUnit) => void\n deleteForward: (unit: TextUnit) => void\n deleteFragment: OmitFirstArg<typeof Editor.deleteFragment>\n deselect: OmitFirstArg<typeof Transforms.deselect>\n insertBreak: OmitFirstArg<typeof Editor.insertBreak>\n insertFragment: OmitFirstArg<typeof Transforms.insertFragment>\n insertNode: OmitFirstArg<typeof Editor.insertNode>\n insertNodes: OmitFirstArg<typeof Transforms.insertNodes>\n insertSoftBreak: OmitFirstArg<typeof Editor.insertSoftBreak>\n insertText: OmitFirstArg<typeof Transforms.insertText>\n liftNodes: OmitFirstArg<typeof Transforms.liftNodes>\n mergeNodes: OmitFirstArg<typeof Transforms.mergeNodes>\n move: OmitFirstArg<typeof Transforms.move>\n moveNodes: OmitFirstArg<typeof Transforms.moveNodes>\n normalize: OmitFirstArg<typeof Editor.normalize>\n removeMark: OmitFirstArg<typeof Editor.removeMark>\n removeNodes: OmitFirstArg<typeof Transforms.removeNodes>\n select: OmitFirstArg<typeof Transforms.select>\n setNodes: <T extends Node>(\n props: Partial<T>,\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: MaximizeMode\n hanging?: boolean\n split?: boolean\n voids?: boolean\n compare?: PropsCompare\n merge?: PropsMerge\n }\n ) => void\n setNormalizing: OmitFirstArg<typeof Editor.setNormalizing>\n setPoint: OmitFirstArg<typeof Transforms.setPoint>\n setSelection: OmitFirstArg<typeof Transforms.setSelection>\n splitNodes: OmitFirstArg<typeof Transforms.splitNodes>\n unsetNodes: OmitFirstArg<typeof Transforms.unsetNodes>\n unwrapNodes: OmitFirstArg<typeof Transforms.unwrapNodes>\n withoutNormalizing: OmitFirstArg<typeof Editor.withoutNormalizing>\n wrapNodes: OmitFirstArg<typeof Transforms.wrapNodes>\n\n // Overrideable core queries.\n\n above: <T extends Ancestor>(\n options?: EditorAboveOptions<T>\n ) => NodeEntry<T> | undefined\n after: OmitFirstArg<typeof Editor.after>\n before: OmitFirstArg<typeof Editor.before>\n edges: OmitFirstArg<typeof Editor.edges>\n elementReadOnly: OmitFirstArg<typeof Editor.elementReadOnly>\n end: OmitFirstArg<typeof Editor.end>\n first: OmitFirstArg<typeof Editor.first>\n fragment: OmitFirstArg<typeof Editor.fragment>\n getMarks: OmitFirstArg<typeof Editor.marks>\n hasBlocks: OmitFirstArg<typeof Editor.hasBlocks>\n hasInlines: OmitFirstArg<typeof Editor.hasInlines>\n hasPath: OmitFirstArg<typeof Editor.hasPath>\n hasTexts: OmitFirstArg<typeof Editor.hasTexts>\n isBlock: OmitFirstArg<typeof Editor.isBlock>\n isEdge: OmitFirstArg<typeof Editor.isEdge>\n isEmpty: OmitFirstArg<typeof Editor.isEmpty>\n isEnd: OmitFirstArg<typeof Editor.isEnd>\n isInline: OmitFirstArg<typeof Editor.isInline>\n isNormalizing: OmitFirstArg<typeof Editor.isNormalizing>\n isStart: OmitFirstArg<typeof Editor.isStart>\n isVoid: OmitFirstArg<typeof Editor.isVoid>\n last: OmitFirstArg<typeof Editor.last>\n leaf: OmitFirstArg<typeof Editor.leaf>\n levels: <T extends Node>(\n options?: EditorLevelsOptions<T>\n ) => Generator<NodeEntry<T>, void, undefined>\n next: <T extends Descendant>(\n options?: EditorNextOptions<T>\n ) => NodeEntry<T> | undefined\n node: OmitFirstArg<typeof Editor.node>\n nodes: <T extends Node>(\n options?: EditorNodesOptions<T>\n ) => Generator<NodeEntry<T>, void, undefined>\n parent: OmitFirstArg<typeof Editor.parent>\n path: OmitFirstArg<typeof Editor.path>\n pathRef: OmitFirstArg<typeof Editor.pathRef>\n pathRefs: OmitFirstArg<typeof Editor.pathRefs>\n point: OmitFirstArg<typeof Editor.point>\n pointRef: OmitFirstArg<typeof Editor.pointRef>\n pointRefs: OmitFirstArg<typeof Editor.pointRefs>\n positions: OmitFirstArg<typeof Editor.positions>\n previous: <T extends Node>(\n options?: EditorPreviousOptions<T>\n ) => NodeEntry<T> | undefined\n range: OmitFirstArg<typeof Editor.range>\n rangeRef: OmitFirstArg<typeof Editor.rangeRef>\n rangeRefs: OmitFirstArg<typeof Editor.rangeRefs>\n start: OmitFirstArg<typeof Editor.start>\n string: OmitFirstArg<typeof Editor.string>\n unhangRange: OmitFirstArg<typeof Editor.unhangRange>\n void: OmitFirstArg<typeof Editor.void>\n shouldMergeNodesRemovePrevNode: OmitFirstArg<\n typeof Editor.shouldMergeNodesRemovePrevNode\n >\n}\n\nexport type Editor = ExtendedType<'Editor', BaseEditor>\n\nexport type BaseSelection = Range | null\n\nexport type Selection = ExtendedType<'Selection', BaseSelection>\n\nexport type EditorMarks = Omit<Text, 'text'>\n\nexport interface EditorAboveOptions<T extends Ancestor> {\n at?: Location\n match?: NodeMatch<T>\n mode?: MaximizeMode\n voids?: boolean\n}\n\nexport interface EditorAfterOptions {\n distance?: number\n unit?: TextUnitAdjustment\n voids?: boolean\n}\n\nexport interface EditorBeforeOptions {\n distance?: number\n unit?: TextUnitAdjustment\n voids?: boolean\n}\n\nexport interface EditorDirectedDeletionOptions {\n unit?: TextUnit\n}\n\nexport interface EditorElementReadOnlyOptions {\n at?: Location\n mode?: MaximizeMode\n voids?: boolean\n}\n\nexport interface EditorFragmentDeletionOptions {\n direction?: TextDirection\n}\n\nexport interface EditorIsEditorOptions {\n deep?: boolean\n}\n\nexport interface EditorLeafOptions {\n depth?: number\n edge?: LeafEdge\n}\n\nexport interface EditorLevelsOptions<T extends Node> {\n at?: Location\n match?: NodeMatch<T>\n reverse?: boolean\n voids?: boolean\n}\n\nexport interface EditorNextOptions<T extends Descendant> {\n at?: Location\n match?: NodeMatch<T>\n mode?: SelectionMode\n voids?: boolean\n}\n\nexport interface EditorNodeOptions {\n depth?: number\n edge?: LeafEdge\n}\n\nexport interface EditorNodesOptions<T extends Node> {\n at?: Location | Span\n match?: NodeMatch<T>\n mode?: SelectionMode\n universal?: boolean\n reverse?: boolean\n voids?: boolean\n pass?: (entry: NodeEntry) => boolean\n}\n\nexport interface EditorNormalizeOptions {\n force?: boolean\n operation?: Operation\n}\n\nexport interface EditorParentOptions {\n depth?: number\n edge?: LeafEdge\n}\n\nexport interface EditorPathOptions {\n depth?: number\n edge?: LeafEdge\n}\n\nexport interface EditorPathRefOptions {\n affinity?: TextDirection | null\n}\n\nexport interface EditorPointOptions {\n edge?: LeafEdge\n}\n\nexport interface EditorPointRefOptions {\n affinity?: TextDirection | null\n}\n\nexport interface EditorPositionsOptions {\n at?: Location\n unit?: TextUnitAdjustment\n reverse?: boolean\n voids?: boolean\n}\n\nexport interface EditorPreviousOptions<T extends Node> {\n at?: Location\n match?: NodeMatch<T>\n mode?: SelectionMode\n voids?: boolean\n}\n\nexport interface EditorRangeRefOptions {\n affinity?: RangeDirection | null\n}\n\nexport interface EditorStringOptions {\n voids?: boolean\n}\n\nexport interface EditorUnhangRangeOptions {\n voids?: boolean\n}\n\nexport interface EditorVoidOptions {\n at?: Location\n mode?: MaximizeMode\n voids?: boolean\n}\n\nexport interface EditorInterface {\n /**\n * Get the ancestor above a location in the document.\n */\n above: <T extends Ancestor>(\n editor: Editor,\n options?: EditorAboveOptions<T>\n ) => NodeEntry<T> | undefined\n\n /**\n * Add a custom property to the leaf text nodes in the current selection.\n *\n * If the selection is currently collapsed, the marks will be added to the\n * `editor.marks` property instead, and applied when text is inserted next.\n */\n addMark: (editor: Editor, key: string, value: any) => void\n\n /**\n * Get the point after a location.\n */\n after: (\n editor: Editor,\n at: Location,\n options?: EditorAfterOptions\n ) => Point | undefined\n\n /**\n * Get the point before a location.\n */\n before: (\n editor: Editor,\n at: Location,\n options?: EditorBeforeOptions\n ) => Point | undefined\n\n /**\n * Delete content in the editor backward from the current selection.\n */\n deleteBackward: (\n editor: Editor,\n options?: EditorDirectedDeletionOptions\n ) => void\n\n /**\n * Delete content in the editor forward from the current selection.\n */\n deleteForward: (\n editor: Editor,\n options?: EditorDirectedDeletionOptions\n ) => void\n\n /**\n * Delete the content in the current selection.\n */\n deleteFragment: (\n editor: Editor,\n options?: EditorFragmentDeletionOptions\n ) => void\n\n /**\n * Get the start and end points of a location.\n */\n edges: (editor: Editor, at: Location) => [Point, Point]\n\n /**\n * Match a read-only element in the current branch of the editor.\n */\n elementReadOnly: (\n editor: Editor,\n options?: EditorElementReadOnlyOptions\n ) => NodeEntry<Element> | undefined\n\n /**\n * Get the end point of a location.\n */\n end: (editor: Editor, at: Location) => Point\n\n /**\n * Get the first node at a location.\n */\n first: (editor: Editor, at: Location) => NodeEntry\n\n /**\n * Get the fragment at a location.\n */\n fragment: (editor: Editor, at: Location) => Descendant[]\n\n /**\n * Check if a node has block children.\n */\n hasBlocks: (editor: Editor, element: Element) => boolean\n\n /**\n * Check if a node has inline and text children.\n */\n hasInlines: (editor: Editor, element: Element) => boolean\n\n hasPath: (editor: Editor, path: Path) => boolean\n\n /**\n * Check if a node has text children.\n */\n hasTexts: (editor: Editor, element: Element) => boolean\n\n /**\n * Insert a block break at the current selection.\n *\n * If the selection is currently expanded, it will be deleted first.\n */\n insertBreak: (editor: Editor) => void\n\n /**\n * Inserts a fragment\n * at the specified location or (if not defined) the current selection or (if not defined) the end of the document.\n */\n insertFragment: (\n editor: Editor,\n fragment: Node[],\n options?: TextInsertFragmentOptions\n ) => void\n\n /**\n * Atomically inserts `nodes`\n * at the specified location or (if not defined) the current selection or (if not defined) the end of the document.\n */\n insertNode: <T extends Node>(\n editor: Editor,\n node: Node,\n options?: NodeInsertNodesOptions<T>\n ) => void\n\n /**\n * Insert a soft break at the current selection.\n *\n * If the selection is currently expanded, it will be deleted first.\n */\n insertSoftBreak: (editor: Editor) => void\n\n /**\n * Insert a string of text\n * at the specified location or (if not defined) the current selection or (if not defined) the end of the document.\n */\n insertText: (\n editor: Editor,\n text: string,\n options?: TextInsertTextOptions\n ) => void\n\n /**\n * Check if a value is a block `Element` object.\n */\n isBlock: (editor: Editor, value: Element) => boolean\n\n /**\n * Check if a point is an edge of a location.\n */\n isEdge: (editor: Editor, point: Point, at: Location) => boolean\n\n /**\n * Check if a value is an `Editor` object.\n */\n isEditor: (value: any, options?: EditorIsEditorOptions) => value is Editor\n\n /**\n * Check if a value is a read-only `Element` object.\n */\n isElementReadOnly: (editor: Editor, element: Element) => boolean\n\n /**\n * Check if an element is empty, accounting for void nodes.\n */\n isEmpty: (editor: Editor, element: Element) => boolean\n\n /**\n * Check if a point is the end point of a location.\n */\n isEnd: (editor: Editor, point: Point, at: Location) => boolean\n\n /**\n * Check if a value is an inline `Element` object.\n */\n isInline: (editor: Editor, value: Element) => boolean\n\n /**\n * Check if the editor is currently normalizing after each operation.\n */\n isNormalizing: (editor: Editor) => boolean\n\n /**\n * Check if a value is a selectable `Element` object.\n */\n isSelectable: (editor: Editor, element: Element) => boolean\n\n /**\n * Check if a point is the start point of a location.\n */\n isStart: (editor: Editor, point: Point, at: Location) => boolean\n\n /**\n * Check if a value is a void `Element` object.\n */\n isVoid: (editor: Editor, value: Element) => boolean\n\n /**\n * Get the last node at a location.\n */\n last: (editor: Editor, at: Location) => NodeEntry\n\n /**\n * Get the leaf text node at a location.\n */\n leaf: (\n editor: Editor,\n at: Location,\n options?: EditorLeafOptions\n ) => NodeEntry<Text>\n\n /**\n * Iterate through all of the levels at a location.\n */\n levels: <T extends Node>(\n editor: Editor,\n options?: EditorLevelsOptions<T>\n ) => Generator<NodeEntry<T>, void, undefined>\n\n /**\n * Get the marks that would be added to text at the current selection.\n */\n marks: (editor: Editor) => Omit<Text, 'text'> | null\n\n /**\n * Get the matching node in the branch of the document after a location.\n */\n next: <T extends Descendant>(\n editor: Editor,\n options?: EditorNextOptions<T>\n ) => NodeEntry<T> | undefined\n\n /**\n * Get the node at a location.\n */\n node: (editor: Editor, at: Location, options?: EditorNodeOptions) => NodeEntry\n\n /**\n * Iterate through all of the nodes in the Editor.\n */\n nodes: <T extends Node>(\n editor: Editor,\n options?: EditorNodesOptions<T>\n ) => Generator<NodeEntry<T>, void, undefined>\n\n /**\n * Normalize any dirty objects in the editor.\n */\n normalize: (editor: Editor, options?: EditorNormalizeOptions) => void\n\n /**\n * Get the parent node of a location.\n */\n parent: (\n editor: Editor,\n at: Location,\n options?: EditorParentOptions\n ) => NodeEntry<Ancestor>\n\n /**\n * Get the path of a location.\n */\n path: (editor: Editor, at: Location, options?: EditorPathOptions) => Path\n\n /**\n * Create a mutable ref for a `Path` object, which will stay in sync as new\n * operations are applied to the editor.\n */\n pathRef: (\n editor: Editor,\n path: Path,\n options?: EditorPathRefOptions\n ) => PathRef\n\n /**\n * Get the set of currently tracked path refs of the editor.\n */\n pathRefs: (editor: Editor) => Set<PathRef>\n\n /**\n * Get the start or end point of a location.\n */\n point: (editor: Editor, at: Location, options?: EditorPointOptions) => Point\n\n /**\n * Create a mutable ref for a `Point` object, which will stay in sync as new\n * operations are applied to the editor.\n */\n pointRef: (\n editor: Editor,\n point: Point,\n options?: EditorPointRefOptions\n ) => PointRef\n\n /**\n * Get the set of currently tracked point refs of the editor.\n */\n pointRefs: (editor: Editor) => Set<PointRef>\n\n /**\n * Return all the positions in `at` range where a `Point` can be placed.\n *\n * By default, moves forward by individual offsets at a time, but\n * the `unit` option can be used to to move by character, word, line, or block.\n *\n * The `reverse` option can be used to change iteration direction.\n *\n * Note: By default void nodes are treated as a single point and iteration\n * will not happen inside their content unless you pass in true for the\n * `voids` option, then iteration will occur.\n */\n positions: (\n editor: Editor,\n options?: EditorPositionsOptions\n ) => Generator<Point, void, undefined>\n\n /**\n * Get the matching node in the branch of the document before a location.\n */\n previous: <T extends Node>(\n editor: Editor,\n options?: EditorPreviousOptions<T>\n ) => NodeEntry<T> | undefined\n\n /**\n * Get a range of a location.\n */\n range: (editor: Editor, at: Location, to?: Location) => Range\n\n /**\n * Create a mutable ref for a `Range` object, which will stay in sync as new\n * operations are applied to the editor.\n */\n rangeRef: (\n editor: Editor,\n range: Range,\n options?: EditorRangeRefOptions\n ) => RangeRef\n\n /**\n * Get the set of currently tracked range refs of the editor.\n */\n rangeRefs: (editor: Editor) => Set<RangeRef>\n\n /**\n * Remove a custom property from all of the leaf text nodes in the current\n * selection.\n *\n * If the selection is currently collapsed, the removal will be stored on\n * `editor.marks` and applied to the text inserted next.\n */\n removeMark: (editor: Editor, key: string) => void\n\n /**\n * Manually set if the editor should currently be normalizing.\n *\n * Note: Using this incorrectly can leave the editor in an invalid state.\n *\n */\n setNormalizing: (editor: Editor, isNormalizing: boolean) => void\n\n /**\n * Get the start point of a location.\n */\n start: (editor: Editor, at: Location) => Point\n\n /**\n * Get the text string content of a location.\n *\n * Note: by default the text of void nodes is considered to be an empty\n * string, regardless of content, unless you pass in true for the voids option\n */\n string: (\n editor: Editor,\n at: Location,\n options?: EditorStringOptions\n ) => string\n\n /**\n * Convert a range into a non-hanging one.\n */\n unhangRange: (\n editor: Editor,\n range: Range,\n options?: EditorUnhangRangeOptions\n ) => Range\n\n /**\n * Match a void node in the current branch of the editor.\n */\n void: (\n editor: Editor,\n options?: EditorVoidOptions\n ) => NodeEntry<Element> | undefined\n\n /**\n * Call a function, deferring normalization until after it completes.\n */\n withoutNormalizing: (editor: Editor, fn: () => void) => void\n\n /**\n * Call a function, Determine whether or not remove the previous node when merge.\n */\n shouldMergeNodesRemovePrevNode: (\n editor: Editor,\n prevNodeEntry: NodeEntry,\n curNodeEntry: NodeEntry\n ) => boolean\n}\n\n// eslint-disable-next-line no-redeclare\nexport const Editor: EditorInterface = {\n above(editor, options) {\n return editor.above(options)\n },\n\n addMark(editor, key, value) {\n editor.addMark(key, value)\n },\n\n after(editor, at, options) {\n return editor.after(at, options)\n },\n\n before(editor, at, options) {\n return editor.before(at, options)\n },\n\n deleteBackward(editor, options = {}) {\n const { unit = 'character' } = options\n editor.deleteBackward(unit)\n },\n\n deleteForward(editor, options = {}) {\n const { unit = 'character' } = options\n editor.deleteForward(unit)\n },\n\n deleteFragment(editor, options) {\n editor.deleteFragment(options)\n },\n\n edges(editor, at) {\n return editor.edges(at)\n },\n\n elementReadOnly(editor: Editor, options: EditorElementReadOnlyOptions = {}) {\n return editor.elementReadOnly(options)\n },\n\n end(editor, at) {\n return editor.end(at)\n },\n\n first(editor, at) {\n return editor.first(at)\n },\n\n fragment(editor, at) {\n return editor.fragment(at)\n },\n\n hasBlocks(editor, element) {\n return editor.hasBlocks(element)\n },\n\n hasInlines(editor, element) {\n return editor.hasInlines(element)\n },\n\n hasPath(editor, path) {\n return editor.hasPath(path)\n },\n\n hasTexts(editor, element) {\n return editor.hasTexts(element)\n },\n\n insertBreak(editor) {\n editor.insertBreak()\n },\n\n insertFragment(editor, fragment, options) {\n editor.insertFragment(fragment, options)\n },\n\n insertNode(editor, node) {\n editor.insertNode(node)\n },\n\n insertSoftBreak(editor) {\n editor.insertSoftBreak()\n },\n\n insertText(editor, text) {\n editor.insertText(text)\n },\n\n isBlock(editor, value) {\n return editor.isBlock(value)\n },\n\n isEdge(editor, point, at) {\n return editor.isEdge(point, at)\n },\n\n isEditor(value: any): value is Editor {\n return isEditor(value)\n },\n\n isElementReadOnly(editor, element) {\n return editor.isElementReadOnly(element)\n },\n\n isEmpty(editor, element) {\n return editor.isEmpty(element)\n },\n\n isEnd(editor, point, at) {\n return editor.isEnd(point, at)\n },\n\n isInline(editor, value) {\n return editor.isInline(value)\n },\n\n isNormalizing(editor) {\n return editor.isNormalizing()\n },\n\n isSelectable(editor: Editor, value: Element) {\n return editor.isSelectable(value)\n },\n\n isStart(editor, point, at) {\n return editor.isStart(point, at)\n },\n\n isVoid(editor, value) {\n return editor.isVoid(value)\n },\n\n last(editor, at) {\n return editor.last(at)\n },\n\n leaf(editor, at, options) {\n return editor.leaf(at, options)\n },\n\n levels(editor, options) {\n return editor.levels(options)\n },\n\n marks(editor) {\n return editor.getMarks()\n },\n\n next<T extends Descendant>(\n editor: Editor,\n options?: EditorNextOptions<T>\n ): NodeEntry<T> | undefined {\n return editor.next(options)\n },\n\n node(editor, at, options) {\n return editor.node(at, options)\n },\n\n nodes(editor, options) {\n return editor.nodes(options)\n },\n\n normalize(editor, options) {\n editor.normalize(options)\n },\n\n parent(editor, at, options) {\n return editor.parent(at, options)\n },\n\n path(editor, at, options) {\n return editor.path(at, options)\n },\n\n pathRef(editor, path, options) {\n return editor.pathRef(path, options)\n },\n\n pathRefs(editor) {\n return editor.pathRefs()\n },\n\n point(editor, at, options) {\n return editor.point(at, options)\n },\n\n pointRef(editor, point, options) {\n return editor.pointRef(point, options)\n },\n\n pointRefs(editor) {\n return editor.pointRefs()\n },\n\n positions(editor, options) {\n return editor.positions(options)\n },\n\n previous(editor, options) {\n return editor.previous(options)\n },\n\n range(editor, at, to) {\n return editor.range(at, to)\n },\n\n rangeRef(editor, range, options) {\n return editor.rangeRef(range, options)\n },\n\n rangeRefs(editor) {\n return editor.rangeRefs()\n },\n\n removeMark(editor, key) {\n editor.removeMark(key)\n },\n\n setNormalizing(editor, isNormalizing) {\n editor.setNormalizing(isNormalizing)\n },\n\n start(editor, at) {\n return editor.start(at)\n },\n\n string(editor, at, options) {\n return editor.string(at, options)\n },\n\n unhangRange(editor, range, options) {\n return editor.unhangRange(range, options)\n },\n\n void(editor, options) {\n return editor.void(options)\n },\n\n withoutNormalizing(editor, fn: () => void) {\n editor.withoutNormalizing(fn)\n },\n shouldMergeNodesRemovePrevNode: (editor, prevNode, curNode) => {\n return editor.shouldMergeNodesRemovePrevNode(prevNode, curNode)\n },\n}\n\n/**\n * A helper type for narrowing matched nodes with a predicate.\n */\n\nexport type NodeMatch<T extends Node> =\n | ((node: Node, path: Path) => node is T)\n | ((node: Node, path: Path) => boolean)\n\nexport type PropsCompare = (prop: Partial<Node>, node: Partial<Node>) => boolean\nexport type PropsMerge = (prop: Partial<Node>, node: Partial<Node>) => object\n","import { ExtendedType, Operation, Path, isObject } from '..'\nimport { TextDirection } from '../types/types'\n\n/**\n * `Point` objects refer to a specific location in a text node in a Slate\n * document. Its path refers to the location of the node in the tree, and its\n * offset refers to the distance into the node's string of text. Points can\n * only refer to `Text` nodes.\n */\n\nexport interface BasePoint {\n path: Path\n offset: number\n}\n\nexport type Point = ExtendedType<'Point', BasePoint>\n\nexport interface PointTransformOptions {\n affinity?: TextDirection | null\n}\n\nexport interface PointInterface {\n /**\n * Compare a point to another, returning an integer indicating whether the\n * point was before, at, or after the other.\n */\n compare: (point: Point, another: Point) => -1 | 0 | 1\n\n /**\n * Check if a point is after another.\n */\n isAfter: (point: Point, another: Point) => boolean\n\n /**\n * Check if a point is before another.\n */\n isBefore: (point: Point, another: Point) => boolean\n\n /**\n * Check if a point is exactly equal to another.\n */\n equals: (point: Point, another: Point) => boolean\n\n /**\n * Check if a value implements the `Point` interface.\n */\n isPoint: (value: any) => value is Point\n\n /**\n * Transform a point by an operation.\n */\n transform: (\n point: Point,\n op: Operation,\n options?: PointTransformOptions\n ) => Point | null\n}\n\n// eslint-disable-next-line no-redeclare\nexport const Point: PointInterface = {\n compare(point: Point, another: Point): -1 | 0 | 1 {\n const result = Path.compare(point.path, another.path)\n\n if (result === 0) {\n if (point.offset < another.offset) return -1\n if (point.offset > another.offset) return 1\n return 0\n }\n\n return result\n },\n\n isAfter(point: Point, another: Point): boolean {\n return Point.compare(point, another) === 1\n },\n\n isBefore(point: Point, another: Point): boolean {\n return Point.compare(point, another) === -1\n },\n\n equals(point: Point, another: Point): boolean {\n // PERF: ensure the offsets are equal first since they are cheaper to check.\n return (\n point.offset === another.offset && Path.equals(point.path, another.path)\n )\n },\n\n isPoint(value: any): value is Point {\n return (\n isObject(value) &&\n typeof value.offset === 'number' &&\n Path.isPath(value.path)\n )\n },\n\n transform(\n point: Point | null,\n op: Operation,\n options: PointTransformOptions = {}\n ): Point | null {\n if (point === null) {\n return null\n }\n\n const { affinity = 'forward' } = options\n let { path, offset } = point\n\n switch (op.type) {\n case 'insert_node':\n case 'move_node': {\n path = Path.transform(path, op, options)!\n break\n }\n\n case 'insert_text': {\n if (\n Path.equals(op.path, path) &&\n (op.offset < offset ||\n (op.offset === offset && affinity === 'forward'))\n ) {\n offset += op.text.length\n }\n\n break\n }\n\n case 'merge_node': {\n if (Path.equals(op.path, path)) {\n offset += op.position\n }\n\n path = Path.transform(path, op, options)!\n break\n }\n\n case 'remove_text': {\n if (Path.equals(op.path, path) && op.offset <= offset) {\n offset -= Math.min(offset - op.offset, op.text.length)\n }\n\n break\n }\n\n case 'remove_node': {\n if (Path.equals(op.path, path) || Path.isAncestor(op.path, path)) {\n return null\n }\n\n path = Path.transform(path, op, options)!\n break\n }\n\n case 'split_node': {\n if (Path.equals(op.path, path)) {\n if (op.position === offset && affinity == null) {\n return null\n } else if (\n op.position < offset ||\n (op.position === offset && affinity === 'forward')\n ) {\n offset -= op.position\n\n path = Path.transform(path, op, {\n ...options,\n affinity: 'forward',\n })!\n }\n } else {\n path = Path.transform(path, op, options)!\n }\n\n break\n }\n\n default:\n return point\n }\n\n return { path, offset }\n },\n}\n\n/**\n * `PointEntry` objects are returned when iterating over `Point` objects that\n * belong to a range.\n */\n\nexport type PointEntry = [Point, 'anchor' | 'focus']\n","export type Scrubber = (key: string, value: unknown) => unknown\n\nexport interface ScrubberInterface {\n setScrubber(scrubber: Scrubber | undefined): void\n stringify(value: any): string\n}\n\nlet _scrubber: Scrubber | undefined = undefined\n\n/**\n * This interface implements a stringify() function, which is used by Slate\n * internally when generating exceptions containing end user data. Developers\n * using Slate may call Scrubber.setScrubber() to alter the behavior of this\n * stringify() function.\n *\n * For example, to prevent the cleartext logging of 'text' fields within Nodes:\n *\n * import { Scrubber } from 'slate';\n * Scrubber.setScrubber((key, val) => {\n * if (key === 'text') return '...scrubbed...'\n * return val\n * });\n *\n */\n// eslint-disable-next-line no-redeclare\nexport const Scrubber: ScrubberInterface = {\n setScrubber(scrubber: Scrubber | undefined): void {\n _scrubber = scrubber\n },\n\n stringify(value: any): string {\n return JSON.stringify(value, _scrubber)\n },\n}\n","import { Range, isObject } from '..'\nimport { ExtendedType } from '../types/custom-types'\nimport { isDeepEqual } from '../utils/deep-equal'\n\n/**\n * `Text` objects represent the nodes that contain the actual text content of a\n * Slate document along with any formatting properties. They are always leaf\n * nodes in the document tree as they cannot contain any children.\n */\n\nexport interface BaseText {\n text: string\n}\n\nexport type Text = ExtendedType<'Text', BaseText>\n\nexport interface LeafPosition {\n start: number\n end: number\n isFirst?: true\n isLast?: true\n}\n\nexport interface TextEqualsOptions {\n loose?: boolean\n}\n\nexport type DecoratedRange = Range & {\n /**\n * Customize how another decoration is merged into a text node. If not specified, `Object.assign` would be used.\n * It is useful for overlapping decorations with the same key but different values.\n */\n merge?: (leaf: Text, decoration: object) => void\n}\n\nexport interface TextInterface {\n /**\n * Check if two text nodes are equal.\n *\n * When loose is set, the text is not compared. This is\n * used to check whether sibling text nodes can be merged.\n */\n equals: (text: Text, another: Text, options?: TextEqualsOptions) => boolean\n\n /**\n * Check if a value implements the `Text` interface.\n */\n isText: (value: any) => value is Text\n\n /**\n * Check if a value is a list of `Text` objects.\n */\n isTextList: (value: any) => value is Text[]\n\n /**\n * Check if some props are a partial of Text.\n */\n isTextProps: (props: any) => props is Partial<Text>\n\n /**\n * Check if an text matches set of properties.\n *\n * Note: this is for matching custom properties, and it does not ensure that\n * the `text` property are two nodes equal.\n */\n matches: (text: Text, props: Partial<Text>) => boolean\n\n /**\n * Get the leaves for a text node given decorations.\n */\n decorations: (\n node: Text,\n decorations: DecoratedRange[]\n ) => { leaf: Text; position?: LeafPosition }[]\n}\n\n// eslint-disable-next-line no-redeclare\nexport const Text: TextInterface = {\n equals(text: Text, another: Text, options: TextEqualsOptions = {}): boolean {\n const { loose = false } = options\n\n function omitText(obj: Record<any, any>) {\n const { text, ...rest } = obj\n\n return rest\n }\n\n return isDeepEqual(\n loose ? omitText(text) : text,\n loose ? omitText(another) : another\n )\n },\n\n isText(value: any): value is Text {\n return isObject(value) && typeof value.text === 'string'\n },\n\n isTextList(value: any): value is Text[] {\n return Array.isArray(value) && value.every(val => Text.isText(val))\n },\n\n isTextProps(props: any): props is Partial<Text> {\n return (props as Partial<Text>).text !== undefined\n },\n\n matches(text: Text, props: Partial<Text>): boolean {\n for (const key in props) {\n if (key === 'text') {\n continue\n }\n\n if (\n !text.hasOwnProperty(key) ||\n text[<keyof Text>key] !== props[<keyof Text>key]\n ) {\n return false\n }\n }\n\n return true\n },\n\n decorations(\n node: Text,\n decorations: DecoratedRange[]\n ): { leaf: Text; position?: LeafPosition }[] {\n let leaves: { leaf: Text; position?: LeafPosition }[] = [\n { leaf: { ...node } },\n ]\n\n for (const dec of decorations) {\n const { anchor, focus, merge: mergeDecoration, ...rest } = dec\n const [start, end] = Range.edges(dec)\n const next = []\n let leafEnd = 0\n const decorationStart = start.offset\n const decorationEnd = end.offset\n const merge = mergeDecoration ?? Object.assign\n\n for (const { leaf } of leaves) {\n const { length } = leaf.text\n const leafStart = leafEnd\n leafEnd += length\n\n // If the range encompasses the entire leaf, add the range.\n if (decorationStart <= leafStart && leafEnd <= decorationEnd) {\n merge(leaf, rest)\n next.push({ leaf })\n continue\n }\n\n // If the range expanded and match the leaf, or starts after, or ends before it, continue.\n if (\n (decorationStart !== decorationEnd &&\n (decorationStart === leafEnd || decorationEnd === leafStart)) ||\n decorationStart > leafEnd ||\n decorationEnd < leafStart ||\n (decorationEnd === leafStart && leafStart !== 0)\n ) {\n next.push({ leaf })\n continue\n }\n\n // Otherwise we need to split the leaf, at the start, end, or both,\n // and add the range to the middle intersecting section. Do the end\n // split first since we don't need to update the offset that way.\n let middle = leaf\n let before\n let after\n\n if (decorationEnd < leafEnd) {\n const off = decorationEnd - leafStart\n after = { leaf: { ...middle, text: middle.text.slice(off) } }\n middle = { ...middle, text: middle.text.slice(0, off) }\n }\n\n if (decorationStart > leafStart) {\n const off = decorationStart - leafStart\n before = { leaf: { ...middle, text: middle.text.slice(0, off) } }\n middle = { ...middle, text: middle.text.slice(off) }\n }\n\n merge(middle, rest)\n\n if (before) {\n next.push(before)\n }\n\n next.push({ leaf: middle })\n\n if (after) {\n next.push(after)\n }\n }\n\n leaves = next\n }\n\n if (leaves.length > 1) {\n let currentOffset = 0\n for (const [index, item] of leaves.entries()) {\n const start = currentOffset\n const end = start + item.leaf.text.length\n const position: LeafPosition = { start, end }\n\n if (index === 0) position.isFirst = true\n if (index === leaves.length - 1) position.isLast = true\n\n item.position = position\n currentOffset = end\n }\n }\n\n return leaves\n },\n}\n","import {\n Ancestor,\n Descendant,\n Element,\n Node,\n Path,\n Scrubber,\n Text,\n} from '../interfaces'\n\nexport const insertChildren = <T>(\n xs: T[],\n index: number,\n ...newValues: T[]\n) => [...xs.slice(0, index), ...newValues, ...xs.slice(index)]\n\nexport const replaceChildren = <T>(\n xs: T[],\n index: number,\n removeCount: number,\n ...newValues: T[]\n) => [...xs.slice(0, index), ...newValues, ...xs.slice(index + removeCount)]\n\nexport const removeChildren = replaceChildren\n\n/**\n * Replace a descendant with a new node, replacing all ancestors\n */\nexport const modifyDescendant = <N extends Descendant>(\n root: Ancestor,\n path: Path,\n f: (node: N) => N\n) => {\n if (path.length === 0) {\n throw new Error('Cannot modify the editor')\n }\n\n const node = Node.get(root, path) as N\n const slicedPath = path.slice()\n let modifiedNode: Node = f(node)\n\n while (slicedPath.length > 1) {\n const index = slicedPath.pop()!\n const ancestorNode = Node.get(root, slicedPath) as Ancestor\n\n modifiedNode = {\n ...ancestorNode,\n children: replaceChildren(ancestorNode.children, index, 1, modifiedNode),\n }\n }\n\n const index = slicedPath.pop()!\n root.children = replaceChildren(root.children, index, 1, modifiedNode)\n}\n\n/**\n * Replace the children of a node, replacing all ancestors\n */\nexport const modifyChildren = (\n root: Ancestor,\n path: Path,\n f: (children: Descendant[]) => Descendant[]\n) => {\n if (path.length === 0) {\n root.children = f(root.children)\n } else {\n modifyDescendant<Element>(root, path, node => {\n if (Text.isText(node)) {\n throw new Error(\n `Cannot get the element at path [${path}] because it refers to a leaf node: ${Scrubber.stringify(\n node\n )}`\n )\n }\n\n return { ...node, children: f(node.children) }\n })\n }\n}\n\n/**\n * Replace a leaf, replacing all ancestors\n */\nexport const modifyLeaf = (\n root: Ancestor,\n path: Path,\n f: (leaf: Text) => Text\n) =>\n modifyDescendant(root, path, node => {\n if (!Text.isText(node)) {\n throw new Error(\n `Cannot get the leaf node at path [${path}] because it refers to a non-leaf node: ${Scrubber.stringify(\n node\n )}`\n )\n }\n\n return f(node)\n })\n","import {\n Descendant,\n Editor,\n Element,\n Node,\n NodeEntry,\n Operation,\n Path,\n Point,\n Range,\n Scrubber,\n Selection,\n Text,\n} from '../../index'\nimport {\n insertChildren,\n modifyChildren,\n modifyDescendant,\n modifyLeaf,\n removeChildren,\n replaceChildren,\n} from '../../utils/modify'\n\nexport interface GeneralTransforms {\n /**\n * Transform the editor by an operation.\n */\n transform: (editor: Editor, op: Operation) => void\n}\n\n// eslint-disable-next-line no-redeclare\nexport const GeneralTransforms: GeneralTransforms = {\n transform(editor: Editor, op: Operation): void {\n let transformSelection = false\n\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op\n\n modifyChildren(editor, Path.parent(path), children => {\n const index = path[path.length - 1]\n\n if (index > children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n )\n }\n\n return insertChildren(children, index, node)\n })\n\n transformSelection = true\n break\n }\n\n case 'insert_text': {\n const { path, offset, text } = op\n if (text.length === 0) break\n\n modifyLeaf(editor, path, node => {\n const before = node.text.slice(0, offset)\n const after = node.text.slice(offset)\n\n return {\n ...node,\n text: before + text + after,\n }\n })\n\n transformSelection = true\n break\n }\n\n case 'merge_node': {\n const { path } = op\n const index = path[path.length - 1]\n const prevPath = Path.previous(path)\n const prevIndex = prevPath[prevPath.length - 1]\n\n modifyChildren(editor, Path.parent(path), children => {\n const node = children[index]\n const prev = children[prevIndex]\n let newNode: Descendant\n\n if (Text.isText(node) && Text.isText(prev)) {\n newNode = { ...prev, text: prev.text + node.text }\n } else if (!Text.isText(node) && !Text.isText(prev)) {\n newNode = { ...prev, children: prev.children.concat(node.children) }\n } else {\n throw new Error(\n `Cannot apply a \"merge_node\" operation at path [${path}] to nodes of different interfaces: ${Scrubber.stringify(\n node\n )} ${Scrubber.stringify(prev)}`\n )\n }\n\n return replaceChildren(children, prevIndex, 2, newNode)\n })\n\n transformSelection = true\n break\n }\n\n case 'move_node': {\n const { path, newPath } = op\n const index = path[path.length - 1]\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(\n `Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`\n )\n }\n\n const node = Node.get(editor, path)\n\n modifyChildren(editor, Path.parent(path), children =>\n removeChildren(children, index, 1)\n )\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n const truePath = Path.transform(path, op)!\n const newIndex = truePath[truePath.length - 1]\n\n modifyChildren(editor, Path.parent(truePath), children =>\n insertChildren(children, newIndex, node)\n )\n\n transformSelection = true\n break\n }\n\n case 'remove_node': {\n const { path } = op\n const index = path[path.length - 1]\n\n modifyChildren(editor, Path.parent(path), children =>\n removeChildren(children, index, 1)\n )\n\n // Transform all the points in the value, but if the point was in the\n // node that was removed we need to update the range or remove it.\n if (editor.selection) {\n let selection: Selection = { ...editor.selection }\n\n for (const [point, key] of Range.points(selection)) {\n const result = Point.transform(point, op)\n\n if (selection != null && result != null) {\n selection[key] = result\n } else {\n let prev: NodeEntry<Text> | undefined\n let next: NodeEntry<Text> | undefined\n\n for (const [n, p] of Node.texts(editor)) {\n if (Path.compare(p, path) === -1) {\n prev = [n, p]\n } else {\n next = [n, p]\n break\n }\n }\n\n let preferNext = false\n if (prev && next) {\n if (Path.isSibling(prev[1], path)) {\n preferNext = false\n } else if (Path.equals(next[1], path)) {\n preferNext = true\n } else {\n preferNext =\n Path.common(prev[1], path).length <\n Path.common(next[1], path).length\n }\n }\n\n if (prev && !preferNext) {\n selection![key] = { path: prev[1], offset: prev[0].text.length }\n } else if (next) {\n selection![key] = { path: next[1], offset: 0 }\n } else {\n selection = null\n }\n }\n }\n\n if (!selection || !Range.equals(selection, editor.selection)) {\n editor.selection = selection\n }\n }\n\n break\n }\n\n case 'remove_text': {\n const { path, offset, text } = op\n if (text.length === 0) break\n\n modifyLeaf(editor, path, node => {\n const before = node.text.slice(0, offset)\n const after = node.text.slice(offset + text.length)\n\n return {\n ...node,\n text: before + after,\n }\n })\n\n transformSelection = true\n break\n }\n\n case 'set_node': {\n const { path, properties, newProperties } = op\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`)\n }\n\n modifyDescendant(editor, path, node => {\n const newNode = { ...node }\n\n for (const key in newProperties) {\n if (key === 'children' || key === 'text') {\n throw new Error(`Cannot set the \"${key}\" property of nodes!`)\n }\n\n const value = newProperties[<keyof Node>key]\n\n if (value == null) {\n delete newNode[<keyof Node>key]\n } else {\n newNode[<keyof Node>key] = value\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete newNode[<keyof Node>key]\n }\n }\n\n return newNode\n })\n\n break\n }\n\n case 'set_selection': {\n const { newProperties } = op\n\n if (newProperties == null) {\n editor.selection = null\n break\n }\n\n if (editor.selection == null) {\n if (!Range.isRange(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_selection\" operation properties ${Scrubber.stringify(\n newProperties\n )} when there is no current selection.`\n )\n }\n\n editor.selection = { ...newProperties }\n break\n }\n\n const selection = { ...editor.selection }\n\n for (const key in newProperties) {\n const value = newProperties[<keyof Range>key]\n\n if (value == null) {\n if (key === 'anchor' || key === 'focus') {\n throw new Error(`Cannot remove the \"${key}\" selection property`)\n }\n\n delete selection[<keyof Range>key]\n } else {\n selection[<keyof Range>key] = value\n }\n }\n\n editor.selection = selection\n\n break\n }\n\n case 'split_node': {\n const { path, position, properties } = op\n const index = path[path.length - 1]\n\n if (path.length === 0) {\n throw new Error(\n `Cannot apply a \"split_node\" operation at path [${path}] because the root node cannot be split.`\n )\n }\n\n modifyChildren(editor, Path.parent(path), children => {\n const node = children[index]\n let newNode: Descendant\n let nextNode: Descendant\n\n if (Text.isText(node)) {\n const before = node.text.slice(0, position)\n const after = node.text.slice(position)\n newNode = {\n ...node,\n text: before,\n }\n nextNode = {\n ...(properties as Partial<Text>),\n text: after,\n }\n } else {\n const before = node.children.slice(0, position)\n const after = node.children.slice(position)\n newNode = {\n ...node,\n children: before,\n }\n nextNode = {\n ...(properties as Partial<Element>),\n children: after,\n }\n }\n\n return replaceChildren(children, index, 1, newNode, nextNode)\n })\n\n transformSelection = true\n break\n }\n }\n\n if (transformSelection && editor.selection) {\n const selection = { ...editor.selection }\n\n for (const [point, key] of Range.points(selection)) {\n selection[key] = Point.transform(point, op)!\n }\n\n if (!Range.equals(selection, editor.selection)) {\n editor.selection = selection\n }\n }\n },\n}\n","import { Editor, Element, Location, Node, Path } from '../../index'\nimport { NodeMatch, PropsCompare, PropsMerge } from '../editor'\nimport { MaximizeMode, RangeMode } from '../../types/types'\n\nexport interface NodeInsertNodesOptions<T extends Node> {\n at?: Location\n match?: NodeMatch<T>\n mode?: RangeMode\n hanging?: boolean\n select?: boolean\n voids?: boolean\n batchDirty?: boolean\n}\n\nexport interface NodeTransforms {\n /**\n * Insert nodes in the editor\n * at the specified location or (if not defined) the current selection or (if not defined) the end of the document.\n */\n insertNodes: <T extends Node>(\n editor: Editor,\n nodes: Node | Node[],\n options?: NodeInsertNodesOptions<T>\n ) => void\n\n /**\n * Lift nodes at a specific location upwards in the document tree, splitting\n * their parent in two if necessary.\n */\n liftNodes: <T extends Node>(\n editor: Editor,\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: MaximizeMode\n voids?: boolean\n }\n ) => void\n\n /**\n * Merge a node at a location with the previous node of the same depth,\n * removing any empty containing nodes after the merge if necessary.\n */\n mergeNodes: <T extends Node>(\n editor: Editor,\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: RangeMode\n hanging?: boolean\n voids?: boolean\n }\n ) => void\n\n /**\n * Move the nodes at a location to a new location.\n */\n moveNodes: <T extends Node>(\n editor: Editor,\n options: {\n at?: Location\n match?: NodeMatch<T>\n mode?: MaximizeMode\n to: Path\n voids?: boolean\n }\n ) => void\n\n /**\n * Remove the nodes at a specific location in the document.\n */\n removeNodes: <T extends Node>(\n editor: Editor,\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: RangeMode\n hanging?: boolean\n voids?: boolean\n }\n ) => void\n\n /**\n * Set new properties on the nodes at a location.\n */\n setNodes: <T extends Node>(\n editor: Editor,\n props: Partial<T>,\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: MaximizeMode\n hanging?: boolean\n split?: boolean\n voids?: boolean\n compare?: PropsCompare\n merge?: PropsMerge\n }\n ) => void\n\n /**\n * Split the nodes at a specific location.\n */\n splitNodes: <T extends Node>(\n editor: Editor,\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: RangeMode\n always?: boolean\n height?: number\n voids?: boolean\n }\n ) => void\n\n /**\n * Unset properties on the nodes at a location.\n */\n unsetNodes: <T extends Node>(\n editor: Editor,\n props: string | string[],\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: MaximizeMode\n hanging?: boolean\n split?: boolean\n voids?: boolean\n }\n ) => void\n\n /**\n * Unwrap the nodes at a location from a parent node, splitting the parent if\n * necessary to ensure that only the content in the range is unwrapped.\n */\n unwrapNodes: <T extends Node>(\n editor: Editor,\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: MaximizeMode\n split?: boolean\n voids?: boolean\n }\n ) => void\n\n /**\n * Wrap the nodes at a location in a new container node, splitting the edges\n * of the range first to ensure that only the content in the range is wrapped.\n */\n wrapNodes: <T extends Node>(\n editor: Editor,\n element: Element,\n options?: {\n at?: Location\n match?: NodeMatch<T>\n mode?: MaximizeMode\n split?: boolean\n voids?: boolean\n }\n ) => void\n}\n\n// eslint-disable-next-line no-redeclare\nexport const NodeTransforms: NodeTransforms = {\n insertNodes(editor, nodes, options) {\n editor.insertNodes(nodes, options)\n },\n liftNodes(editor, options) {\n editor.liftNodes(options)\n },\n mergeNodes(editor, options) {\n editor.mergeNodes(options)\n },\n moveNodes(editor, options) {\n editor.moveNodes(options)\n },\n removeNodes(editor, options) {\n editor.removeNodes(options)\n },\n setNodes(editor, props, options) {\n editor.setNodes(props, options)\n },\n splitNodes(editor, options) {\n editor.splitNodes(options)\n },\n unsetNodes(editor, props, options) {\n editor.unsetNodes(props, options)\n },\n unwrapNodes(editor, options) {\n editor.unwrapNodes(options)\n },\n wrapNodes(editor, element, options) {\n editor.wrapNodes(element, options)\n },\n}\n","import { Editor, Location, Point, Range } from '../../index'\nimport { MoveUnit, SelectionEdge } from '../../types/types'\n\nexport interface SelectionCollapseOptions {\n edge?: SelectionEdge\n}\n\nexport interface SelectionMoveOptions {\n distance?: number\n unit?: MoveUnit\n reverse?: boolean\n edge?: SelectionEdge\n}\n\nexport interface SelectionSetPointOptions {\n edge?: SelectionEdge\n}\n\nexport interface SelectionTransforms {\n /**\n * Collapse the selection.\n */\n collapse: (editor: Editor, options?: SelectionCollapseOptions) => void\n\n /**\n * Unset the selection.\n */\n deselect: (editor: Editor) => void\n\n /**\n * Move the selection's point forward or backward.\n */\n move: (editor: Editor, options?: SelectionMoveOptions) => void\n\n /**\n * Set the selection to a new value.\n */\n select: (editor: Editor, target: Location) => void\n\n /**\n * Set new properties on one of the selection's points.\n */\n setPoint: (\n editor: Editor,\n props: Partial<Point>,\n options?: SelectionSetPointOptions\n ) => void\n\n /**\n * Set new properties on the selection.\n */\n setSelection: (editor: Editor, props: Partial<Range>) => void\n}\n\n// eslint-disable-next-line no-redeclare\nexport const SelectionTransforms: SelectionTransforms = {\n collapse(editor, options) {\n editor.collapse(options)\n },\n deselect(editor) {\n editor.deselect()\n },\n move(editor, options) {\n editor.move(options)\n },\n select(editor, target) {\n editor.select(target)\n },\n setPoint(editor, props, options) {\n editor.setPoint(props, options)\n },\n setSelection(editor, props) {\n editor.setSelection(props)\n },\n}\n","import { Editor, Location, Node, Path, Range, Transforms } from '../../index'\nimport { TextUnit } from '../../types/types'\nimport { getDefaultInsertLocation } from '../../utils'\n\nexport interface TextDeleteOptions {\n at?: Location\n distance?: number\n unit?: TextUnit\n reverse?: boolean\n hanging?: boolean\n voids?: boolean\n}\n\nexport interface TextInsertFragmentOptions {\n at?: Location\n hanging?: boolean\n voids?: boolean\n batchDirty?: boolean\n}\n\nexport interface TextInsertTextOptions {\n at?: Location\n voids?: boolean\n}\n\nexport interface TextTransforms {\n /**\n * Delete content in the editor.\n */\n delete: (editor: Editor, options?: TextDeleteOptions) => void\n\n /**\n * Insert a fragment in the editor\n * at the specified location or (if not defined) the current selection or (if not defined) the end of the document.\n */\n insertFragment: (\n editor: Editor,\n fragment: Node[],\n options?: TextInsertFragmentOptions\n ) => void\n\n /**\n * Insert a string of text in the editor\n * at the specified location or (if not defined) the current selection or (if not defined) the end of the document.\n */\n insertText: (\n editor: Editor,\n text: string,\n options?: TextInsertTextOptions\n ) => void\n}\n\n// eslint-disable-next-line no-redeclare\nexport const TextTransforms: TextTransforms = {\n delete(editor, options) {\n editor.delete(options)\n },\n insertFragment(editor, fragment, options) {\n editor.insertFragment(fragment, options)\n },\n insertText(\n editor: Editor,\n text: string,\n options: TextInsertTextOptions = {}\n ): void {\n Editor.withoutNormalizing(editor, () => {\n const { voids = false } = options\n let { at = getDefaultInsertLocation(editor) } = options\n\n if (Path.isPath(at)) {\n at = Editor.range(editor, at)\n }\n\n if (Range.isRange(at)) {\n if (Range.isCollapsed(at)) {\n at = at.anchor\n } else {\n const end = Range.end(at)\n if (!voids && Editor.void(editor, { at: end })) {\n return\n }\n const start = Range.start(at)\n const startRef = Editor.pointRef(editor, start)\n const endRef = Editor.pointRef(editor, end)\n Transforms.delete(editor, { at, voids })\n const startPoint = startRef.unref()\n const endPoint = endRef.unref()\n\n at = startPoint || endPoint!\n Transforms.setSelection(editor, { anchor: at, focus: at })\n }\n }\n\n if (\n (!voids && Editor.void(editor, { at })) ||\n Editor.elementReadOnly(editor, { at })\n ) {\n return\n }\n\n const { path, offset } = at\n if (text.length > 0)\n editor.apply({ type: 'insert_text', path, offset, text })\n })\n },\n}\n","import { GeneralTransforms } from './general'\nimport { NodeTransforms } from './node'\nimport { SelectionTransforms } from './selection'\nimport { TextTransforms } from './text'\n\nexport const Transforms: GeneralTransforms &\n NodeTransforms &\n SelectionTransforms &\n TextTransforms = {\n ...GeneralTransforms,\n ...NodeTransforms,\n ...SelectionTransforms,\n ...TextTransforms,\n}\n","import type { BaseYooEditor, SlateElement } from '@yoopta/editor';\n\nexport type MentionType = 'user' | 'channel' | 'page' | 'custom' | string;\n\nexport type MentionItem<TMeta = Record<string, unknown>> = {\n id: string;\n type?: MentionType;\n name: string;\n avatar?: string;\n meta?: TMeta;\n};\n\nexport type MentionElementProps<TMeta = Record<string, unknown>> = MentionItem<TMeta> & {\n nodeType: 'inlineVoid';\n};\n\nexport type MentionPluginElementKeys = 'mention';\nexport type MentionElement<TMeta = Record<string, unknown>> = SlateElement<\n 'mention',\n MentionElementProps<TMeta>\n>;\n\nexport type MentionElementMap = {\n mention: MentionElement;\n};\n\nexport type MentionTrigger = {\n /** Character(s) that trigger the mention dropdown (e.g., '@', '#', '[[') */\n char: string;\n /** Optional type to categorize this trigger */\n type?: MentionType;\n /** Allow spaces in search query (default: false) */\n allowSpaces?: boolean;\n /** Pattern that must precede the trigger (default: /\\s|^/ - whitespace or start) */\n allowedAfter?: RegExp;\n};\n\nexport type MentionTargetRect = {\n domRect: DOMRect;\n clientRects: DOMRectList;\n};\n\nexport type MentionState = {\n /** Whether the dropdown is open */\n isOpen: boolean;\n /** Current search query (without trigger char) */\n query: string;\n /** The trigger that opened the dropdown */\n trigger: MentionTrigger | null;\n /** Position for the dropdown */\n targetRect: MentionTargetRect | null;\n /** The range where trigger was typed (for replacement) */\n triggerRange: {\n blockId: string;\n path: number[];\n startOffset: number;\n } | null;\n};\n\nexport const INITIAL_MENTION_STATE: MentionState = {\n isOpen: false,\n query: '',\n trigger: null,\n targetRect: null,\n triggerRange: null,\n};\n\nexport type MentionPluginOptions<TMeta = Record<string, unknown>> = {\n /**\n * Multiple triggers configuration\n * Example: [{ char: '@', type: 'user' }, { char: '#', type: 'channel' }]\n */\n triggers?: MentionTrigger[];\n\n /**\n * Simple single trigger (shorthand for triggers: [{ char }])\n * @default '@'\n */\n char?: string;\n\n /**\n * Search function called when user types after trigger\n * Receives query (without trigger char) and the active trigger\n */\n onSearch: (query: string, trigger: MentionTrigger) => Promise<MentionItem<TMeta>[]>;\n\n /**\n * Debounce delay for search in milliseconds\n * @default 300\n */\n debounceMs?: number;\n\n /**\n * Minimum query length before triggering search\n * @default 0\n */\n minQueryLength?: number;\n\n /**\n * Called when a mention is selected\n */\n onSelect?: (item: MentionItem<TMeta>, trigger: MentionTrigger) => void;\n\n /**\n * Called when dropdown opens\n */\n onOpen?: (trigger: MentionTrigger) => void;\n\n /**\n * Called when dropdown closes\n */\n onClose?: () => void;\n\n /**\n * Close dropdown when item is selected\n * @default true\n */\n closeOnSelect?: boolean;\n\n /**\n * Close dropdown on click outside\n * @default true\n */\n closeOnClickOutside?: boolean;\n\n /**\n * Close dropdown on Escape key\n * @default true\n */\n closeOnEscape?: boolean;\n};\n\nexport type MentionOpenEvent = {\n trigger: MentionTrigger;\n query: string;\n targetRect: MentionTargetRect;\n};\n\nexport type MentionCloseEvent = {\n reason: 'escape' | 'click-outside' | 'select' | 'manual' | 'backspace';\n};\n\nexport type MentionQueryChangeEvent = {\n query: string;\n trigger: MentionTrigger;\n};\n\nexport type MentionSelectEvent<TMeta = Record<string, unknown>> = {\n item: MentionItem<TMeta>;\n trigger: MentionTrigger;\n};\n\nexport type UseMentionDropdownOptions = {\n /** Custom debounce override */\n debounceMs?: number;\n};\n\nexport type UseMentionDropdownReturn<TMeta = Record<string, unknown>> = {\n // State\n isOpen: boolean;\n query: string;\n trigger: MentionTrigger | null;\n\n // Results\n items: MentionItem<TMeta>[];\n loading: boolean;\n error: Error | null;\n\n // Navigation\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n\n // Actions\n selectItem: (item: MentionItem<TMeta>) => void;\n close: (reason?: MentionCloseEvent['reason']) => void;\n\n // Refs for floating-ui\n refs: {\n setFloating: (el: HTMLElement | null) => void;\n setReference: (virtualEl: {\n getBoundingClientRect: () => DOMRect;\n getClientRects?: () => DOMRectList;\n }) => void;\n };\n floatingStyles: React.CSSProperties;\n};\n\nexport type MentionRenderProps<TMeta = Record<string, unknown>> = {\n element: MentionElement<TMeta>;\n attributes: Record<string, unknown>;\n children: React.ReactNode;\n selected: boolean;\n focused: boolean;\n};\n\nexport type MentionDropdownRenderProps<TMeta = Record<string, unknown>> =\n UseMentionDropdownReturn<TMeta>;\n\nexport type MentionItemRenderProps<TMeta = Record<string, unknown>> = {\n item: MentionItem<TMeta>;\n index: number;\n selected: boolean;\n onSelect: () => void;\n};\n\nexport type MentionEditor = {\n mentions: {\n state: MentionState;\n setState: (state: Partial<MentionState>) => void;\n open: (params: {\n trigger: MentionTrigger;\n targetRect: MentionTargetRect;\n triggerRange: MentionState['triggerRange'];\n }) => void;\n close: (reason?: MentionCloseEvent['reason']) => void;\n setQuery: (query: string) => void;\n };\n}\n\n// Extended editor type with mentions support\nexport type MentionYooEditor = BaseYooEditor & MentionEditor;\n\ndeclare module '@yoopta/editor' {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface YooEditor extends MentionEditor { }\n}\n","import type { BaseYooEditor, YooptaPathIndex } from '@yoopta/editor';\nimport { Blocks, generateId } from '@yoopta/editor';\nimport { Editor, Element, Transforms } from 'slate';\n\nimport type {\n MentionCloseEvent,\n MentionElement,\n MentionElementProps,\n MentionItem,\n MentionPluginOptions,\n MentionState,\n MentionTargetRect,\n MentionTrigger,\n} from '../types';\nimport { INITIAL_MENTION_STATE } from '../types';\n\n// Extended editor type with mentions support (internal use only)\ntype MentionYooEditor = BaseYooEditor & {\n mentions: {\n state: MentionState;\n setState: (state: Partial<MentionState>) => void;\n open: (params: {\n trigger: MentionTrigger;\n targetRect: MentionTargetRect;\n triggerRange: MentionState['triggerRange'];\n }) => void;\n close: (reason?: MentionCloseEvent['reason']) => void;\n setQuery: (query: string) => void;\n };\n};\n\n// Helper to safely access mentions state\nfunction getMentionEditor(editor: BaseYooEditor): MentionYooEditor {\n return editor as MentionYooEditor;\n}\n\n// ============================================================================\n// OPTION TYPES\n// ============================================================================\n\ntype MentionElementOptions<TMeta = Record<string, unknown>> = {\n props: Omit<MentionElementProps<TMeta>, 'nodeType'>;\n};\n\ntype InsertMentionOptions = {\n /** Focus the editor after inserting */\n focus?: boolean;\n};\n\ntype FindMentionOptions = {\n blockId?: string;\n at?: YooptaPathIndex;\n};\n\ntype UpdateMentionOptions = {\n blockId?: string;\n at?: YooptaPathIndex;\n};\n\n// ============================================================================\n// COMMANDS TYPE\n// ============================================================================\n\nexport type MentionCommandsType<TMeta = Record<string, unknown>> = {\n // Build\n buildMentionElement: (\n editor: BaseYooEditor,\n options: MentionElementOptions<TMeta>,\n ) => MentionElement<TMeta>;\n\n // Insert\n insertMention: (\n editor: BaseYooEditor,\n item: MentionItem<TMeta>,\n options?: InsertMentionOptions,\n ) => void;\n\n // Find\n findMention: (\n editor: BaseYooEditor,\n mentionId: string,\n options?: FindMentionOptions,\n ) => MentionElement<TMeta> | null;\n findMentions: (\n editor: BaseYooEditor,\n options?: FindMentionOptions,\n ) => MentionElement<TMeta>[];\n findMentionsByType: (\n editor: BaseYooEditor,\n type: string,\n options?: FindMentionOptions,\n ) => MentionElement<TMeta>[];\n\n // Update\n updateMention: (\n editor: BaseYooEditor,\n mentionId: string,\n props: Partial<Omit<MentionElementProps<TMeta>, 'nodeType'>>,\n options?: UpdateMentionOptions,\n ) => void;\n\n // Delete\n deleteMention: (editor: BaseYooEditor, mentionId: string, options?: FindMentionOptions) => void;\n\n // Dropdown control\n openDropdown: (\n editor: BaseYooEditor,\n params: {\n trigger: MentionTrigger;\n targetRect: MentionTargetRect;\n triggerRange: MentionState['triggerRange'];\n },\n ) => void;\n closeDropdown: (editor: BaseYooEditor, reason?: MentionCloseEvent['reason']) => void;\n\n // State\n getState: (editor: BaseYooEditor) => MentionState;\n getQuery: (editor: BaseYooEditor) => string;\n setQuery: (editor: BaseYooEditor, query: string) => void;\n getTrigger: (editor: BaseYooEditor) => MentionTrigger | null;\n\n // Utilities\n getTriggers: (editor: BaseYooEditor) => MentionTrigger[];\n getTriggerByChar: (editor: BaseYooEditor, char: string) => MentionTrigger | undefined;\n};\n\n// ============================================================================\n// COMMANDS IMPLEMENTATION\n// ============================================================================\n\nexport const MentionCommands: MentionCommandsType = {\n buildMentionElement: (_editor, options) => {\n const { props } = options;\n return {\n id: generateId(),\n type: 'mention',\n children: [{ text: '' }],\n props: {\n ...props,\n nodeType: 'inlineVoid',\n },\n } as MentionElement;\n },\n\n insertMention: (editor, item, options = {}) => {\n const mentionEditor = getMentionEditor(editor);\n const state = mentionEditor.mentions.state;\n if (!state.triggerRange) return;\n\n const { blockId, path, startOffset } = state.triggerRange;\n const slateEditor = Blocks.getBlockSlate(editor, { id: blockId });\n if (!slateEditor) return;\n\n // Calculate the end offset (current cursor position)\n const trigger = state.trigger;\n const query = state.query;\n const triggerLength = trigger?.char.length ?? 1;\n const endOffset = startOffset + triggerLength + query.length;\n\n // Select the range from trigger start to current position\n Transforms.select(slateEditor, {\n anchor: { path, offset: startOffset },\n focus: { path, offset: endOffset },\n });\n\n // Delete the trigger + query\n Transforms.delete(slateEditor);\n\n // Create and insert mention node\n const mentionNode: MentionElement = {\n id: generateId(),\n type: 'mention',\n children: [{ text: '' }],\n props: {\n id: item.id,\n type: item.type,\n name: item.name,\n avatar: item.avatar,\n meta: item.meta,\n nodeType: 'inlineVoid',\n },\n };\n\n Transforms.insertNodes(slateEditor, mentionNode);\n\n // Close dropdown\n const pluginOptions = editor.plugins.Mention?.options as MentionPluginOptions | undefined;\n if (pluginOptions?.closeOnSelect !== false) {\n mentionEditor.mentions.close('select');\n }\n\n // Trigger onSelect callback\n if (pluginOptions?.onSelect && trigger) {\n pluginOptions.onSelect(item, trigger);\n }\n\n // Focus if requested\n if (options.focus) {\n const block = Blocks.getBlock(editor, { id: blockId });\n if (block?.id) {\n editor.focusBlock(block.id);\n }\n }\n },\n\n findMention: (editor, mentionId, options = {}) => {\n const mentions = MentionCommands.findMentions(editor, options);\n return mentions.find((m) => m.props?.id === mentionId) ?? null;\n },\n\n findMentions: (editor, options = {}) => {\n try {\n const blockToFind = options.blockId\n ? { id: options.blockId }\n : { at: options.at ?? editor.path.current };\n\n const slateEditor = Blocks.getBlockSlate(editor, blockToFind);\n if (!slateEditor) return [];\n\n const mentions: MentionElement[] = [];\n\n for (const [node] of Editor.nodes(slateEditor, {\n at: [],\n match: (n): n is MentionElement =>\n Element.isElement(n) && !Editor.isEditor(n) && n.type === 'mention',\n })) {\n mentions.push(node);\n }\n\n return mentions;\n } catch {\n return [];\n }\n },\n\n findMentionsByType: (editor, type, options = {}) => {\n const mentions = MentionCommands.findMentions(editor, options);\n return mentions.filter((m) => m.props?.type === type);\n },\n\n updateMention: (editor, mentionId, props, options = {}) => {\n const blockToFind = options.blockId\n ? { id: options.blockId }\n : { at: options.at ?? editor.path.current };\n\n const slateEditor = Blocks.getBlockSlate(editor, blockToFind);\n if (!slateEditor) return;\n\n const entries = Array.from(\n Editor.nodes(slateEditor, {\n at: [],\n match: (n): n is MentionElement =>\n Element.isElement(n) && !Editor.isEditor(n) && n.type === 'mention' && n.props?.id === mentionId,\n }),\n );\n\n const firstEntry = entries[0];\n if (firstEntry) {\n const [node, path] = firstEntry;\n Transforms.setNodes(\n slateEditor,\n {\n props: {\n ...node.props,\n ...props,\n nodeType: 'inlineVoid',\n },\n },\n { at: path },\n );\n }\n },\n\n deleteMention: (editor, mentionId, options = {}) => {\n const blockToFind = options.blockId\n ? { id: options.blockId }\n : { at: options.at ?? editor.path.current };\n\n const slateEditor = Blocks.getBlockSlate(editor, blockToFind);\n if (!slateEditor) return;\n\n const entries = Array.from(\n Editor.nodes(slateEditor, {\n at: [],\n match: (n): n is MentionElement =>\n Element.isElement(n) && !Editor.isEditor(n) && n.type === 'mention' && n.props?.id === mentionId,\n }),\n );\n\n const firstEntry = entries[0];\n if (firstEntry) {\n const [, path] = firstEntry;\n Transforms.removeNodes(slateEditor, { at: path });\n }\n },\n\n openDropdown: (editor, params) => {\n getMentionEditor(editor).mentions.open(params);\n },\n\n closeDropdown: (editor, reason = 'manual') => {\n getMentionEditor(editor).mentions.close(reason);\n },\n\n getState: (editor) => getMentionEditor(editor).mentions?.state ?? INITIAL_MENTION_STATE,\n\n getQuery: (editor) => getMentionEditor(editor).mentions?.state.query ?? '',\n\n setQuery: (editor, query) => {\n getMentionEditor(editor).mentions.setQuery(query);\n },\n\n getTrigger: (editor) => getMentionEditor(editor).mentions?.state.trigger ?? null,\n\n getTriggers: (editor) => {\n const options = editor.plugins.Mention?.options as MentionPluginOptions | undefined;\n if (!options) return [{ char: '@' }];\n\n if (options.triggers && options.triggers.length > 0) {\n return options.triggers;\n }\n\n return [{ char: options.char ?? '@' }];\n },\n\n getTriggerByChar: (editor, char) => {\n const triggers = MentionCommands.getTriggers(editor);\n return triggers.find((t) => t.char === char);\n },\n};\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n/**\n * Constants.\n */\n\nvar IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nvar MODIFIERS = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey'\n};\n\nvar ALIASES = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta'\n};\n\nvar CODES = {\n backspace: 8,\n tab: 9,\n enter: 13,\n shift: 16,\n control: 17,\n alt: 18,\n pause: 19,\n capslock: 20,\n escape: 27,\n ' ': 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n arrowleft: 37,\n arrowup: 38,\n arrowright: 39,\n arrowdown: 40,\n insert: 45,\n delete: 46,\n meta: 91,\n numlock: 144,\n scrolllock: 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n '\\'': 222\n};\n\nfor (var f = 1; f < 20; f++) {\n CODES['f' + f] = 111 + f;\n}\n\n/**\n * Is hotkey?\n */\n\nfunction isHotkey(hotkey, options, event) {\n if (options && !('byKey' in options)) {\n event = options;\n options = null;\n }\n\n if (!Array.isArray(hotkey)) {\n hotkey = [hotkey];\n }\n\n var array = hotkey.map(function (string) {\n return parseHotkey(string, options);\n });\n var check = function check(e) {\n return array.some(function (object) {\n return compareHotkey(object, e);\n });\n };\n var ret = event == null ? check : check(event);\n return ret;\n}\n\nfunction isCodeHotkey(hotkey, event) {\n return isHotkey(hotkey, event);\n}\n\nfunction isKeyHotkey(hotkey, event) {\n return isHotkey(hotkey, { byKey: true }, event);\n}\n\n/**\n * Parse.\n */\n\nfunction parseHotkey(hotkey, options) {\n var byKey = options && options.byKey;\n var ret = {};\n\n // Special case to handle the `+` key since we use it as a separator.\n hotkey = hotkey.replace('++', '+add');\n var values = hotkey.split('+');\n var length = values.length;\n\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n\n for (var k in MODIFIERS) {\n ret[MODIFIERS[k]] = false;\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var value = _step.value;\n\n var optional = value.endsWith('?') && value.length > 1;\n\n if (optional) {\n value = value.slice(0, -1);\n }\n\n var name = toKeyName(value);\n var modifier = MODIFIERS[name];\n\n if (value.length > 1 && !modifier && !ALIASES[value] && !CODES[name]) {\n throw new TypeError('Unknown modifier: \"' + value + '\"');\n }\n\n if (length === 1 || !modifier) {\n if (byKey) {\n ret.key = name;\n } else {\n ret.which = toKeyCode(value);\n }\n }\n\n if (modifier) {\n ret[modifier] = optional ? null : true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return ret;\n}\n\n/**\n * Compare.\n */\n\nfunction compareHotkey(object, event) {\n for (var key in object) {\n var expected = object[key];\n var actual = void 0;\n\n if (expected == null) {\n continue;\n }\n\n if (key === 'key' && event.key != null) {\n actual = event.key.toLowerCase();\n } else if (key === 'which') {\n actual = expected === 91 && event.which === 93 ? 91 : event.which;\n } else {\n actual = event[key];\n }\n\n if (actual == null && expected === false) {\n continue;\n }\n\n if (actual !== expected) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Utils.\n */\n\nfunction toKeyCode(name) {\n name = toKeyName(name);\n var code = CODES[name] || name.toUpperCase().charCodeAt(0);\n return code;\n}\n\nfunction toKeyName(name) {\n name = name.toLowerCase();\n name = ALIASES[name] || name;\n return name;\n}\n\n/**\n * Export.\n */\n\nexports.default = isHotkey;\nexports.isHotkey = isHotkey;\nexports.isCodeHotkey = isCodeHotkey;\nexports.isKeyHotkey = isKeyHotkey;\nexports.parseHotkey = parseHotkey;\nexports.compareHotkey = compareHotkey;\nexports.toKeyCode = toKeyCode;\nexports.toKeyName = toKeyName;","/**\n * Types.\n */\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\nimport { DOMEditor } from '../plugin/dom-editor'\n\nexport {\n DOMNode,\n DOMComment,\n DOMElement,\n DOMText,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n}\n\ndeclare global {\n interface Window {\n Selection: (typeof Selection)['constructor']\n DataTransfer: (typeof DataTransfer)['constructor']\n Node: (typeof Node)['constructor']\n }\n}\n\nexport type DOMPoint = [Node, number]\n\n/**\n * Returns the host window of a DOM node\n */\n\nexport const getDefaultView = (value: any): Window | null => {\n return (\n (value && value.ownerDocument && value.ownerDocument.defaultView) || null\n )\n}\n\n/**\n * Check if a DOM node is a comment node.\n */\n\nexport const isDOMComment = (value: any): value is DOMComment => {\n return isDOMNode(value) && value.nodeType === 8\n}\n\n/**\n * Check if a DOM node is an element node.\n */\n\nexport const isDOMElement = (value: any): value is DOMElement => {\n return isDOMNode(value) && value.nodeType === 1\n}\n\n/**\n * Check if a value is a DOM node.\n */\n\nexport const isDOMNode = (value: any): value is DOMNode => {\n const window = getDefaultView(value)\n return !!window && value instanceof window.Node\n}\n\n/**\n * Check if a value is a DOM selection.\n */\n\nexport const isDOMSelection = (value: any): value is DOMSelection => {\n const window = value && value.anchorNode && getDefaultView(value.anchorNode)\n return !!window && value instanceof window.Selection\n}\n\n/**\n * Check if a DOM node is an element node.\n */\n\nexport const isDOMText = (value: any): value is DOMText => {\n return isDOMNode(value) && value.nodeType === 3\n}\n\n/**\n * Checks whether a paste event is a plaintext-only event.\n */\n\nexport const isPlainTextOnlyPaste = (event: ClipboardEvent) => {\n return (\n event.clipboardData &&\n event.clipboardData.getData('text/plain') !== '' &&\n event.clipboardData.types.length === 1\n )\n}\n\n/**\n * Normalize a DOM point so that it always refers to a text node.\n */\n\nexport const normalizeDOMPoint = (domPoint: DOMPoint): DOMPoint => {\n let [node, offset] = domPoint\n\n // If it's an element node, its offset refers to the index of its children\n // including comment nodes, so try to find the right text child node.\n if (isDOMElement(node) && node.childNodes.length) {\n let isLast = offset === node.childNodes.length\n let index = isLast ? offset - 1 : offset\n ;[node, index] = getEditableChildAndIndex(\n node,\n index,\n isLast ? 'backward' : 'forward'\n )\n // If the editable child found is in front of input offset, we instead seek to its end\n isLast = index < offset\n\n // If the node has children, traverse until we have a leaf node. Leaf nodes\n // can be either text nodes, or other void DOM nodes.\n while (isDOMElement(node) && node.childNodes.length) {\n const i = isLast ? node.childNodes.length - 1 : 0\n node = getEditableChild(node, i, isLast ? 'backward' : 'forward')\n }\n\n // Determine the new offset inside the text node.\n offset = isLast && node.textContent != null ? node.textContent.length : 0\n }\n\n // Return the node and offset.\n return [node, offset]\n}\n\n/**\n * Determines whether the active element is nested within a shadowRoot\n */\n\nexport const hasShadowRoot = (node: Node | null) => {\n let parent = node && node.parentNode\n while (parent) {\n if (parent.toString() === '[object ShadowRoot]') {\n return true\n }\n parent = parent.parentNode\n }\n return false\n}\n\n/**\n * Get the nearest editable child and index at `index` in a `parent`, preferring\n * `direction`.\n */\n\nexport const getEditableChildAndIndex = (\n parent: DOMElement,\n index: number,\n direction: 'forward' | 'backward'\n): [DOMNode, number] => {\n const { childNodes } = parent\n let child = childNodes[index]\n let i = index\n let triedForward = false\n let triedBackward = false\n\n // While the child is a comment node, or an element node with no children,\n // keep iterating to find a sibling non-void, non-comment node.\n while (\n isDOMComment(child) ||\n (isDOMElement(child) && child.childNodes.length === 0) ||\n (isDOMElement(child) && child.getAttribute('contenteditable') === 'false')\n ) {\n if (triedForward && triedBackward) {\n break\n }\n\n if (i >= childNodes.length) {\n triedForward = true\n i = index - 1\n direction = 'backward'\n continue\n }\n\n if (i < 0) {\n triedBackward = true\n i = index + 1\n direction = 'forward'\n continue\n }\n\n child = childNodes[i]\n index = i\n i += direction === 'forward' ? 1 : -1\n }\n\n return [child, index]\n}\n\n/**\n * Get the nearest editable child at `index` in a `parent`, preferring\n * `direction`.\n */\n\nexport const getEditableChild = (\n parent: DOMElement,\n index: number,\n direction: 'forward' | 'backward'\n): DOMNode => {\n const [child] = getEditableChildAndIndex(parent, index, direction)\n return child\n}\n\n/**\n * Get a plaintext representation of the content of a node, accounting for block\n * elements which get a newline appended.\n *\n * The domNode must be attached to the DOM.\n */\n\nexport const getPlainText = (domNode: DOMNode) => {\n let text = ''\n\n if (isDOMText(domNode) && domNode.nodeValue) {\n return domNode.nodeValue\n }\n\n if (isDOMElement(domNode)) {\n for (const childNode of Array.from(domNode.childNodes)) {\n text += getPlainText(childNode)\n }\n\n const display = getComputedStyle(domNode).getPropertyValue('display')\n\n if (display === 'block' || display === 'list' || domNode.tagName === 'BR') {\n text += '\\n'\n }\n }\n\n return text\n}\n\n/**\n * Get x-slate-fragment attribute from data-slate-fragment\n */\nconst catchSlateFragment = /data-slate-fragment=\"(.+?)\"/m\nexport const getSlateFragmentAttribute = (\n dataTransfer: DataTransfer\n): string | void => {\n const htmlData = dataTransfer.getData('text/html')\n const [, fragment] = htmlData.match(catchSlateFragment) || []\n return fragment\n}\n\n/**\n * Get the x-slate-fragment attribute that exist in text/html data\n * and append it to the DataTransfer object\n */\nexport const getClipboardData = (\n dataTransfer: DataTransfer,\n clipboardFormatKey = 'x-slate-fragment'\n): DataTransfer => {\n if (!dataTransfer.getData(`application/${clipboardFormatKey}`)) {\n const fragment = getSlateFragmentAttribute(dataTransfer)\n if (fragment) {\n const clipboardData = new DataTransfer()\n dataTransfer.types.forEach(type => {\n clipboardData.setData(type, dataTransfer.getData(type))\n })\n clipboardData.setData(`application/${clipboardFormatKey}`, fragment)\n return clipboardData\n }\n }\n return dataTransfer\n}\n\n/**\n * Get the dom selection from Shadow Root if possible, otherwise from the document\n */\nexport const getSelection = (root: Document | ShadowRoot): Selection | null => {\n if (root.getSelection != null) {\n return root.getSelection()\n }\n return document.getSelection()\n}\n\n/**\n * Check whether a mutation originates from a editable element inside the editor.\n */\n\nexport const isTrackedMutation = (\n editor: DOMEditor,\n mutation: MutationRecord,\n batch: MutationRecord[]\n): boolean => {\n const { target } = mutation\n if (isDOMElement(target) && target.matches('[contentEditable=\"false\"]')) {\n return false\n }\n\n const { document } = DOMEditor.getWindow(editor)\n if (containsShadowAware(document, target)) {\n return DOMEditor.hasDOMNode(editor, target, { editable: true })\n }\n\n const parentMutation = batch.find(({ addedNodes, removedNodes }) => {\n for (const node of addedNodes) {\n if (node === target || containsShadowAware(node, target)) {\n return true\n }\n }\n\n for (const node of removedNodes) {\n if (node === target || containsShadowAware(node, target)) {\n return true\n }\n }\n })\n\n if (!parentMutation || parentMutation === mutation) {\n return false\n }\n\n // Target add/remove is tracked. Track the mutation if we track the parent mutation.\n return isTrackedMutation(editor, parentMutation, batch)\n}\n\n/**\n * Retrieves the deepest active element in the DOM, considering nested shadow DOMs.\n */\nexport const getActiveElement = () => {\n let activeElement = document.activeElement\n\n while (activeElement?.shadowRoot && activeElement.shadowRoot?.activeElement) {\n activeElement = activeElement?.shadowRoot?.activeElement\n }\n\n return activeElement\n}\n\n/**\n * @returns `true` if `otherNode` is before `node` in the document; otherwise, `false`.\n */\nexport const isBefore = (node: DOMNode, otherNode: DOMNode): boolean =>\n Boolean(\n node.compareDocumentPosition(otherNode) &\n DOMNode.DOCUMENT_POSITION_PRECEDING\n )\n\n/**\n * @returns `true` if `otherNode` is after `node` in the document; otherwise, `false`.\n */\nexport const isAfter = (node: DOMNode, otherNode: DOMNode): boolean =>\n Boolean(\n node.compareDocumentPosition(otherNode) &\n DOMNode.DOCUMENT_POSITION_FOLLOWING\n )\n\n/**\n * Shadow DOM-aware version of Element.closest()\n * Traverses up the DOM tree, crossing shadow DOM boundaries\n */\nexport const closestShadowAware = (\n element: DOMElement | null | undefined,\n selector: string\n): DOMElement | null => {\n if (!element) {\n return null\n }\n\n let current: DOMElement | null = element\n\n while (current) {\n if (current.matches && current.matches(selector)) {\n return current\n }\n\n if (current.parentElement) {\n current = current.parentElement\n } else if (current.parentNode && 'host' in current.parentNode) {\n current = (current.parentNode as ShadowRoot).host as DOMElement\n } else {\n return null\n }\n }\n\n return null\n}\n\n/**\n * Shadow DOM-aware version of Node.contains()\n * Checks if a node contains another node, crossing shadow DOM boundaries\n */\nexport const containsShadowAware = (\n parent: DOMNode | null | undefined,\n child: DOMNode | null | undefined\n): boolean => {\n if (!parent || !child) {\n return false\n }\n\n if (parent.contains(child)) {\n return true\n }\n\n let current: DOMNode | null = child\n\n while (current) {\n if (current === parent) {\n return true\n }\n\n if (current.parentNode) {\n if ('host' in current.parentNode) {\n current = (current.parentNode as ShadowRoot).host\n } else {\n current = current.parentNode\n }\n } else {\n return false\n }\n }\n\n return false\n}\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !window.MSStream\n\nexport const IS_APPLE =\n typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent)\n\nexport const IS_ANDROID =\n typeof navigator !== 'undefined' && /Android/.test(navigator.userAgent)\n\nexport const IS_FIREFOX =\n typeof navigator !== 'undefined' &&\n /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent)\n\nexport const IS_WEBKIT =\n typeof navigator !== 'undefined' &&\n /AppleWebKit(?!.*Chrome)/i.test(navigator.userAgent)\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY =\n typeof navigator !== 'undefined' &&\n /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])(?:\\.)/i.test(navigator.userAgent)\n\nexport const IS_CHROME =\n typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent)\n\n// Native `beforeInput` events don't work well with react on Chrome 75\n// and older, Chrome 76+ can use `beforeInput` though.\nexport const IS_CHROME_LEGACY =\n typeof navigator !== 'undefined' &&\n /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])(?:\\.)/i.test(navigator.userAgent)\n\nexport const IS_ANDROID_CHROME_LEGACY =\n IS_ANDROID &&\n typeof navigator !== 'undefined' &&\n /Chrome?\\/(?:[0-5]?\\d)(?:\\.)/i.test(navigator.userAgent)\n\n// Firefox did not support `beforeInput` until `v87`.\nexport const IS_FIREFOX_LEGACY =\n typeof navigator !== 'undefined' &&\n /^(?!.*Seamonkey)(?=.*Firefox\\/(?:[0-7][0-9]|[0-8][0-6])(?:\\.)).*/i.test(\n navigator.userAgent\n )\n\n// UC mobile browser\nexport const IS_UC_MOBILE =\n typeof navigator !== 'undefined' && /.*UCBrowser/.test(navigator.userAgent)\n\n// Wechat browser (not including mac wechat)\nexport const IS_WECHATBROWSER =\n typeof navigator !== 'undefined' &&\n /.*Wechat/.test(navigator.userAgent) &&\n !/.*MacWechat/.test(navigator.userAgent) && // avoid lookbehind (buggy in safari < 16.4)\n (!IS_CHROME || IS_CHROME_LEGACY) // wechat and low chrome is real wechat\n// Check if DOM is available as React does internally.\n// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const CAN_USE_DOM = !!(\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined'\n)\n\n// Check if the browser is Safari and older than 17\nexport const IS_SAFARI_LEGACY =\n typeof navigator !== 'undefined' &&\n /Safari/.test(navigator.userAgent) &&\n /Version\\/(\\d+)/.test(navigator.userAgent) &&\n (navigator.userAgent.match(/Version\\/(\\d+)/)?.[1]\n ? parseInt(navigator.userAgent.match(/Version\\/(\\d+)/)?.[1]!, 10) < 17\n : false)\n\n// COMPAT: Firefox/Edge Legacy don't support the `beforeinput` event\n// Chrome Legacy doesn't support `beforeinput` correctly\nexport const HAS_BEFORE_INPUT_SUPPORT =\n (!IS_CHROME_LEGACY || !IS_ANDROID_CHROME_LEGACY) &&\n !IS_EDGE_LEGACY &&\n // globalThis is undefined in older browsers\n typeof globalThis !== 'undefined' &&\n globalThis.InputEvent &&\n // @ts-ignore The `getTargetRanges` property isn't recognized.\n typeof globalThis.InputEvent.prototype.getTargetRanges === 'function'\n","/**\n * An auto-incrementing identifier for keys.\n */\n\nlet n = 0\n\n/**\n * A class that keeps track of a key string. We use a full class here because we\n * want to be able to use them as keys in `WeakMap` objects.\n */\n\nexport class Key {\n id: string\n\n constructor() {\n this.id = `${n++}`\n }\n}\n","import {\n Ancestor,\n Editor,\n Node,\n Operation,\n Point,\n Range,\n RangeRef,\n Text,\n} from 'slate'\nimport { TextDiff } from './diff-text'\nimport { Key } from './key'\n\nexport type Action = { at?: Point | Range; run: () => void }\n\n/**\n * Two weak maps that allow us rebuild a path given a node. They are populated\n * at render time such that after a render occurs we can always backtrack.\n */\nexport const IS_NODE_MAP_DIRTY: WeakMap<Editor, boolean> = new WeakMap()\nexport const NODE_TO_INDEX: WeakMap<Node, number> = new WeakMap()\nexport const NODE_TO_PARENT: WeakMap<Node, Ancestor> = new WeakMap()\n\n/**\n * Weak maps that allow us to go between Slate nodes and DOM nodes. These\n * are used to resolve DOM event-related logic into Slate actions.\n */\nexport const EDITOR_TO_WINDOW: WeakMap<Editor, Window> = new WeakMap()\nexport const EDITOR_TO_ELEMENT: WeakMap<Editor, HTMLElement> = new WeakMap()\nexport const EDITOR_TO_PLACEHOLDER: WeakMap<Editor, string> = new WeakMap()\nexport const EDITOR_TO_PLACEHOLDER_ELEMENT: WeakMap<Editor, HTMLElement> =\n new WeakMap()\nexport const ELEMENT_TO_NODE: WeakMap<HTMLElement, Node> = new WeakMap()\nexport const NODE_TO_ELEMENT: WeakMap<Node, HTMLElement> = new WeakMap()\nexport const NODE_TO_KEY: WeakMap<Node, Key> = new WeakMap()\nexport const EDITOR_TO_KEY_TO_ELEMENT: WeakMap<\n Editor,\n WeakMap<Key, HTMLElement>\n> = new WeakMap()\n\n/**\n * Weak maps for storing editor-related state.\n */\n\nexport const IS_READ_ONLY: WeakMap<Editor, boolean> = new WeakMap()\nexport const IS_FOCUSED: WeakMap<Editor, boolean> = new WeakMap()\nexport const IS_COMPOSING: WeakMap<Editor, boolean> = new WeakMap()\n\nexport const EDITOR_TO_USER_SELECTION: WeakMap<Editor, RangeRef | null> =\n new WeakMap()\n\n/**\n * Weak map for associating the context `onChange` context with the plugin.\n */\n\nexport const EDITOR_TO_ON_CHANGE = new WeakMap<\n Editor,\n (options?: { operation?: Operation }) => void\n>()\n\n/**\n * Weak maps for saving pending state on composition stage.\n */\n\nexport const EDITOR_TO_SCHEDULE_FLUSH: WeakMap<Editor, () => void> =\n new WeakMap()\n\nexport const EDITOR_TO_PENDING_INSERTION_MARKS: WeakMap<\n Editor,\n Partial<Text> | null\n> = new WeakMap()\n\nexport const EDITOR_TO_USER_MARKS: WeakMap<Editor, Partial<Text> | null> =\n new WeakMap()\n\n/**\n * Android input handling specific weak-maps\n */\n\nexport const EDITOR_TO_PENDING_DIFFS: WeakMap<Editor, TextDiff[]> =\n new WeakMap()\n\nexport const EDITOR_TO_PENDING_ACTION: WeakMap<Editor, Action | null> =\n new WeakMap()\n\nexport const EDITOR_TO_PENDING_SELECTION: WeakMap<Editor, Range | null> =\n new WeakMap()\n\nexport const EDITOR_TO_FORCE_RENDER: WeakMap<Editor, () => void> = new WeakMap()\n\n/**\n * Symbols.\n */\n\nexport const PLACEHOLDER_SYMBOL = Symbol('placeholder') as unknown as string\nexport const MARK_PLACEHOLDER_SYMBOL = Symbol(\n 'mark-placeholder'\n) as unknown as string\n","import {\n BaseEditor,\n Editor,\n Element,\n Node,\n Path,\n Point,\n Range,\n Scrubber,\n Transforms,\n} from 'slate'\nimport { TextDiff } from '../utils/diff-text'\nimport {\n closestShadowAware,\n containsShadowAware,\n DOMElement,\n DOMNode,\n DOMPoint,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n DOMText,\n getSelection,\n hasShadowRoot,\n isAfter,\n isBefore,\n isDOMElement,\n isDOMNode,\n isDOMSelection,\n normalizeDOMPoint,\n} from '../utils/dom'\nimport { IS_ANDROID, IS_CHROME, IS_FIREFOX } from '../utils/environment'\n\nimport { Key } from '../utils/key'\nimport {\n EDITOR_TO_ELEMENT,\n EDITOR_TO_KEY_TO_ELEMENT,\n EDITOR_TO_PENDING_DIFFS,\n EDITOR_TO_SCHEDULE_FLUSH,\n EDITOR_TO_WINDOW,\n ELEMENT_TO_NODE,\n IS_COMPOSING,\n IS_FOCUSED,\n IS_READ_ONLY,\n NODE_TO_INDEX,\n NODE_TO_KEY,\n NODE_TO_PARENT,\n} from '../utils/weak-maps'\n\n/**\n * A DOM-specific version of the `Editor` interface.\n */\n\nexport interface DOMEditor extends BaseEditor {\n hasEditableTarget: (\n editor: DOMEditor,\n target: EventTarget | null\n ) => target is DOMNode\n hasRange: (editor: DOMEditor, range: Range) => boolean\n hasSelectableTarget: (\n editor: DOMEditor,\n target: EventTarget | null\n ) => boolean\n hasTarget: (\n editor: DOMEditor,\n target: EventTarget | null\n ) => target is DOMNode\n insertData: (data: DataTransfer) => void\n insertFragmentData: (data: DataTransfer) => boolean\n insertTextData: (data: DataTransfer) => boolean\n isTargetInsideNonReadonlyVoid: (\n editor: DOMEditor,\n target: EventTarget | null\n ) => boolean\n setFragmentData: (\n data: DataTransfer,\n originEvent?: 'drag' | 'copy' | 'cut'\n ) => void\n}\n\nexport interface DOMEditorInterface {\n /**\n * Experimental and android specific: Get pending diffs\n */\n androidPendingDiffs: (editor: Editor) => TextDiff[] | undefined\n\n /**\n * Experimental and android specific: Flush all pending diffs and cancel composition at the next possible time.\n */\n androidScheduleFlush: (editor: Editor) => void\n\n /**\n * Blur the editor.\n */\n blur: (editor: DOMEditor) => void\n\n /**\n * Deselect the editor.\n */\n deselect: (editor: DOMEditor) => void\n\n /**\n * Find the DOM node that implements DocumentOrShadowRoot for the editor.\n */\n findDocumentOrShadowRoot: (editor: DOMEditor) => Document | ShadowRoot\n\n /**\n * Get the target range from a DOM `event`.\n */\n findEventRange: (editor: DOMEditor, event: any) => Range\n\n /**\n * Find a key for a Slate node.\n */\n findKey: (editor: DOMEditor, node: Node) => Key\n\n /**\n * Find the path of Slate node.\n */\n findPath: (editor: DOMEditor, node: Node) => Path\n\n /**\n * Focus the editor.\n */\n focus: (editor: DOMEditor, options?: { retries: number }) => void\n\n /**\n * Return the host window of the current editor.\n */\n getWindow: (editor: DOMEditor) => Window\n\n /**\n * Check if a DOM node is within the editor.\n */\n hasDOMNode: (\n editor: DOMEditor,\n target: DOMNode,\n options?: { editable?: boolean }\n ) => boolean\n\n /**\n * Check if the target is editable and in the editor.\n */\n hasEditableTarget: (\n editor: DOMEditor,\n target: EventTarget | null\n ) => target is DOMNode\n\n /**\n *\n */\n hasRange: (editor: DOMEditor, range: Range) => boolean\n\n /**\n * Check if the target can be selectable\n */\n hasSelectableTarget: (\n editor: DOMEditor,\n target: EventTarget | null\n ) => boolean\n\n /**\n * Check if the target is in the editor.\n */\n hasTarget: (\n editor: DOMEditor,\n target: EventTarget | null\n ) => target is DOMNode\n\n /**\n * Insert data from a `DataTransfer` into the editor.\n */\n insertData: (editor: DOMEditor, data: DataTransfer) => void\n\n /**\n * Insert fragment data from a `DataTransfer` into the editor.\n */\n insertFragmentData: (editor: DOMEditor, data: DataTransfer) => boolean\n\n /**\n * Insert text data from a `DataTransfer` into the editor.\n */\n insertTextData: (editor: DOMEditor, data: DataTransfer) => boolean\n\n /**\n * Check if the user is currently composing inside the editor.\n */\n isComposing: (editor: DOMEditor) => boolean\n\n /**\n * Check if the editor is focused.\n */\n isFocused: (editor: DOMEditor) => boolean\n\n /**\n * Check if the editor is in read-only mode.\n */\n isReadOnly: (editor: DOMEditor) => boolean\n\n /**\n * Check if the target is inside void and in an non-readonly editor.\n */\n isTargetInsideNonReadonlyVoid: (\n editor: DOMEditor,\n target: EventTarget | null\n ) => boolean\n\n /**\n * Sets data from the currently selected fragment on a `DataTransfer`.\n */\n setFragmentData: (\n editor: DOMEditor,\n data: DataTransfer,\n originEvent?: 'drag' | 'copy' | 'cut'\n ) => void\n\n /**\n * Find the native DOM element from a Slate node.\n */\n toDOMNode: (editor: DOMEditor, node: Node) => HTMLElement\n\n /**\n * Find a native DOM selection point from a Slate point.\n */\n toDOMPoint: (editor: DOMEditor, point: Point) => DOMPoint\n\n /**\n * Find a native DOM range from a Slate `range`.\n *\n * Notice: the returned range will always be ordinal regardless of the direction of Slate `range` due to DOM API limit.\n *\n * there is no way to create a reverse DOM Range using Range.setStart/setEnd\n * according to https://dom.spec.whatwg.org/#concept-range-bp-set.\n */\n toDOMRange: (editor: DOMEditor, range: Range) => DOMRange\n\n /**\n * Find a Slate node from a native DOM `element`.\n */\n toSlateNode: (editor: DOMEditor, domNode: DOMNode) => Node\n\n /**\n * Find a Slate point from a DOM selection's `domNode` and `domOffset`.\n */\n toSlatePoint: <T extends boolean>(\n editor: DOMEditor,\n domPoint: DOMPoint,\n options: {\n exactMatch: boolean\n suppressThrow: T\n /**\n * The direction to search for Slate leaf nodes if `domPoint` is\n * non-editable and non-void.\n */\n searchDirection?: 'forward' | 'backward'\n }\n ) => T extends true ? Point | null : Point\n\n /**\n * Find a Slate range from a DOM range or selection.\n */\n toSlateRange: <T extends boolean>(\n editor: DOMEditor,\n domRange: DOMRange | DOMStaticRange | DOMSelection,\n options: {\n exactMatch: boolean\n suppressThrow: T\n }\n ) => T extends true ? Range | null : Range\n}\n\n// eslint-disable-next-line no-redeclare\nexport const DOMEditor: DOMEditorInterface = {\n androidPendingDiffs: editor => EDITOR_TO_PENDING_DIFFS.get(editor),\n\n androidScheduleFlush: editor => {\n EDITOR_TO_SCHEDULE_FLUSH.get(editor)?.()\n },\n\n blur: editor => {\n const el = DOMEditor.toDOMNode(editor, editor)\n const root = DOMEditor.findDocumentOrShadowRoot(editor)\n IS_FOCUSED.set(editor, false)\n\n if (root.activeElement === el) {\n el.blur()\n }\n },\n\n deselect: editor => {\n const { selection } = editor\n const root = DOMEditor.findDocumentOrShadowRoot(editor)\n const domSelection = getSelection(root)\n\n if (domSelection && domSelection.rangeCount > 0) {\n domSelection.removeAllRanges()\n }\n\n if (selection) {\n Transforms.deselect(editor)\n }\n },\n\n findDocumentOrShadowRoot: editor => {\n const el = DOMEditor.toDOMNode(editor, editor)\n const root = el.getRootNode()\n\n if (root instanceof Document || root instanceof ShadowRoot) {\n return root\n }\n\n return el.ownerDocument\n },\n\n findEventRange: (editor, event) => {\n if ('nativeEvent' in event) {\n event = event.nativeEvent\n }\n\n const { clientX: x, clientY: y, target } = event\n\n if (x == null || y == null) {\n throw new Error(`Cannot resolve a Slate range from a DOM event: ${event}`)\n }\n\n const node = DOMEditor.toSlateNode(editor, event.target)\n const path = DOMEditor.findPath(editor, node)\n\n // If the drop target is inside a void node, move it into either the\n // next or previous node, depending on which side the `x` and `y`\n // coordinates are closest to.\n if (Element.isElement(node) && Editor.isVoid(editor, node)) {\n const rect = target.getBoundingClientRect()\n const isPrev = editor.isInline(node)\n ? x - rect.left < rect.left + rect.width - x\n : y - rect.top < rect.top + rect.height - y\n\n const edge = Editor.point(editor, path, {\n edge: isPrev ? 'start' : 'end',\n })\n const point = isPrev\n ? Editor.before(editor, edge)\n : Editor.after(editor, edge)\n\n if (point) {\n const range = Editor.range(editor, point)\n return range\n }\n }\n\n // Else resolve a range from the caret position where the drop occured.\n let domRange\n const { document } = DOMEditor.getWindow(editor)\n\n // COMPAT: In Firefox, `caretRangeFromPoint` doesn't exist. (2016/07/25)\n if (document.caretRangeFromPoint) {\n domRange = document.caretRangeFromPoint(x, y)\n } else {\n const position = document.caretPositionFromPoint(x, y)\n\n if (position) {\n domRange = document.createRange()\n domRange.setStart(position.offsetNode, position.offset)\n domRange.setEnd(position.offsetNode, position.offset)\n }\n }\n\n if (!domRange) {\n throw new Error(`Cannot resolve a Slate range from a DOM event: ${event}`)\n }\n\n // Resolve a Slate range from the DOM range.\n const range = DOMEditor.toSlateRange(editor, domRange, {\n exactMatch: false,\n suppressThrow: false,\n })\n return range\n },\n\n findKey: (editor, node) => {\n let key = NODE_TO_KEY.get(node)\n\n if (!key) {\n key = new Key()\n NODE_TO_KEY.set(node, key)\n }\n\n return key\n },\n\n findPath: (editor, node) => {\n const path: Path = []\n let child = node\n\n while (true) {\n const parent = NODE_TO_PARENT.get(child)\n\n if (parent == null) {\n if (Editor.isEditor(child)) {\n return path\n } else {\n break\n }\n }\n\n const i = NODE_TO_INDEX.get(child)\n\n if (i == null) {\n break\n }\n\n path.unshift(i)\n child = parent\n }\n\n throw new Error(\n `Unable to find the path for Slate node: ${Scrubber.stringify(node)}`\n )\n },\n\n focus: (editor, options = { retries: 5 }) => {\n // Return if already focused\n if (IS_FOCUSED.get(editor)) {\n return\n }\n\n // Return if no dom node is associated with the editor, which means the editor is not yet mounted\n // or has been unmounted. This can happen especially, while retrying to focus the editor.\n if (!EDITOR_TO_ELEMENT.get(editor)) {\n return\n }\n\n // Retry setting focus if the editor has pending operations.\n // The DOM (selection) is unstable while changes are applied.\n // Retry until retries are exhausted or editor is focused.\n if (options.retries <= 0) {\n throw new Error(\n 'Could not set focus, editor seems stuck with pending operations'\n )\n }\n if (editor.operations.length > 0) {\n setTimeout(() => {\n DOMEditor.focus(editor, { retries: options.retries - 1 })\n }, 10)\n return\n }\n\n const el = DOMEditor.toDOMNode(editor, editor)\n const root = DOMEditor.findDocumentOrShadowRoot(editor)\n if (root.activeElement !== el) {\n // Ensure that the DOM selection state is set to the editor's selection\n if (editor.selection && root instanceof Document) {\n const domSelection = getSelection(root)\n const domRange = DOMEditor.toDOMRange(editor, editor.selection)\n domSelection?.removeAllRanges()\n domSelection?.addRange(domRange)\n }\n // Create a new selection in the top of the document if missing\n if (!editor.selection) {\n Transforms.select(editor, Editor.start(editor, []))\n }\n // IS_FOCUSED should be set before calling el.focus() to ensure that\n // FocusedContext is updated to the correct value\n IS_FOCUSED.set(editor, true)\n el.focus({ preventScroll: true })\n }\n },\n\n getWindow: editor => {\n const window = EDITOR_TO_WINDOW.get(editor)\n if (!window) {\n throw new Error('Unable to find a host window element for this editor')\n }\n return window\n },\n\n hasDOMNode: (editor, target, options = {}) => {\n const { editable = false } = options\n const editorEl = DOMEditor.toDOMNode(editor, editor)\n let targetEl\n\n // COMPAT: In Firefox, reading `target.nodeType` will throw an error if\n // target is originating from an internal \"restricted\" element (e.g. a\n // stepper arrow on a number input). (2018/05/04)\n // https://github.com/ianstormtaylor/slate/issues/1819\n try {\n targetEl = (\n isDOMElement(target) ? target : target.parentElement\n ) as HTMLElement\n } catch (err) {\n if (\n err instanceof Error &&\n !err.message.includes('Permission denied to access property \"nodeType\"')\n ) {\n throw err\n }\n }\n\n if (!targetEl) {\n return false\n }\n\n return (\n closestShadowAware(targetEl, `[data-slate-editor]`) === editorEl &&\n (!editable || targetEl.isContentEditable\n ? true\n : (typeof targetEl.isContentEditable === 'boolean' && // isContentEditable exists only on HTMLElement, and on other nodes it will be undefined\n // this is the core logic that lets you know you got the right editor.selection instead of null when editor is contenteditable=\"false\"(readOnly)\n closestShadowAware(targetEl, '[contenteditable=\"false\"]') ===\n editorEl) ||\n !!targetEl.getAttribute('data-slate-zero-width'))\n )\n },\n\n hasEditableTarget: (editor, target): target is DOMNode =>\n isDOMNode(target) &&\n DOMEditor.hasDOMNode(editor, target, { editable: true }),\n\n hasRange: (editor, range) => {\n const { anchor, focus } = range\n return (\n Editor.hasPath(editor, anchor.path) && Editor.hasPath(editor, focus.path)\n )\n },\n\n hasSelectableTarget: (editor, target) =>\n DOMEditor.hasEditableTarget(editor, target) ||\n DOMEditor.isTargetInsideNonReadonlyVoid(editor, target),\n\n hasTarget: (editor, target): target is DOMNode =>\n isDOMNode(target) && DOMEditor.hasDOMNode(editor, target),\n\n insertData: (editor, data) => {\n editor.insertData(data)\n },\n\n insertFragmentData: (editor, data) => editor.insertFragmentData(data),\n\n insertTextData: (editor, data) => editor.insertTextData(data),\n\n isComposing: editor => {\n return !!IS_COMPOSING.get(editor)\n },\n\n isFocused: editor => !!IS_FOCUSED.get(editor),\n\n isReadOnly: editor => !!IS_READ_ONLY.get(editor),\n\n isTargetInsideNonReadonlyVoid: (editor, target) => {\n if (IS_READ_ONLY.get(editor)) return false\n\n const slateNode =\n DOMEditor.hasTarget(editor, target) &&\n DOMEditor.toSlateNode(editor, target)\n return Element.isElement(slateNode) && Editor.isVoid(editor, slateNode)\n },\n\n setFragmentData: (editor, data, originEvent) =>\n editor.setFragmentData(data, originEvent),\n\n toDOMNode: (editor, node) => {\n const KEY_TO_ELEMENT = EDITOR_TO_KEY_TO_ELEMENT.get(editor)\n const domNode = Editor.isEditor(node)\n ? EDITOR_TO_ELEMENT.get(editor)\n : KEY_TO_ELEMENT?.get(DOMEditor.findKey(editor, node))\n\n if (!domNode) {\n throw new Error(\n `Cannot resolve a DOM node from Slate node: ${Scrubber.stringify(node)}`\n )\n }\n\n return domNode\n },\n\n toDOMPoint: (editor, point) => {\n const [node] = Editor.node(editor, point.path)\n const el = DOMEditor.toDOMNode(editor, node)\n let domPoint: DOMPoint | undefined\n\n // If we're inside a void node, force the offset to 0, otherwise the zero\n // width spacing character will result in an incorrect offset of 1\n if (Editor.void(editor, { at: point })) {\n point = { path: point.path, offset: 0 }\n }\n\n // For each leaf, we need to isolate its content, which means filtering\n // to its direct text and zero-width spans. (We have to filter out any\n // other siblings that may have been rendered alongside them.)\n const selector = `[data-slate-string], [data-slate-zero-width]`\n const texts = Array.from(el.querySelectorAll(selector))\n let start = 0\n\n for (let i = 0; i < texts.length; i++) {\n const text = texts[i]\n const domNode = text.childNodes[0] as HTMLElement\n\n if (domNode == null || domNode.textContent == null) {\n continue\n }\n\n const { length } = domNode.textContent\n const attr = text.getAttribute('data-slate-length')\n const trueLength = attr == null ? length : parseInt(attr, 10)\n const end = start + trueLength\n\n // Prefer putting the selection inside the mark placeholder to ensure\n // composed text is displayed with the correct marks.\n const nextText = texts[i + 1]\n if (\n point.offset === end &&\n nextText?.hasAttribute('data-slate-mark-placeholder')\n ) {\n const domText = nextText.childNodes[0]\n\n domPoint = [\n // COMPAT: If we don't explicity set the dom point to be on the actual\n // dom text element, chrome will put the selection behind the actual dom\n // text element, causing domRange.getBoundingClientRect() calls on a collapsed\n // selection to return incorrect zero values (https://bugs.chromium.org/p/chromium/issues/detail?id=435438)\n // which will cause issues when scrolling to it.\n domText instanceof DOMText ? domText : nextText,\n nextText.textContent?.startsWith('\\uFEFF') ? 1 : 0,\n ]\n break\n }\n\n if (point.offset <= end) {\n const offset = Math.min(length, Math.max(0, point.offset - start))\n domPoint = [domNode, offset]\n break\n }\n\n start = end\n }\n\n if (!domPoint) {\n throw new Error(\n `Cannot resolve a DOM point from Slate point: ${Scrubber.stringify(\n point\n )}`\n )\n }\n\n return domPoint\n },\n\n toDOMRange: (editor, range) => {\n const { anchor, focus } = range\n const isBackward = Range.isBackward(range)\n const domAnchor = DOMEditor.toDOMPoint(editor, anchor)\n const domFocus = Range.isCollapsed(range)\n ? domAnchor\n : DOMEditor.toDOMPoint(editor, focus)\n\n const window = DOMEditor.getWindow(editor)\n const domRange = window.document.createRange()\n const [startNode, startOffset] = isBackward ? domFocus : domAnchor\n const [endNode, endOffset] = isBackward ? domAnchor : domFocus\n\n // A slate Point at zero-width Leaf always has an offset of 0 but a native DOM selection at\n // zero-width node has an offset of 1 so we have to check if we are in a zero-width node and\n // adjust the offset accordingly.\n const startEl = (\n isDOMElement(startNode) ? startNode : startNode.parentElement\n ) as HTMLElement\n const isStartAtZeroWidth = !!startEl.getAttribute('data-slate-zero-width')\n const endEl = (\n isDOMElement(endNode) ? endNode : endNode.parentElement\n ) as HTMLElement\n const isEndAtZeroWidth = !!endEl.getAttribute('data-slate-zero-width')\n\n domRange.setStart(startNode, isStartAtZeroWidth ? 1 : startOffset)\n domRange.setEnd(endNode, isEndAtZeroWidth ? 1 : endOffset)\n return domRange\n },\n\n toSlateNode: (editor, domNode) => {\n let domEl = isDOMElement(domNode) ? domNode : domNode.parentElement\n\n if (domEl && !domEl.hasAttribute('data-slate-node')) {\n domEl = domEl.closest(`[data-slate-node]`)\n }\n\n const node = domEl ? ELEMENT_TO_NODE.get(domEl as HTMLElement) : null\n\n if (!node) {\n throw new Error(`Cannot resolve a Slate node from DOM node: ${domEl}`)\n }\n\n return node\n },\n\n toSlatePoint: <T extends boolean>(\n editor: DOMEditor,\n domPoint: DOMPoint,\n options: {\n exactMatch: boolean\n suppressThrow: T\n searchDirection?: 'forward' | 'backward'\n }\n ): T extends true ? Point | null : Point => {\n const { exactMatch, suppressThrow, searchDirection } = options\n const [nearestNode, nearestOffset] = exactMatch\n ? domPoint\n : normalizeDOMPoint(domPoint)\n const parentNode = nearestNode.parentNode as DOMElement\n let textNode: DOMElement | null = null\n let offset = 0\n\n if (parentNode) {\n const editorEl = DOMEditor.toDOMNode(editor, editor)\n const potentialVoidNode = parentNode.closest('[data-slate-void=\"true\"]')\n // Need to ensure that the closest void node is actually a void node\n // within this editor, and not a void node within some parent editor. This can happen\n // if this editor is within a void node of another editor (\"nested editors\", like in\n // the \"Editable Voids\" example on the docs site).\n const voidNode =\n potentialVoidNode && containsShadowAware(editorEl, potentialVoidNode)\n ? potentialVoidNode\n : null\n const potentialNonEditableNode = parentNode.closest(\n '[contenteditable=\"false\"]'\n )\n const nonEditableNode =\n potentialNonEditableNode &&\n containsShadowAware(editorEl, potentialNonEditableNode)\n ? potentialNonEditableNode\n : null\n let leafNode = parentNode.closest('[data-slate-leaf]')\n let domNode: DOMElement | null = null\n\n // Calculate how far into the text node the `nearestNode` is, so that we\n // can determine what the offset relative to the text node is.\n if (leafNode) {\n textNode = leafNode.closest('[data-slate-node=\"text\"]')\n\n if (textNode) {\n const window = DOMEditor.getWindow(editor)\n const range = window.document.createRange()\n range.setStart(textNode, 0)\n range.setEnd(nearestNode, nearestOffset)\n\n const contents = range.cloneContents()\n const removals = [\n ...Array.prototype.slice.call(\n contents.querySelectorAll('[data-slate-zero-width]')\n ),\n ...Array.prototype.slice.call(\n contents.querySelectorAll('[contenteditable=false]')\n ),\n ]\n\n removals.forEach(el => {\n // COMPAT: While composing at the start of a text node, some keyboards put\n // the text content inside the zero width space.\n if (\n IS_ANDROID &&\n !exactMatch &&\n el.hasAttribute('data-slate-zero-width') &&\n el.textContent.length > 0 &&\n el.textContext !== '\\uFEFF'\n ) {\n if (el.textContent.startsWith('\\uFEFF')) {\n el.textContent = el.textContent.slice(1)\n }\n\n return\n }\n\n el!.parentNode!.removeChild(el)\n })\n\n // COMPAT: Edge has a bug where Range.prototype.toString() will\n // convert \\n into \\r\\n. The bug causes a loop when slate-dom\n // attempts to reposition its cursor to match the native position. Use\n // textContent.length instead.\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10291116/\n offset = contents.textContent!.length\n domNode = textNode\n }\n } else if (voidNode) {\n // For void nodes, the element with the offset key will be a cousin, not an\n // ancestor, so find it by going down from the nearest void parent and taking the\n // first one that isn't inside a nested editor.\n const leafNodes = voidNode.querySelectorAll('[data-slate-leaf]')\n for (let index = 0; index < leafNodes.length; index++) {\n const current = leafNodes[index]\n if (DOMEditor.hasDOMNode(editor, current)) {\n leafNode = current\n break\n }\n }\n\n // COMPAT: In read-only editors the leaf is not rendered.\n if (!leafNode) {\n offset = 1\n } else {\n textNode = leafNode.closest('[data-slate-node=\"text\"]')!\n domNode = leafNode\n offset = domNode.textContent!.length\n domNode.querySelectorAll('[data-slate-zero-width]').forEach(el => {\n offset -= el.textContent!.length\n })\n }\n } else if (nonEditableNode) {\n // Find the edge of the nearest leaf in `searchDirection`\n const getLeafNodes = (node: DOMElement | null | undefined) =>\n node\n ? node.querySelectorAll(\n // Exclude leaf nodes in nested editors\n '[data-slate-leaf]:not(:scope [data-slate-editor] [data-slate-leaf])'\n )\n : []\n const elementNode = nonEditableNode.closest(\n '[data-slate-node=\"element\"]'\n )\n\n if (searchDirection === 'backward' || !searchDirection) {\n const leafNodes = [\n ...getLeafNodes(elementNode?.previousElementSibling),\n ...getLeafNodes(elementNode),\n ]\n\n leafNode =\n leafNodes.findLast(leaf => isBefore(nonEditableNode, leaf)) ?? null\n\n if (leafNode) {\n searchDirection === 'backward'\n }\n }\n\n if (searchDirection === 'forward' || !searchDirection) {\n const leafNodes = [\n ...getLeafNodes(elementNode),\n ...getLeafNodes(elementNode?.nextElementSibling),\n ]\n\n leafNode =\n leafNodes.find(leaf => isAfter(nonEditableNode, leaf)) ?? null\n\n if (leafNode) {\n searchDirection === 'forward'\n }\n }\n\n if (leafNode) {\n textNode = leafNode.closest('[data-slate-node=\"text\"]')!\n domNode = leafNode\n if (searchDirection === 'forward') {\n offset = 0\n } else {\n offset = domNode.textContent!.length\n domNode.querySelectorAll('[data-slate-zero-width]').forEach(el => {\n offset -= el.textContent!.length\n })\n }\n }\n }\n\n if (\n domNode &&\n offset === domNode.textContent!.length &&\n // COMPAT: Android IMEs might remove the zero width space while composing,\n // and we don't add it for line-breaks.\n IS_ANDROID &&\n domNode.getAttribute('data-slate-zero-width') === 'z' &&\n domNode.textContent?.startsWith('\\uFEFF') &&\n // COMPAT: If the parent node is a Slate zero-width space, editor is\n // because the text node should have no characters. However, during IME\n // composition the ASCII characters will be prepended to the zero-width\n // space, so subtract 1 from the offset to account for the zero-width\n // space character.\n (parentNode.hasAttribute('data-slate-zero-width') ||\n // COMPAT: In Firefox, `range.cloneContents()` returns an extra trailing '\\n'\n // when the document ends with a new-line character. This results in the offset\n // length being off by one, so we need to subtract one to account for this.\n (IS_FIREFOX && domNode.textContent?.endsWith('\\n\\n')))\n ) {\n offset--\n }\n }\n\n if (IS_ANDROID && !textNode && !exactMatch) {\n const node = parentNode.hasAttribute('data-slate-node')\n ? parentNode\n : parentNode.closest('[data-slate-node]')\n\n if (node && DOMEditor.hasDOMNode(editor, node, { editable: true })) {\n const slateNode = DOMEditor.toSlateNode(editor, node)\n let { path, offset } = Editor.start(\n editor,\n DOMEditor.findPath(editor, slateNode)\n )\n\n if (!node.querySelector('[data-slate-leaf]')) {\n offset = nearestOffset\n }\n\n return { path, offset } as T extends true ? Point | null : Point\n }\n }\n\n if (!textNode) {\n if (suppressThrow) {\n return null as T extends true ? Point | null : Point\n }\n throw new Error(\n `Cannot resolve a Slate point from DOM point: ${domPoint}`\n )\n }\n\n // COMPAT: If someone is clicking from one Slate editor into another,\n // the select event fires twice, once for the old editor's `element`\n // first, and then afterwards for the correct `element`. (2017/03/03)\n const slateNode = DOMEditor.toSlateNode(editor, textNode!)\n const path = DOMEditor.findPath(editor, slateNode)\n return { path, offset } as T extends true ? Point | null : Point\n },\n\n toSlateRange: <T extends boolean>(\n editor: DOMEditor,\n domRange: DOMRange | DOMStaticRange | DOMSelection,\n options: {\n exactMatch: boolean\n suppressThrow: T\n }\n ): T extends true ? Range | null : Range => {\n const { exactMatch, suppressThrow } = options\n const el = isDOMSelection(domRange)\n ? domRange.anchorNode\n : domRange.startContainer\n let anchorNode\n let anchorOffset\n let focusNode\n let focusOffset\n let isCollapsed\n\n if (el) {\n if (isDOMSelection(domRange)) {\n // COMPAT: In firefox the normal seletion way does not work\n // (https://github.com/ianstormtaylor/slate/pull/5486#issue-1820720223)\n if (IS_FIREFOX && domRange.rangeCount > 1) {\n focusNode = domRange.focusNode // Focus node works fine\n const firstRange = domRange.getRangeAt(0)\n const lastRange = domRange.getRangeAt(domRange.rangeCount - 1)\n\n // Here we are in the contenteditable mode of a table in firefox\n if (\n focusNode instanceof HTMLTableRowElement &&\n firstRange.startContainer instanceof HTMLTableRowElement &&\n lastRange.startContainer instanceof HTMLTableRowElement\n ) {\n // HTMLElement, becouse Element is a slate element\n function getLastChildren(element: HTMLElement): HTMLElement {\n if (element.childElementCount > 0) {\n return getLastChildren(<HTMLElement>element.children[0])\n } else {\n return element\n }\n }\n\n const firstNodeRow = <HTMLTableRowElement>firstRange.startContainer\n const lastNodeRow = <HTMLTableRowElement>lastRange.startContainer\n\n // This should never fail as \"The HTMLElement interface represents any HTML element.\"\n const firstNode = getLastChildren(\n <HTMLElement>firstNodeRow.children[firstRange.startOffset]\n )\n const lastNode = getLastChildren(\n <HTMLElement>lastNodeRow.children[lastRange.startOffset]\n )\n\n // Zero, as we allways take the right one as the anchor point\n focusOffset = 0\n\n if (lastNode.childNodes.length > 0) {\n anchorNode = lastNode.childNodes[0]\n } else {\n anchorNode = lastNode\n }\n\n if (firstNode.childNodes.length > 0) {\n focusNode = firstNode.childNodes[0]\n } else {\n focusNode = firstNode\n }\n\n if (lastNode instanceof HTMLElement) {\n anchorOffset = (<HTMLElement>lastNode).innerHTML.length\n } else {\n // Fallback option\n anchorOffset = 0\n }\n } else {\n // This is the read only mode of a firefox table\n // Right to left\n if (firstRange.startContainer === focusNode) {\n anchorNode = lastRange.endContainer\n anchorOffset = lastRange.endOffset\n focusOffset = firstRange.startOffset\n } else {\n // Left to right\n anchorNode = firstRange.startContainer\n anchorOffset = firstRange.endOffset\n focusOffset = lastRange.startOffset\n }\n }\n } else {\n anchorNode = domRange.anchorNode\n anchorOffset = domRange.anchorOffset\n focusNode = domRange.focusNode\n focusOffset = domRange.focusOffset\n }\n\n // COMPAT: There's a bug in chrome that always returns `true` for\n // `isCollapsed` for a Selection that comes from a ShadowRoot.\n // (2020/08/08)\n // https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n // IsCollapsed might not work in firefox, but this will\n if ((IS_CHROME && hasShadowRoot(anchorNode)) || IS_FIREFOX) {\n isCollapsed =\n domRange.anchorNode === domRange.focusNode &&\n domRange.anchorOffset === domRange.focusOffset\n } else {\n isCollapsed = domRange.isCollapsed\n }\n } else {\n anchorNode = domRange.startContainer\n anchorOffset = domRange.startOffset\n focusNode = domRange.endContainer\n focusOffset = domRange.endOffset\n isCollapsed = domRange.collapsed\n }\n }\n\n if (\n anchorNode == null ||\n focusNode == null ||\n anchorOffset == null ||\n focusOffset == null\n ) {\n throw new Error(\n `Cannot resolve a Slate range from DOM range: ${domRange}`\n )\n }\n\n // COMPAT: Firefox sometimes includes an extra \\n (rendered by TextString\n // when isTrailing is true) in the focusOffset, resulting in an invalid\n // Slate point. (2023/11/01)\n if (\n IS_FIREFOX &&\n focusNode.textContent?.endsWith('\\n\\n') &&\n focusOffset === focusNode.textContent.length\n ) {\n focusOffset--\n }\n\n const anchor = DOMEditor.toSlatePoint(editor, [anchorNode, anchorOffset], {\n exactMatch,\n suppressThrow,\n })\n if (!anchor) {\n return null as T extends true ? Range | null : Range\n }\n\n const focusBeforeAnchor =\n isBefore(anchorNode, focusNode) ||\n (anchorNode === focusNode && focusOffset < anchorOffset)\n const focus = isCollapsed\n ? anchor\n : DOMEditor.toSlatePoint(editor, [focusNode, focusOffset], {\n exactMatch,\n suppressThrow,\n searchDirection: focusBeforeAnchor ? 'forward' : 'backward',\n })\n if (!focus) {\n return null as T extends true ? Range | null : Range\n }\n\n let range: Range = { anchor: anchor as Point, focus: focus as Point }\n // if the selection is a hanging range that ends in a void\n // and the DOM focus is an Element\n // (meaning that the selection ends before the element)\n // unhang the range to avoid mistakenly including the void\n if (\n Range.isExpanded(range) &&\n Range.isForward(range) &&\n isDOMElement(focusNode) &&\n Editor.void(editor, { at: range.focus, mode: 'highest' })\n ) {\n range = Editor.unhangRange(editor, range, { voids: true })\n }\n\n return range as unknown as T extends true ? Range | null : Range\n },\n}\n","import { isHotkey } from 'is-hotkey'\nimport { IS_APPLE } from './environment'\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n moveBackward: 'left',\n moveForward: 'right',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n italic: 'mod+i',\n insertSoftBreak: 'shift+enter',\n splitBlock: 'enter',\n undo: 'mod+z',\n}\n\nconst APPLE_HOTKEYS = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t',\n}\n\nconst WINDOWS_HOTKEYS = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z'],\n}\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n const generic = HOTKEYS[<keyof typeof HOTKEYS>key]\n const apple = APPLE_HOTKEYS[<keyof typeof APPLE_HOTKEYS>key]\n const windows = WINDOWS_HOTKEYS[<keyof typeof WINDOWS_HOTKEYS>key]\n const isGeneric = generic && isHotkey(generic)\n const isApple = apple && isHotkey(apple)\n const isWindows = windows && isHotkey(windows)\n\n return (event: KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) return true\n if (IS_APPLE && isApple && isApple(event)) return true\n if (!IS_APPLE && isWindows && isWindows(event)) return true\n return false\n }\n}\n\n/**\n * Hotkeys.\n */\n\nexport default {\n isBold: create('bold'),\n isCompose: create('compose'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isMoveWordBackward: create('moveWordBackward'),\n isMoveWordForward: create('moveWordForward'),\n isRedo: create('redo'),\n isSoftBreak: create('insertSoftBreak'),\n isSplitBlock: create('splitBlock'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo'),\n}\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","export var freeze = function (obj) { return Object.freeze(obj); };\n","import { freeze } from './utils/freeze';\nvar ResizeObserverSize = (function () {\n function ResizeObserverSize(inlineSize, blockSize) {\n this.inlineSize = inlineSize;\n this.blockSize = blockSize;\n freeze(this);\n }\n return ResizeObserverSize;\n}());\nexport { ResizeObserverSize };\n","import { freeze } from './utils/freeze';\nvar DOMRectReadOnly = (function () {\n function DOMRectReadOnly(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.top = this.y;\n this.left = this.x;\n this.bottom = this.top + this.height;\n this.right = this.left + this.width;\n return freeze(this);\n }\n DOMRectReadOnly.prototype.toJSON = function () {\n var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n };\n DOMRectReadOnly.fromRect = function (rectangle) {\n return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n };\n return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { ResizeObserverSize } from '../ResizeObserverSize';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { freeze } from '../utils/freeze';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n if (inlineSize === void 0) { inlineSize = 0; }\n if (blockSize === void 0) { blockSize = 0; }\n if (switchSizes === void 0) { switchSizes = false; }\n return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);\n};\nvar zeroBoxes = freeze({\n devicePixelContentBoxSize: size(),\n borderBoxSize: size(),\n contentBoxSize: size(),\n contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n if (forceRecalculation === void 0) { forceRecalculation = false; }\n if (cache.has(target) && !forceRecalculation) {\n return cache.get(target);\n }\n if (isHidden(target)) {\n cache.set(target, zeroBoxes);\n return zeroBoxes;\n }\n var cs = getComputedStyle(target);\n var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n var removePadding = !IE && cs.boxSizing === 'border-box';\n var switchSizes = verticalRegexp.test(cs.writingMode || '');\n var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n var horizontalPadding = paddingLeft + paddingRight;\n var verticalPadding = paddingTop + paddingBottom;\n var horizontalBorderArea = borderLeft + borderRight;\n var verticalBorderArea = borderTop + borderBottom;\n var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n var boxes = freeze({\n devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n });\n cache.set(target, boxes);\n return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n switch (observedBox) {\n case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n return devicePixelContentBoxSize;\n case ResizeObserverBoxOptions.BORDER_BOX:\n return borderBoxSize;\n default:\n return contentBoxSize;\n }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { createContext, useContext } from 'react'\nimport { Editor } from 'slate'\nimport { ReactEditor } from '../plugin/react-editor'\n\n/**\n * A React context for sharing the editor object.\n */\n\nexport const EditorContext = createContext<ReactEditor | null>(null)\n\n/**\n * Get the current editor object from the React context.\n */\n\nexport const useSlateStatic = (): Editor => {\n const editor = useContext(EditorContext)\n\n if (!editor) {\n throw new Error(\n `The \\`useSlateStatic\\` hook must be used inside the <Slate> component's context.`\n )\n }\n\n return editor\n}\n","import { Ancestor } from 'slate'\nimport { DOMEditor, type DOMEditorInterface } from 'slate-dom'\n\n/**\n * A React and DOM-specific version of the `Editor` interface.\n */\n\nexport interface ReactEditor extends DOMEditor {\n /**\n * Determines the chunk size used by the children chunking optimization. If\n * null is returned (which is the default), the chunking optimization is\n * disabled.\n */\n getChunkSize: (node: Ancestor) => number | null\n}\n\nexport interface ReactEditorInterface extends DOMEditorInterface {}\n\n// eslint-disable-next-line no-redeclare\nexport const ReactEditor: ReactEditorInterface = DOMEditor\n","import { RefObject } from 'react'\nimport { ReactEditor } from '../../plugin/react-editor'\nimport { isTrackedMutation } from 'slate-dom'\n\nexport type RestoreDOMManager = {\n registerMutations: (mutations: MutationRecord[]) => void\n restoreDOM: () => void\n clear: () => void\n}\n\nexport const createRestoreDomManager = (\n editor: ReactEditor,\n receivedUserInput: RefObject<boolean>\n): RestoreDOMManager => {\n let bufferedMutations: MutationRecord[] = []\n\n const clear = () => {\n bufferedMutations = []\n }\n\n const registerMutations = (mutations: MutationRecord[]) => {\n if (!receivedUserInput.current) {\n return\n }\n\n const trackedMutations = mutations.filter(mutation =>\n isTrackedMutation(editor, mutation, mutations)\n )\n\n bufferedMutations.push(...trackedMutations)\n }\n\n function restoreDOM() {\n if (bufferedMutations.length > 0) {\n bufferedMutations.reverse().forEach(mutation => {\n if (mutation.type === 'characterData') {\n // We don't want to restore the DOM for characterData mutations\n // because this interrupts the composition.\n return\n }\n\n mutation.removedNodes.forEach(node => {\n mutation.target.insertBefore(node, mutation.nextSibling)\n })\n\n mutation.addedNodes.forEach(node => {\n mutation.target.removeChild(node)\n })\n })\n\n // Clear buffered mutations to ensure we don't undo them twice\n clear()\n }\n }\n\n return {\n registerMutations,\n restoreDOM,\n clear,\n }\n}\n","import React, {\n Component,\n ComponentType,\n ContextType,\n ReactNode,\n RefObject,\n} from 'react'\nimport { EditorContext } from '../../hooks/use-slate-static'\nimport { IS_ANDROID } from 'slate-dom'\nimport {\n createRestoreDomManager,\n RestoreDOMManager,\n} from './restore-dom-manager'\n\nconst MUTATION_OBSERVER_CONFIG: MutationObserverInit = {\n subtree: true,\n childList: true,\n characterData: true,\n characterDataOldValue: true,\n}\n\ntype RestoreDOMProps = {\n children?: ReactNode\n receivedUserInput: RefObject<boolean>\n node: RefObject<HTMLDivElement>\n}\n\n// We have to use a class component here since we rely on `getSnapshotBeforeUpdate` which has no FC equivalent\n// to run code synchronously immediately before react commits the component update to the DOM.\nclass RestoreDOMComponent extends Component<RestoreDOMProps> {\n static contextType = EditorContext\n context: ContextType<typeof EditorContext> = null\n\n private manager: RestoreDOMManager | null = null\n private mutationObserver: MutationObserver | null = null\n\n observe() {\n const { node } = this.props\n if (!node.current) {\n throw new Error('Failed to attach MutationObserver, `node` is undefined')\n }\n\n this.mutationObserver?.observe(node.current, MUTATION_OBSERVER_CONFIG)\n }\n\n componentDidMount() {\n const { receivedUserInput } = this.props\n const editor = this.context!\n\n this.manager = createRestoreDomManager(editor, receivedUserInput)\n this.mutationObserver = new MutationObserver(this.manager.registerMutations)\n\n this.observe()\n }\n\n getSnapshotBeforeUpdate() {\n const pendingMutations = this.mutationObserver?.takeRecords()\n if (pendingMutations?.length) {\n this.manager?.registerMutations(pendingMutations)\n }\n\n this.mutationObserver?.disconnect()\n this.manager?.restoreDOM()\n\n return null\n }\n\n componentDidUpdate() {\n this.manager?.clear()\n this.observe()\n }\n\n componentWillUnmount() {\n this.mutationObserver?.disconnect()\n }\n\n render() {\n return this.props.children\n }\n}\n\nexport const RestoreDOM: ComponentType<RestoreDOMProps> = IS_ANDROID\n ? RestoreDOMComponent\n : ({ children }) => <>{children}</>\n","import React from 'react'\n\nexport const REACT_MAJOR_VERSION = parseInt(React.version.split('.')[0], 10)\n","import type { SlateEditor } from \"@yoopta/editor\";\nimport { Range } from \"slate\";\nimport { ReactEditor } from \"slate-react\";\n\nimport type { MentionPluginOptions, MentionTargetRect, MentionTrigger } from \"../types\";\n\nexport function getTriggers(options: MentionPluginOptions | undefined): MentionTrigger[] {\n if (!options) return [{ char: '@' }];\n\n if (options.triggers && options.triggers.length > 0) {\n return options.triggers;\n }\n\n return [{ char: options.char ?? '@' }];\n}\n\nexport function shouldTriggerActivate(\n trigger: MentionTrigger,\n charBefore: string,\n charAfter: string,\n): boolean {\n const allowedAfter = trigger.allowedAfter ?? /^$|\\s/;\n\n // Check if character before trigger matches pattern (whitespace or start)\n const isLeftClear = allowedAfter.test(charBefore);\n // Check if character after is whitespace or end (for multi-char triggers like '[[')\n const isRightClear = charAfter === '' || /\\s/.test(charAfter);\n\n return isLeftClear && isRightClear;\n}\n\nexport function getCaretRectFromSlate(slate: SlateEditor): MentionTargetRect | null {\n if (!slate.selection || !Range.isCollapsed(slate.selection)) return null;\n\n try {\n const domRange = ReactEditor.toDOMRange(slate, slate.selection);\n if (!domRange) return null;\n\n const rects = domRange.getClientRects();\n const boundingRect = domRange.getBoundingClientRect();\n\n return {\n domRect: boundingRect,\n clientRects: rects.length > 0 ? rects : domRange.getClientRects(),\n };\n } catch {\n // Fallback to window selection if ReactEditor fails\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return null;\n\n const range = selection.getRangeAt(0);\n return {\n domRect: range.getBoundingClientRect(),\n clientRects: range.getClientRects(),\n };\n }\n}","import type { KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport type { PluginElementRenderProps } from '@yoopta/editor';\nimport { YooptaPlugin, generateId } from '@yoopta/editor';\nimport { Node, Range, Text } from 'slate';\n\nimport { MentionCommands } from '../commands';\nimport type {\n MentionElementMap,\n MentionElementProps,\n MentionPluginOptions,\n MentionYooEditor,\n} from '../types';\nimport { getCaretRectFromSlate, getTriggers, shouldTriggerActivate } from '../utils';\n\nconst DefaultMentionRender = (props: PluginElementRenderProps) => {\n const { element, attributes, children } = props;\n const { name } = element.props as MentionElementProps;\n\n return (\n <span {...attributes} contentEditable={false} data-mention>\n @{name}\n {children}\n </span>\n );\n};\n\nconst defaultMentionProps = {\n id: '',\n name: '',\n avatar: '',\n type: undefined,\n meta: undefined,\n};\n\nconst Mention = new YooptaPlugin<MentionElementMap, MentionPluginOptions>({\n type: 'Mention',\n elements: (\n <mention\n render={DefaultMentionRender}\n props={defaultMentionProps}\n nodeType=\"inlineVoid\"\n />\n ),\n options: {\n display: {\n title: 'Mention',\n description: 'Mention a user or resource',\n },\n char: '@',\n },\n commands: MentionCommands,\n parsers: {\n html: {\n deserialize: {\n nodeNames: ['SPAN'],\n parse: (el) => {\n if (el.nodeName === 'SPAN' && el.dataset.mentionId) {\n return {\n id: generateId(),\n type: 'mention',\n children: [{ text: '' }],\n props: {\n id: el.dataset.mentionId ?? '',\n name: el.dataset.mentionName ?? el.textContent ?? '',\n avatar: el.dataset.mentionAvatar ?? '',\n type: el.dataset.mentionType ?? undefined,\n nodeType: 'inlineVoid',\n },\n };\n }\n },\n },\n serialize: (element) => {\n const { id, name, avatar, type } = element.props ?? {};\n return `<span data-mention data-mention-id=\"${id}\" data-mention-name=\"${name}\" data-mention-avatar=\"${avatar ?? ''}\" data-mention-type=\"${type ?? ''}\" style=\"color: #2563eb; font-weight: 500;\">@${name}</span>`;\n },\n },\n markdown: {\n serialize: (element) => `@${element.props?.name ?? ''}`,\n },\n email: {\n serialize: (element) => {\n const { name } = element.props ?? {};\n return `<span style=\"color: #2563eb; font-weight: 500;\">@${name}</span>`;\n },\n },\n },\n extensions: (slate) => {\n const { markableVoid, isInline } = slate;\n\n slate.markableVoid = (element) => element.type === 'mention' || markableVoid(element);\n slate.isInline = (element) => element.type === 'mention' || isInline(element);\n\n return slate;\n },\n events: {\n onKeyDown: (baseEditor, slate, options) => (event: ReactKeyboardEvent) => {\n // Cast to MentionYooEditor for full type support\n const editor = baseEditor as MentionYooEditor;\n\n const pluginOptions = baseEditor.plugins.Mention?.options as MentionPluginOptions | undefined;\n const triggers = getTriggers(pluginOptions);\n const mentionState = editor.mentions.state;\n\n // Get current block from options (more reliable than editor.path.current)\n const currentBlock = options.currentBlock;\n\n // Check if any trigger char was typed\n for (const trigger of triggers) {\n // Check for single char trigger match\n if (trigger.char.length === 1 && event.key === trigger.char) {\n // Only handle if selection is collapsed (cursor, not range)\n if (slate.selection && Range.isCollapsed(slate.selection)) {\n const currentNode = Node.get(slate, slate.selection.anchor.path);\n if (!Text.isText(currentNode)) continue;\n\n const text = currentNode.text;\n const cursorOffset = slate.selection.anchor.offset;\n\n const charBefore = text[cursorOffset - 1] ?? '';\n const charAfter = text[cursorOffset] ?? '';\n\n // Check if trigger should activate\n if (!shouldTriggerActivate(trigger, charBefore, charAfter)) continue;\n\n if (!currentBlock) continue;\n\n // Get caret position for dropdown positioning\n // Get position BEFORE @ is inserted (current cursor position)\n const caretRect = getCaretRectFromSlate(slate);\n if (!caretRect) continue;\n\n // Open dropdown immediately (before @ is inserted)\n // The @ character will be inserted by Slate's default behavior\n editor.mentions.open({\n trigger,\n targetRect: caretRect,\n triggerRange: {\n blockId: currentBlock.id,\n path: slate.selection.anchor.path,\n startOffset: cursorOffset, // Position where @ will be inserted\n },\n });\n\n // Don't prevent default - let the @ character be inserted\n return;\n }\n }\n // TODO: Handle multi-char triggers like '[['\n }\n\n // Handle keys when dropdown is open\n if (mentionState.isOpen) {\n const { key } = event;\n\n // Escape closes dropdown\n if (key === 'Escape' && pluginOptions?.closeOnEscape !== false) {\n event.preventDefault();\n editor.mentions.close('escape');\n return;\n }\n\n // Backspace updates query\n if (key === 'Backspace') {\n const newQuery = mentionState.query.slice(0, -1);\n\n // If query becomes empty and we backspace again, close\n if (mentionState.query.length === 0) {\n editor.mentions.close('backspace');\n return;\n }\n\n editor.mentions.setQuery(newQuery);\n return;\n }\n\n // Regular characters add to query\n if (key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n const currentTrigger = mentionState.trigger;\n\n // Check if spaces are allowed\n if (key === ' ' && !currentTrigger?.allowSpaces) {\n editor.mentions.close('manual');\n return;\n }\n\n // Don't add trigger char to query\n if (currentTrigger && key === currentTrigger.char) {\n return;\n }\n\n editor.mentions.setQuery(mentionState.query + key);\n }\n }\n },\n },\n});\n\nexport { Mention };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n ...offset$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n ...shift$1(options),\n options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n ...limitShift$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n ...flip$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n ...size$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n ...autoPlacement$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n ...hide$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n ...inline$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n ...arrow$1(options),\n options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import * as React from 'react';\nimport { useLayoutEffect, useEffect, useRef } from 'react';\nimport { stopEvent, getDocument, isMouseLikePointerType, contains, activeElement, isSafari, isTypeableCombobox, isVirtualClick, isVirtualPointerEvent, getTarget, getPlatform, isTypeableElement, isReactEvent, isRootElement, isEventTargetWithin, isMac, getUserAgent } from '@floating-ui/react/utils';\nimport { floor, evaluate, max, min, round } from '@floating-ui/utils';\nimport { getComputedStyle, isElement, getNodeName, isHTMLElement, getWindow, isLastTraversableNode, getParentNode, isWebKit } from '@floating-ui/utils/dom';\nimport { tabbable, isTabbable } from 'tabbable';\nimport * as ReactDOM from 'react-dom';\nimport { getOverflowAncestors, useFloating as useFloating$1, offset, detectOverflow } from '@floating-ui/react-dom';\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/react-dom';\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n * @see https://floating-ui.com/docs/react-utils#usemergerefs\n */\nfunction useMergeRefs(refs) {\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return value => {\n refs.forEach(ref => {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n ref.current = value;\n }\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n ...React\n};\n\nconst useInsertionEffect = SafeReact.useInsertionEffect;\nconst useSafeInsertionEffect = useInsertionEffect || (fn => fn());\nfunction useEffectEvent(callback) {\n const ref = React.useRef(() => {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error('Cannot call an event handler while rendering.');\n }\n });\n useSafeInsertionEffect(() => {\n ref.current = callback;\n });\n return React.useCallback(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return ref.current == null ? void 0 : ref.current(...args);\n }, []);\n}\n\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nfunction isDifferentRow(index, cols, prevRow) {\n return Math.floor(index / cols) !== prevRow;\n}\nfunction isIndexOutOfBounds(listRef, index) {\n return index < 0 || index >= listRef.current.length;\n}\nfunction getMinIndex(listRef, disabledIndices) {\n return findNonDisabledIndex(listRef, {\n disabledIndices\n });\n}\nfunction getMaxIndex(listRef, disabledIndices) {\n return findNonDisabledIndex(listRef, {\n decrement: true,\n startingIndex: listRef.current.length,\n disabledIndices\n });\n}\nfunction findNonDisabledIndex(listRef, _temp) {\n let {\n startingIndex = -1,\n decrement = false,\n disabledIndices,\n amount = 1\n } = _temp === void 0 ? {} : _temp;\n const list = listRef.current;\n let index = startingIndex;\n do {\n index += decrement ? -amount : amount;\n } while (index >= 0 && index <= list.length - 1 && isDisabled(list, index, disabledIndices));\n return index;\n}\nfunction getGridNavigatedIndex(elementsRef, _ref) {\n let {\n event,\n orientation,\n loop,\n rtl,\n cols,\n disabledIndices,\n minIndex,\n maxIndex,\n prevIndex,\n stopEvent: stop = false\n } = _ref;\n let nextIndex = prevIndex;\n if (event.key === ARROW_UP) {\n stop && stopEvent(event);\n if (prevIndex === -1) {\n nextIndex = maxIndex;\n } else {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: nextIndex,\n amount: cols,\n decrement: true,\n disabledIndices\n });\n if (loop && (prevIndex - cols < minIndex || nextIndex < 0)) {\n const col = prevIndex % cols;\n const maxCol = maxIndex % cols;\n const offset = maxIndex - (maxCol - col);\n if (maxCol === col) {\n nextIndex = maxIndex;\n } else {\n nextIndex = maxCol > col ? offset : offset - cols;\n }\n }\n }\n if (isIndexOutOfBounds(elementsRef, nextIndex)) {\n nextIndex = prevIndex;\n }\n }\n if (event.key === ARROW_DOWN) {\n stop && stopEvent(event);\n if (prevIndex === -1) {\n nextIndex = minIndex;\n } else {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex,\n amount: cols,\n disabledIndices\n });\n if (loop && prevIndex + cols > maxIndex) {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex % cols - cols,\n amount: cols,\n disabledIndices\n });\n }\n }\n if (isIndexOutOfBounds(elementsRef, nextIndex)) {\n nextIndex = prevIndex;\n }\n }\n\n // Remains on the same row/column.\n if (orientation === 'both') {\n const prevRow = floor(prevIndex / cols);\n if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) {\n stop && stopEvent(event);\n if (prevIndex % cols !== cols - 1) {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex,\n disabledIndices\n });\n if (loop && isDifferentRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n }\n } else if (loop) {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n }\n if (isDifferentRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) {\n stop && stopEvent(event);\n if (prevIndex % cols !== 0) {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex,\n decrement: true,\n disabledIndices\n });\n if (loop && isDifferentRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n }\n } else if (loop) {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n }\n if (isDifferentRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n const lastRow = floor(maxIndex / cols) === prevRow;\n if (isIndexOutOfBounds(elementsRef, nextIndex)) {\n if (loop && lastRow) {\n nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledIndex(elementsRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n } else {\n nextIndex = prevIndex;\n }\n }\n }\n return nextIndex;\n}\n\n/** For each cell index, gets the item index that occupies that cell */\nfunction buildCellMap(sizes, cols, dense) {\n const cellMap = [];\n let startIndex = 0;\n sizes.forEach((_ref2, index) => {\n let {\n width,\n height\n } = _ref2;\n if (width > cols) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"[Floating UI]: Invalid grid - item width at index \" + index + \" is greater than grid columns\");\n }\n }\n let itemPlaced = false;\n if (dense) {\n startIndex = 0;\n }\n while (!itemPlaced) {\n const targetCells = [];\n for (let i = 0; i < width; i++) {\n for (let j = 0; j < height; j++) {\n targetCells.push(startIndex + i + j * cols);\n }\n }\n if (startIndex % cols + width <= cols && targetCells.every(cell => cellMap[cell] == null)) {\n targetCells.forEach(cell => {\n cellMap[cell] = index;\n });\n itemPlaced = true;\n } else {\n startIndex++;\n }\n }\n });\n\n // convert into a non-sparse array\n return [...cellMap];\n}\n\n/** Gets cell index of an item's corner or -1 when index is -1. */\nfunction getCellIndexOfCorner(index, sizes, cellMap, cols, corner) {\n if (index === -1) return -1;\n const firstCellIndex = cellMap.indexOf(index);\n const sizeItem = sizes[index];\n switch (corner) {\n case 'tl':\n return firstCellIndex;\n case 'tr':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + sizeItem.width - 1;\n case 'bl':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + (sizeItem.height - 1) * cols;\n case 'br':\n return cellMap.lastIndexOf(index);\n }\n}\n\n/** Gets all cell indices that correspond to the specified indices */\nfunction getCellIndices(indices, cellMap) {\n return cellMap.flatMap((index, cellIndex) => indices.includes(index) ? [cellIndex] : []);\n}\nfunction isDisabled(list, index, disabledIndices) {\n if (disabledIndices) {\n return disabledIndices.includes(index);\n }\n const element = list[index];\n return element == null || element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n}\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\nfunction sortByDocumentPosition(a, b) {\n const position = a.compareDocumentPosition(b);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n return 0;\n}\nfunction areMapsEqual(map1, map2) {\n if (map1.size !== map2.size) {\n return false;\n }\n for (const [key, value] of map1.entries()) {\n if (value !== map2.get(key)) {\n return false;\n }\n }\n return true;\n}\nconst FloatingListContext = /*#__PURE__*/React.createContext({\n register: () => {},\n unregister: () => {},\n map: /*#__PURE__*/new Map(),\n elementsRef: {\n current: []\n }\n});\n/**\n * Provides context for a list of items within the floating element.\n * @see https://floating-ui.com/docs/FloatingList\n */\nfunction FloatingList(props) {\n const {\n children,\n elementsRef,\n labelsRef\n } = props;\n const [map, setMap] = React.useState(() => new Map());\n const register = React.useCallback(node => {\n setMap(prevMap => new Map(prevMap).set(node, null));\n }, []);\n const unregister = React.useCallback(node => {\n setMap(prevMap => {\n const map = new Map(prevMap);\n map.delete(node);\n return map;\n });\n }, []);\n index(() => {\n const newMap = new Map(map);\n const nodes = Array.from(newMap.keys()).sort(sortByDocumentPosition);\n nodes.forEach((node, index) => {\n newMap.set(node, index);\n });\n if (!areMapsEqual(map, newMap)) {\n setMap(newMap);\n }\n }, [map]);\n return /*#__PURE__*/React.createElement(FloatingListContext.Provider, {\n value: React.useMemo(() => ({\n register,\n unregister,\n map,\n elementsRef,\n labelsRef\n }), [register, unregister, map, elementsRef, labelsRef])\n }, children);\n}\n/**\n * Used to register a list item and its index (DOM position) in the\n * `FloatingList`.\n * @see https://floating-ui.com/docs/FloatingList#uselistitem\n */\nfunction useListItem(props) {\n if (props === void 0) {\n props = {};\n }\n const {\n label\n } = props;\n const {\n register,\n unregister,\n map,\n elementsRef,\n labelsRef\n } = React.useContext(FloatingListContext);\n const [index$1, setIndex] = React.useState(null);\n const componentRef = React.useRef(null);\n const ref = React.useCallback(node => {\n componentRef.current = node;\n if (index$1 !== null) {\n elementsRef.current[index$1] = node;\n if (labelsRef) {\n var _node$textContent;\n const isLabelDefined = label !== undefined;\n labelsRef.current[index$1] = isLabelDefined ? label : (_node$textContent = node == null ? void 0 : node.textContent) != null ? _node$textContent : null;\n }\n }\n }, [index$1, elementsRef, labelsRef, label]);\n index(() => {\n const node = componentRef.current;\n if (node) {\n register(node);\n return () => {\n unregister(node);\n };\n }\n }, [register, unregister]);\n index(() => {\n const index = componentRef.current ? map.get(componentRef.current) : null;\n if (index != null) {\n setIndex(index);\n }\n }, [map]);\n return React.useMemo(() => ({\n ref,\n index: index$1 == null ? -1 : index$1\n }), [index$1, ref]);\n}\n\nfunction renderJsx(render, computedProps) {\n if (typeof render === 'function') {\n return render(computedProps);\n }\n if (render) {\n return /*#__PURE__*/React.cloneElement(render, computedProps);\n }\n return /*#__PURE__*/React.createElement(\"div\", computedProps);\n}\nconst CompositeContext = /*#__PURE__*/React.createContext({\n activeIndex: 0,\n onNavigate: () => {}\n});\nconst horizontalKeys = [ARROW_LEFT, ARROW_RIGHT];\nconst verticalKeys = [ARROW_UP, ARROW_DOWN];\nconst allKeys = [...horizontalKeys, ...verticalKeys];\n\n/**\n * Creates a single tab stop whose items are navigated by arrow keys, which\n * provides list navigation outside of floating element contexts.\n *\n * This is useful to enable navigation of a list of items that aren’t part of a\n * floating element. A menubar is an example of a composite, with each reference\n * element being an item.\n * @see https://floating-ui.com/docs/Composite\n */\nconst Composite = /*#__PURE__*/React.forwardRef(function Composite(props, forwardedRef) {\n const {\n render,\n orientation = 'both',\n loop = true,\n rtl = false,\n cols = 1,\n disabledIndices,\n activeIndex: externalActiveIndex,\n onNavigate: externalSetActiveIndex,\n itemSizes,\n dense = false,\n ...domProps\n } = props;\n const [internalActiveIndex, internalSetActiveIndex] = React.useState(0);\n const activeIndex = externalActiveIndex != null ? externalActiveIndex : internalActiveIndex;\n const onNavigate = useEffectEvent(externalSetActiveIndex != null ? externalSetActiveIndex : internalSetActiveIndex);\n const elementsRef = React.useRef([]);\n const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n const contextValue = React.useMemo(() => ({\n activeIndex,\n onNavigate\n }), [activeIndex, onNavigate]);\n const isGrid = cols > 1;\n function handleKeyDown(event) {\n if (!allKeys.includes(event.key)) return;\n let nextIndex = activeIndex;\n const minIndex = getMinIndex(elementsRef, disabledIndices);\n const maxIndex = getMaxIndex(elementsRef, disabledIndices);\n const horizontalEndKey = rtl ? ARROW_LEFT : ARROW_RIGHT;\n const horizontalStartKey = rtl ? ARROW_RIGHT : ARROW_LEFT;\n if (isGrid) {\n const sizes = itemSizes || Array.from({\n length: elementsRef.current.length\n }, () => ({\n width: 1,\n height: 1\n }));\n // To calculate movements on the grid, we use hypothetical cell indices\n // as if every item was 1x1, then convert back to real indices.\n const cellMap = buildCellMap(sizes, cols, dense);\n const minGridIndex = cellMap.findIndex(index => index != null && !isDisabled(elementsRef.current, index, disabledIndices));\n // last enabled index\n const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isDisabled(elementsRef.current, index, disabledIndices) ? cellIndex : foundIndex, -1);\n const maybeNextIndex = cellMap[getGridNavigatedIndex({\n current: cellMap.map(itemIndex => itemIndex ? elementsRef.current[itemIndex] : null)\n }, {\n event,\n orientation,\n loop,\n rtl,\n cols,\n // treat undefined (empty grid spaces) as disabled indices so we\n // don't end up in them\n disabledIndices: getCellIndices([...(disabledIndices || elementsRef.current.map((_, index) => isDisabled(elementsRef.current, index) ? index : undefined)), undefined], cellMap),\n minIndex: minGridIndex,\n maxIndex: maxGridIndex,\n prevIndex: getCellIndexOfCorner(activeIndex > maxIndex ? minIndex : activeIndex, sizes, cellMap, cols,\n // use a corner matching the edge closest to the direction we're\n // moving in so we don't end up in the same item. Prefer\n // top/left over bottom/right.\n event.key === ARROW_DOWN ? 'bl' : event.key === horizontalEndKey ? 'tr' : 'tl')\n })];\n if (maybeNextIndex != null) {\n nextIndex = maybeNextIndex;\n }\n }\n const toEndKeys = {\n horizontal: [horizontalEndKey],\n vertical: [ARROW_DOWN],\n both: [horizontalEndKey, ARROW_DOWN]\n }[orientation];\n const toStartKeys = {\n horizontal: [horizontalStartKey],\n vertical: [ARROW_UP],\n both: [horizontalStartKey, ARROW_UP]\n }[orientation];\n const preventedKeys = isGrid ? allKeys : {\n horizontal: horizontalKeys,\n vertical: verticalKeys,\n both: allKeys\n }[orientation];\n if (nextIndex === activeIndex && [...toEndKeys, ...toStartKeys].includes(event.key)) {\n if (loop && nextIndex === maxIndex && toEndKeys.includes(event.key)) {\n nextIndex = minIndex;\n } else if (loop && nextIndex === minIndex && toStartKeys.includes(event.key)) {\n nextIndex = maxIndex;\n } else {\n nextIndex = findNonDisabledIndex(elementsRef, {\n startingIndex: nextIndex,\n decrement: toStartKeys.includes(event.key),\n disabledIndices\n });\n }\n }\n if (nextIndex !== activeIndex && !isIndexOutOfBounds(elementsRef, nextIndex)) {\n var _elementsRef$current$;\n event.stopPropagation();\n if (preventedKeys.includes(event.key)) {\n event.preventDefault();\n }\n onNavigate(nextIndex);\n (_elementsRef$current$ = elementsRef.current[nextIndex]) == null || _elementsRef$current$.focus();\n }\n }\n const computedProps = {\n ...domProps,\n ...renderElementProps,\n ref: forwardedRef,\n 'aria-orientation': orientation === 'both' ? undefined : orientation,\n onKeyDown(e) {\n domProps.onKeyDown == null || domProps.onKeyDown(e);\n renderElementProps.onKeyDown == null || renderElementProps.onKeyDown(e);\n handleKeyDown(e);\n }\n };\n return /*#__PURE__*/React.createElement(CompositeContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(FloatingList, {\n elementsRef: elementsRef\n }, renderJsx(render, computedProps)));\n});\n/**\n * @see https://floating-ui.com/docs/Composite\n */\nconst CompositeItem = /*#__PURE__*/React.forwardRef(function CompositeItem(props, forwardedRef) {\n const {\n render,\n ...domProps\n } = props;\n const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n const {\n activeIndex,\n onNavigate\n } = React.useContext(CompositeContext);\n const {\n ref,\n index\n } = useListItem();\n const mergedRef = useMergeRefs([ref, forwardedRef, renderElementProps.ref]);\n const isActive = activeIndex === index;\n const computedProps = {\n ...domProps,\n ...renderElementProps,\n ref: mergedRef,\n tabIndex: isActive ? 0 : -1,\n 'data-active': isActive ? '' : undefined,\n onFocus(e) {\n domProps.onFocus == null || domProps.onFocus(e);\n renderElementProps.onFocus == null || renderElementProps.onFocus(e);\n onNavigate(index);\n }\n };\n return renderJsx(render, computedProps);\n});\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nlet serverHandoffComplete = false;\nlet count = 0;\nconst genId = () => // Ensure the id is unique with multiple independent versions of Floating UI\n// on <React 18\n\"floating-ui-\" + Math.random().toString(36).slice(2, 6) + count++;\nfunction useFloatingId() {\n const [id, setId] = React.useState(() => serverHandoffComplete ? genId() : undefined);\n index(() => {\n if (id == null) {\n setId(genId());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n serverHandoffComplete = true;\n }, []);\n return id;\n}\nconst useReactId = SafeReact.useId;\n\n/**\n * Uses React 18's built-in `useId()` when available, or falls back to a\n * slightly less performant (requiring a double render) implementation for\n * earlier React versions.\n * @see https://floating-ui.com/docs/react-utils#useid\n */\nconst useId = useReactId || useFloatingId;\n\nlet devMessageSet;\nif (process.env.NODE_ENV !== \"production\") {\n devMessageSet = /*#__PURE__*/new Set();\n}\nfunction warn() {\n var _devMessageSet;\n for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n const message = \"Floating UI: \" + messages.join(' ');\n if (!((_devMessageSet = devMessageSet) != null && _devMessageSet.has(message))) {\n var _devMessageSet2;\n (_devMessageSet2 = devMessageSet) == null || _devMessageSet2.add(message);\n console.warn(message);\n }\n}\nfunction error() {\n var _devMessageSet3;\n for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n messages[_key2] = arguments[_key2];\n }\n const message = \"Floating UI: \" + messages.join(' ');\n if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {\n var _devMessageSet4;\n (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);\n console.error(message);\n }\n}\n\n/**\n * Renders a pointing arrow triangle.\n * @see https://floating-ui.com/docs/FloatingArrow\n */\nconst FloatingArrow = /*#__PURE__*/React.forwardRef(function FloatingArrow(props, ref) {\n const {\n context: {\n placement,\n elements: {\n floating\n },\n middlewareData: {\n arrow,\n shift\n }\n },\n width = 14,\n height = 7,\n tipRadius = 0,\n strokeWidth = 0,\n staticOffset,\n stroke,\n d,\n style: {\n transform,\n ...restStyle\n } = {},\n ...rest\n } = props;\n if (process.env.NODE_ENV !== \"production\") {\n if (!ref) {\n warn('The `ref` prop is required for `FloatingArrow`.');\n }\n }\n const clipPathId = useId();\n const [isRTL, setIsRTL] = React.useState(false);\n\n // https://github.com/floating-ui/floating-ui/issues/2932\n index(() => {\n if (!floating) return;\n const isRTL = getComputedStyle(floating).direction === 'rtl';\n if (isRTL) {\n setIsRTL(true);\n }\n }, [floating]);\n if (!floating) {\n return null;\n }\n const [side, alignment] = placement.split('-');\n const isVerticalSide = side === 'top' || side === 'bottom';\n let computedStaticOffset = staticOffset;\n if (isVerticalSide && shift != null && shift.x || !isVerticalSide && shift != null && shift.y) {\n computedStaticOffset = null;\n }\n\n // Strokes must be double the border width, this ensures the stroke's width\n // works as you'd expect.\n const computedStrokeWidth = strokeWidth * 2;\n const halfStrokeWidth = computedStrokeWidth / 2;\n const svgX = width / 2 * (tipRadius / -8 + 1);\n const svgY = height / 2 * tipRadius / 4;\n const isCustomShape = !!d;\n const yOffsetProp = computedStaticOffset && alignment === 'end' ? 'bottom' : 'top';\n let xOffsetProp = computedStaticOffset && alignment === 'end' ? 'right' : 'left';\n if (computedStaticOffset && isRTL) {\n xOffsetProp = alignment === 'end' ? 'left' : 'right';\n }\n const arrowX = (arrow == null ? void 0 : arrow.x) != null ? computedStaticOffset || arrow.x : '';\n const arrowY = (arrow == null ? void 0 : arrow.y) != null ? computedStaticOffset || arrow.y : '';\n const dValue = d || 'M0,0' + (\" H\" + width) + (\" L\" + (width - svgX) + \",\" + (height - svgY)) + (\" Q\" + width / 2 + \",\" + height + \" \" + svgX + \",\" + (height - svgY)) + ' Z';\n const rotation = {\n top: isCustomShape ? 'rotate(180deg)' : '',\n left: isCustomShape ? 'rotate(90deg)' : 'rotate(-90deg)',\n bottom: isCustomShape ? '' : 'rotate(180deg)',\n right: isCustomShape ? 'rotate(-90deg)' : 'rotate(90deg)'\n }[side];\n return /*#__PURE__*/React.createElement(\"svg\", _extends({}, rest, {\n \"aria-hidden\": true,\n ref: ref,\n width: isCustomShape ? width : width + computedStrokeWidth,\n height: width,\n viewBox: \"0 0 \" + width + \" \" + (height > width ? height : width),\n style: {\n position: 'absolute',\n pointerEvents: 'none',\n [xOffsetProp]: arrowX,\n [yOffsetProp]: arrowY,\n [side]: isVerticalSide || isCustomShape ? '100%' : \"calc(100% - \" + computedStrokeWidth / 2 + \"px)\",\n transform: [rotation, transform].filter(t => !!t).join(' '),\n ...restStyle\n }\n }), computedStrokeWidth > 0 && /*#__PURE__*/React.createElement(\"path\", {\n clipPath: \"url(#\" + clipPathId + \")\",\n fill: \"none\",\n stroke: stroke\n // Account for the stroke on the fill path rendered below.\n ,\n strokeWidth: computedStrokeWidth + (d ? 0 : 1),\n d: dValue\n }), /*#__PURE__*/React.createElement(\"path\", {\n stroke: computedStrokeWidth && !d ? rest.fill : 'none',\n d: dValue\n }), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: clipPathId\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: -halfStrokeWidth,\n y: halfStrokeWidth * (isCustomShape ? -1 : 1),\n width: width + computedStrokeWidth,\n height: width\n })));\n});\n\nfunction createPubSub() {\n const map = new Map();\n return {\n emit(event, data) {\n var _map$get;\n (_map$get = map.get(event)) == null || _map$get.forEach(handler => handler(data));\n },\n on(event, listener) {\n map.set(event, [...(map.get(event) || []), listener]);\n },\n off(event, listener) {\n var _map$get2;\n map.set(event, ((_map$get2 = map.get(event)) == null ? void 0 : _map$get2.filter(l => l !== listener)) || []);\n }\n };\n}\n\nconst FloatingNodeContext = /*#__PURE__*/React.createContext(null);\nconst FloatingTreeContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */\nconst useFloatingParentNodeId = () => {\n var _React$useContext;\n return ((_React$useContext = React.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;\n};\n\n/**\n * Returns the nearest floating tree context, if available.\n */\nconst useFloatingTree = () => React.useContext(FloatingTreeContext);\n\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction useFloatingNodeId(customParentId) {\n const id = useId();\n const tree = useFloatingTree();\n const reactParentId = useFloatingParentNodeId();\n const parentId = customParentId || reactParentId;\n index(() => {\n const node = {\n id,\n parentId\n };\n tree == null || tree.addNode(node);\n return () => {\n tree == null || tree.removeNode(node);\n };\n }, [tree, id, parentId]);\n return id;\n}\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingNode(props) {\n const {\n children,\n id\n } = props;\n const parentId = useFloatingParentNodeId();\n return /*#__PURE__*/React.createElement(FloatingNodeContext.Provider, {\n value: React.useMemo(() => ({\n id,\n parentId\n }), [id, parentId])\n }, children);\n}\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingTree(props) {\n const {\n children\n } = props;\n const nodesRef = React.useRef([]);\n const addNode = React.useCallback(node => {\n nodesRef.current = [...nodesRef.current, node];\n }, []);\n const removeNode = React.useCallback(node => {\n nodesRef.current = nodesRef.current.filter(n => n !== node);\n }, []);\n const events = React.useState(() => createPubSub())[0];\n return /*#__PURE__*/React.createElement(FloatingTreeContext.Provider, {\n value: React.useMemo(() => ({\n nodesRef,\n addNode,\n removeNode,\n events\n }), [addNode, removeNode, events])\n }, children);\n}\n\nfunction createAttribute(name) {\n return \"data-floating-ui-\" + name;\n}\n\nfunction useLatestRef(value) {\n const ref = useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\nconst safePolygonIdentifier = /*#__PURE__*/createAttribute('safe-polygon');\nfunction getDelay(value, prop, pointerType) {\n if (pointerType && !isMouseLikePointerType(pointerType)) {\n return 0;\n }\n if (typeof value === 'number') {\n return value;\n }\n return value == null ? void 0 : value[prop];\n}\n/**\n * Opens the floating element while hovering over the reference element, like\n * CSS `:hover`.\n * @see https://floating-ui.com/docs/useHover\n */\nfunction useHover(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n dataRef,\n events,\n elements\n } = context;\n const {\n enabled = true,\n delay = 0,\n handleClose = null,\n mouseOnly = false,\n restMs = 0,\n move = true\n } = props;\n const tree = useFloatingTree();\n const parentId = useFloatingParentNodeId();\n const handleCloseRef = useLatestRef(handleClose);\n const delayRef = useLatestRef(delay);\n const openRef = useLatestRef(open);\n const pointerTypeRef = React.useRef();\n const timeoutRef = React.useRef(-1);\n const handlerRef = React.useRef();\n const restTimeoutRef = React.useRef(-1);\n const blockMouseMoveRef = React.useRef(true);\n const performedPointerEventsMutationRef = React.useRef(false);\n const unbindMouseMoveRef = React.useRef(() => {});\n const restTimeoutPendingRef = React.useRef(false);\n const isHoverOpen = React.useCallback(() => {\n var _dataRef$current$open;\n const type = (_dataRef$current$open = dataRef.current.openEvent) == null ? void 0 : _dataRef$current$open.type;\n return (type == null ? void 0 : type.includes('mouse')) && type !== 'mousedown';\n }, [dataRef]);\n\n // When closing before opening, clear the delay timeouts to cancel it\n // from showing.\n React.useEffect(() => {\n if (!enabled) return;\n function onOpenChange(_ref) {\n let {\n open\n } = _ref;\n if (!open) {\n clearTimeout(timeoutRef.current);\n clearTimeout(restTimeoutRef.current);\n blockMouseMoveRef.current = true;\n restTimeoutPendingRef.current = false;\n }\n }\n events.on('openchange', onOpenChange);\n return () => {\n events.off('openchange', onOpenChange);\n };\n }, [enabled, events]);\n React.useEffect(() => {\n if (!enabled) return;\n if (!handleCloseRef.current) return;\n if (!open) return;\n function onLeave(event) {\n if (isHoverOpen()) {\n onOpenChange(false, event, 'hover');\n }\n }\n const html = getDocument(elements.floating).documentElement;\n html.addEventListener('mouseleave', onLeave);\n return () => {\n html.removeEventListener('mouseleave', onLeave);\n };\n }, [elements.floating, open, onOpenChange, enabled, handleCloseRef, isHoverOpen]);\n const closeWithDelay = React.useCallback(function (event, runElseBranch, reason) {\n if (runElseBranch === void 0) {\n runElseBranch = true;\n }\n if (reason === void 0) {\n reason = 'hover';\n }\n const closeDelay = getDelay(delayRef.current, 'close', pointerTypeRef.current);\n if (closeDelay && !handlerRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(() => onOpenChange(false, event, reason), closeDelay);\n } else if (runElseBranch) {\n clearTimeout(timeoutRef.current);\n onOpenChange(false, event, reason);\n }\n }, [delayRef, onOpenChange]);\n const cleanupMouseMoveHandler = useEffectEvent(() => {\n unbindMouseMoveRef.current();\n handlerRef.current = undefined;\n });\n const clearPointerEvents = useEffectEvent(() => {\n if (performedPointerEventsMutationRef.current) {\n const body = getDocument(elements.floating).body;\n body.style.pointerEvents = '';\n body.removeAttribute(safePolygonIdentifier);\n performedPointerEventsMutationRef.current = false;\n }\n });\n const isClickLikeOpenEvent = useEffectEvent(() => {\n return dataRef.current.openEvent ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type) : false;\n });\n\n // Registering the mouse events on the reference directly to bypass React's\n // delegation system. If the cursor was on a disabled element and then entered\n // the reference (no gap), `mouseenter` doesn't fire in the delegation system.\n React.useEffect(() => {\n if (!enabled) return;\n function onMouseEnter(event) {\n clearTimeout(timeoutRef.current);\n blockMouseMoveRef.current = false;\n if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current) || restMs > 0 && !getDelay(delayRef.current, 'open')) {\n return;\n }\n const openDelay = getDelay(delayRef.current, 'open', pointerTypeRef.current);\n if (openDelay) {\n timeoutRef.current = window.setTimeout(() => {\n if (!openRef.current) {\n onOpenChange(true, event, 'hover');\n }\n }, openDelay);\n } else if (!open) {\n onOpenChange(true, event, 'hover');\n }\n }\n function onMouseLeave(event) {\n if (isClickLikeOpenEvent()) return;\n unbindMouseMoveRef.current();\n const doc = getDocument(elements.floating);\n clearTimeout(restTimeoutRef.current);\n restTimeoutPendingRef.current = false;\n if (handleCloseRef.current && dataRef.current.floatingContext) {\n // Prevent clearing `onScrollMouseLeave` timeout.\n if (!open) {\n clearTimeout(timeoutRef.current);\n }\n handlerRef.current = handleCloseRef.current({\n ...dataRef.current.floatingContext,\n tree,\n x: event.clientX,\n y: event.clientY,\n onClose() {\n clearPointerEvents();\n cleanupMouseMoveHandler();\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event, true, 'safe-polygon');\n }\n }\n });\n const handler = handlerRef.current;\n doc.addEventListener('mousemove', handler);\n unbindMouseMoveRef.current = () => {\n doc.removeEventListener('mousemove', handler);\n };\n return;\n }\n\n // Allow interactivity without `safePolygon` on touch devices. With a\n // pointer, a short close delay is an alternative, so it should work\n // consistently.\n const shouldClose = pointerTypeRef.current === 'touch' ? !contains(elements.floating, event.relatedTarget) : true;\n if (shouldClose) {\n closeWithDelay(event);\n }\n }\n\n // Ensure the floating element closes after scrolling even if the pointer\n // did not move.\n // https://github.com/floating-ui/floating-ui/discussions/1692\n function onScrollMouseLeave(event) {\n if (isClickLikeOpenEvent()) return;\n if (!dataRef.current.floatingContext) return;\n handleCloseRef.current == null || handleCloseRef.current({\n ...dataRef.current.floatingContext,\n tree,\n x: event.clientX,\n y: event.clientY,\n onClose() {\n clearPointerEvents();\n cleanupMouseMoveHandler();\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event);\n }\n }\n })(event);\n }\n if (isElement(elements.domReference)) {\n var _elements$floating;\n const ref = elements.domReference;\n open && ref.addEventListener('mouseleave', onScrollMouseLeave);\n (_elements$floating = elements.floating) == null || _elements$floating.addEventListener('mouseleave', onScrollMouseLeave);\n move && ref.addEventListener('mousemove', onMouseEnter, {\n once: true\n });\n ref.addEventListener('mouseenter', onMouseEnter);\n ref.addEventListener('mouseleave', onMouseLeave);\n return () => {\n var _elements$floating2;\n open && ref.removeEventListener('mouseleave', onScrollMouseLeave);\n (_elements$floating2 = elements.floating) == null || _elements$floating2.removeEventListener('mouseleave', onScrollMouseLeave);\n move && ref.removeEventListener('mousemove', onMouseEnter);\n ref.removeEventListener('mouseenter', onMouseEnter);\n ref.removeEventListener('mouseleave', onMouseLeave);\n };\n }\n }, [elements, enabled, context, mouseOnly, restMs, move, closeWithDelay, cleanupMouseMoveHandler, clearPointerEvents, onOpenChange, open, openRef, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent]);\n\n // Block pointer-events of every element other than the reference and floating\n // while the floating element is open and has a `handleClose` handler. Also\n // handles nested floating elements.\n // https://github.com/floating-ui/floating-ui/issues/1722\n index(() => {\n var _handleCloseRef$curre;\n if (!enabled) return;\n if (open && (_handleCloseRef$curre = handleCloseRef.current) != null && _handleCloseRef$curre.__options.blockPointerEvents && isHoverOpen()) {\n performedPointerEventsMutationRef.current = true;\n const floatingEl = elements.floating;\n if (isElement(elements.domReference) && floatingEl) {\n var _tree$nodesRef$curren;\n const body = getDocument(elements.floating).body;\n body.setAttribute(safePolygonIdentifier, '');\n const ref = elements.domReference;\n const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating;\n if (parentFloating) {\n parentFloating.style.pointerEvents = '';\n }\n body.style.pointerEvents = 'none';\n ref.style.pointerEvents = 'auto';\n floatingEl.style.pointerEvents = 'auto';\n return () => {\n body.style.pointerEvents = '';\n ref.style.pointerEvents = '';\n floatingEl.style.pointerEvents = '';\n };\n }\n }\n }, [enabled, open, parentId, elements, tree, handleCloseRef, isHoverOpen]);\n index(() => {\n if (!open) {\n pointerTypeRef.current = undefined;\n restTimeoutPendingRef.current = false;\n cleanupMouseMoveHandler();\n clearPointerEvents();\n }\n }, [open, cleanupMouseMoveHandler, clearPointerEvents]);\n React.useEffect(() => {\n return () => {\n cleanupMouseMoveHandler();\n clearTimeout(timeoutRef.current);\n clearTimeout(restTimeoutRef.current);\n clearPointerEvents();\n };\n }, [enabled, elements.domReference, cleanupMouseMoveHandler, clearPointerEvents]);\n const reference = React.useMemo(() => {\n function setPointerRef(event) {\n pointerTypeRef.current = event.pointerType;\n }\n return {\n onPointerDown: setPointerRef,\n onPointerEnter: setPointerRef,\n onMouseMove(event) {\n const {\n nativeEvent\n } = event;\n function handleMouseMove() {\n if (!blockMouseMoveRef.current && !openRef.current) {\n onOpenChange(true, nativeEvent, 'hover');\n }\n }\n if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current)) {\n return;\n }\n if (open || restMs === 0) {\n return;\n }\n\n // Ignore insignificant movements to account for tremors.\n if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) {\n return;\n }\n clearTimeout(restTimeoutRef.current);\n if (pointerTypeRef.current === 'touch') {\n handleMouseMove();\n } else {\n restTimeoutPendingRef.current = true;\n restTimeoutRef.current = window.setTimeout(handleMouseMove, restMs);\n }\n }\n };\n }, [mouseOnly, onOpenChange, open, openRef, restMs]);\n const floating = React.useMemo(() => ({\n onMouseEnter() {\n clearTimeout(timeoutRef.current);\n },\n onMouseLeave(event) {\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event.nativeEvent, false);\n }\n }\n }), [closeWithDelay, isClickLikeOpenEvent]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nconst NOOP = () => {};\nconst FloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n delay: 0,\n initialDelay: 0,\n timeoutMs: 0,\n currentId: null,\n setCurrentId: NOOP,\n setState: NOOP,\n isInstantPhase: false\n});\n\n/**\n * @deprecated\n * Use the return value of `useDelayGroup()` instead.\n */\nconst useDelayGroupContext = () => React.useContext(FloatingDelayGroupContext);\n/**\n * Provides context for a group of floating elements that should share a\n * `delay`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction FloatingDelayGroup(props) {\n const {\n children,\n delay,\n timeoutMs = 0\n } = props;\n const [state, setState] = React.useReducer((prev, next) => ({\n ...prev,\n ...next\n }), {\n delay,\n timeoutMs,\n initialDelay: delay,\n currentId: null,\n isInstantPhase: false\n });\n const initialCurrentIdRef = React.useRef(null);\n const setCurrentId = React.useCallback(currentId => {\n setState({\n currentId\n });\n }, []);\n index(() => {\n if (state.currentId) {\n if (initialCurrentIdRef.current === null) {\n initialCurrentIdRef.current = state.currentId;\n } else if (!state.isInstantPhase) {\n setState({\n isInstantPhase: true\n });\n }\n } else {\n if (state.isInstantPhase) {\n setState({\n isInstantPhase: false\n });\n }\n initialCurrentIdRef.current = null;\n }\n }, [state.currentId, state.isInstantPhase]);\n return /*#__PURE__*/React.createElement(FloatingDelayGroupContext.Provider, {\n value: React.useMemo(() => ({\n ...state,\n setState,\n setCurrentId\n }), [state, setCurrentId])\n }, children);\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `FloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useDelayGroup(context, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n open,\n onOpenChange,\n floatingId\n } = context;\n const {\n id: optionId,\n enabled = true\n } = options;\n const id = optionId != null ? optionId : floatingId;\n const groupContext = useDelayGroupContext();\n const {\n currentId,\n setCurrentId,\n initialDelay,\n setState,\n timeoutMs\n } = groupContext;\n index(() => {\n if (!enabled) return;\n if (!currentId) return;\n setState({\n delay: {\n open: 1,\n close: getDelay(initialDelay, 'close')\n }\n });\n if (currentId !== id) {\n onOpenChange(false);\n }\n }, [enabled, id, onOpenChange, setState, currentId, initialDelay]);\n index(() => {\n function unset() {\n onOpenChange(false);\n setState({\n delay: initialDelay,\n currentId: null\n });\n }\n if (!enabled) return;\n if (!currentId) return;\n if (!open && currentId === id) {\n if (timeoutMs) {\n const timeout = window.setTimeout(unset, timeoutMs);\n return () => {\n clearTimeout(timeout);\n };\n }\n unset();\n }\n }, [enabled, open, setState, currentId, id, onOpenChange, initialDelay, timeoutMs]);\n index(() => {\n if (!enabled) return;\n if (setCurrentId === NOOP || !open) return;\n setCurrentId(id);\n }, [enabled, open, setCurrentId, id]);\n return groupContext;\n}\n\nlet rafId = 0;\nfunction enqueueFocus(el, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n preventScroll = false,\n cancelPrevious = true,\n sync = false\n } = options;\n cancelPrevious && cancelAnimationFrame(rafId);\n const exec = () => el == null ? void 0 : el.focus({\n preventScroll\n });\n if (sync) {\n exec();\n } else {\n rafId = requestAnimationFrame(exec);\n }\n}\n\nfunction getAncestors(nodes, id) {\n var _nodes$find;\n let allAncestors = [];\n let currentParentId = (_nodes$find = nodes.find(node => node.id === id)) == null ? void 0 : _nodes$find.parentId;\n while (currentParentId) {\n const currentNode = nodes.find(node => node.id === currentParentId);\n currentParentId = currentNode == null ? void 0 : currentNode.parentId;\n if (currentNode) {\n allAncestors = allAncestors.concat(currentNode);\n }\n }\n return allAncestors;\n}\n\nfunction getChildren(nodes, id) {\n let allChildren = nodes.filter(node => {\n var _node$context;\n return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n });\n let currentChildren = allChildren;\n while (currentChildren.length) {\n currentChildren = nodes.filter(node => {\n var _currentChildren;\n return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n var _node$context2;\n return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n });\n });\n allChildren = allChildren.concat(currentChildren);\n }\n return allChildren;\n}\nfunction getDeepestNode(nodes, id) {\n let deepestNodeId;\n let maxDepth = -1;\n function findDeepest(nodeId, depth) {\n if (depth > maxDepth) {\n deepestNodeId = nodeId;\n maxDepth = depth;\n }\n const children = getChildren(nodes, nodeId);\n children.forEach(child => {\n findDeepest(child.id, depth + 1);\n });\n }\n findDeepest(id, 0);\n return nodes.find(node => node.id === deepestNodeId);\n}\n\n// Modified to add conditional `aria-hidden` support:\n// https://github.com/theKashey/aria-hidden/blob/9220c8f4a4fd35f63bee5510a9f41a37264382d4/src/index.ts\nlet counterMap = /*#__PURE__*/new WeakMap();\nlet uncontrolledElementsSet = /*#__PURE__*/new WeakSet();\nlet markerMap = {};\nlet lockCount$1 = 0;\nconst supportsInert = () => typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nconst unwrapHost = node => node && (node.host || unwrapHost(node.parentNode));\nconst correctElements = (parent, targets) => targets.map(target => {\n if (parent.contains(target)) {\n return target;\n }\n const correctedTarget = unwrapHost(target);\n if (parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n return null;\n}).filter(x => x != null);\nfunction applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert) {\n const markerName = 'data-floating-ui-inert';\n const controlAttribute = inert ? 'inert' : ariaHidden ? 'aria-hidden' : null;\n const avoidElements = correctElements(body, uncorrectedAvoidElements);\n const elementsToKeep = new Set();\n const elementsToStop = new Set(avoidElements);\n const hiddenElements = [];\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n const markerCounter = markerMap[markerName];\n avoidElements.forEach(keep);\n deep(body);\n elementsToKeep.clear();\n function keep(el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n el.parentNode && keep(el.parentNode);\n }\n function deep(parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n [].forEach.call(parent.children, node => {\n if (getNodeName(node) === 'script') return;\n if (elementsToKeep.has(node)) {\n deep(node);\n } else {\n const attr = controlAttribute ? node.getAttribute(controlAttribute) : null;\n const alreadyHidden = attr !== null && attr !== 'false';\n const counterValue = (counterMap.get(node) || 0) + 1;\n const markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenElements.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledElementsSet.add(node);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, '');\n }\n if (!alreadyHidden && controlAttribute) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n });\n }\n lockCount$1++;\n return () => {\n hiddenElements.forEach(element => {\n const counterValue = (counterMap.get(element) || 0) - 1;\n const markerValue = (markerCounter.get(element) || 0) - 1;\n counterMap.set(element, counterValue);\n markerCounter.set(element, markerValue);\n if (!counterValue) {\n if (!uncontrolledElementsSet.has(element) && controlAttribute) {\n element.removeAttribute(controlAttribute);\n }\n uncontrolledElementsSet.delete(element);\n }\n if (!markerValue) {\n element.removeAttribute(markerName);\n }\n });\n lockCount$1--;\n if (!lockCount$1) {\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledElementsSet = new WeakSet();\n markerMap = {};\n }\n };\n}\nfunction markOthers(avoidElements, ariaHidden, inert) {\n if (ariaHidden === void 0) {\n ariaHidden = false;\n }\n if (inert === void 0) {\n inert = false;\n }\n const body = getDocument(avoidElements[0]).body;\n return applyAttributeToOthers(avoidElements.concat(Array.from(body.querySelectorAll('[aria-live]'))), body, ariaHidden, inert);\n}\n\nconst getTabbableOptions = () => ({\n getShadowRoot: true,\n displayCheck:\n // JSDOM does not support the `tabbable` library. To solve this we can\n // check if `ResizeObserver` is a real function (not polyfilled), which\n // determines if the current environment is JSDOM-like.\n typeof ResizeObserver === 'function' && ResizeObserver.toString().includes('[native code]') ? 'full' : 'none'\n});\nfunction getTabbableIn(container, direction) {\n const allTabbable = tabbable(container, getTabbableOptions());\n if (direction === 'prev') {\n allTabbable.reverse();\n }\n const activeIndex = allTabbable.indexOf(activeElement(getDocument(container)));\n const nextTabbableElements = allTabbable.slice(activeIndex + 1);\n return nextTabbableElements[0];\n}\nfunction getNextTabbable() {\n return getTabbableIn(document.body, 'next');\n}\nfunction getPreviousTabbable() {\n return getTabbableIn(document.body, 'prev');\n}\nfunction isOutsideEvent(event, container) {\n const containerElement = container || event.currentTarget;\n const relatedTarget = event.relatedTarget;\n return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nfunction disableFocusInside(container) {\n const tabbableElements = tabbable(container, getTabbableOptions());\n tabbableElements.forEach(element => {\n element.dataset.tabindex = element.getAttribute('tabindex') || '';\n element.setAttribute('tabindex', '-1');\n });\n}\nfunction enableFocusInside(container) {\n const elements = container.querySelectorAll('[data-tabindex]');\n elements.forEach(element => {\n const tabindex = element.dataset.tabindex;\n delete element.dataset.tabindex;\n if (tabindex) {\n element.setAttribute('tabindex', tabindex);\n } else {\n element.removeAttribute('tabindex');\n }\n });\n}\n\n// See Diego Haz's Sandbox for making this logic work well on Safari/iOS:\n// https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/FocusTrap.tsx\n\nconst HIDDEN_STYLES = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'fixed',\n whiteSpace: 'nowrap',\n width: '1px',\n top: 0,\n left: 0\n};\nlet timeoutId;\nfunction setActiveElementOnTab(event) {\n if (event.key === 'Tab') {\n event.target;\n clearTimeout(timeoutId);\n }\n}\nconst FocusGuard = /*#__PURE__*/React.forwardRef(function FocusGuard(props, ref) {\n const [role, setRole] = React.useState();\n index(() => {\n if (isSafari()) {\n // Unlike other screen readers such as NVDA and JAWS, the virtual cursor\n // on VoiceOver does trigger the onFocus event, so we can use the focus\n // trap element. On Safari, only buttons trigger the onFocus event.\n // NB: \"group\" role in the Sandbox no longer appears to work, must be a\n // button role.\n setRole('button');\n }\n document.addEventListener('keydown', setActiveElementOnTab);\n return () => {\n document.removeEventListener('keydown', setActiveElementOnTab);\n };\n }, []);\n const restProps = {\n ref,\n tabIndex: 0,\n // Role is only for VoiceOver\n role,\n 'aria-hidden': role ? undefined : true,\n [createAttribute('focus-guard')]: '',\n style: HIDDEN_STYLES\n };\n return /*#__PURE__*/React.createElement(\"span\", _extends({}, props, restProps));\n});\n\nconst PortalContext = /*#__PURE__*/React.createContext(null);\nconst attr = /*#__PURE__*/createAttribute('portal');\n/**\n * @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode\n */\nfunction useFloatingPortalNode(props) {\n if (props === void 0) {\n props = {};\n }\n const {\n id,\n root\n } = props;\n const uniqueId = useId();\n const portalContext = usePortalContext();\n const [portalNode, setPortalNode] = React.useState(null);\n const portalNodeRef = React.useRef(null);\n index(() => {\n return () => {\n portalNode == null || portalNode.remove();\n // Allow the subsequent layout effects to create a new node on updates.\n // The portal node will still be cleaned up on unmount.\n // https://github.com/floating-ui/floating-ui/issues/2454\n queueMicrotask(() => {\n portalNodeRef.current = null;\n });\n };\n }, [portalNode]);\n index(() => {\n // Wait for the uniqueId to be generated before creating the portal node in\n // React <18 (using `useFloatingId` instead of the native `useId`).\n // https://github.com/floating-ui/floating-ui/issues/2778\n if (!uniqueId) return;\n if (portalNodeRef.current) return;\n const existingIdRoot = id ? document.getElementById(id) : null;\n if (!existingIdRoot) return;\n const subRoot = document.createElement('div');\n subRoot.id = uniqueId;\n subRoot.setAttribute(attr, '');\n existingIdRoot.appendChild(subRoot);\n portalNodeRef.current = subRoot;\n setPortalNode(subRoot);\n }, [id, uniqueId]);\n index(() => {\n // Wait for the root to exist before creating the portal node. The root must\n // be stored in state, not a ref, for this to work reactively.\n if (root === null) return;\n if (!uniqueId) return;\n if (portalNodeRef.current) return;\n let container = root || (portalContext == null ? void 0 : portalContext.portalNode);\n if (container && !isElement(container)) container = container.current;\n container = container || document.body;\n let idWrapper = null;\n if (id) {\n idWrapper = document.createElement('div');\n idWrapper.id = id;\n container.appendChild(idWrapper);\n }\n const subRoot = document.createElement('div');\n subRoot.id = uniqueId;\n subRoot.setAttribute(attr, '');\n container = idWrapper || container;\n container.appendChild(subRoot);\n portalNodeRef.current = subRoot;\n setPortalNode(subRoot);\n }, [id, root, uniqueId, portalContext]);\n return portalNode;\n}\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n */\nfunction FloatingPortal(props) {\n const {\n children,\n id,\n root,\n preserveTabOrder = true\n } = props;\n const portalNode = useFloatingPortalNode({\n id,\n root\n });\n const [focusManagerState, setFocusManagerState] = React.useState(null);\n const beforeOutsideRef = React.useRef(null);\n const afterOutsideRef = React.useRef(null);\n const beforeInsideRef = React.useRef(null);\n const afterInsideRef = React.useRef(null);\n const modal = focusManagerState == null ? void 0 : focusManagerState.modal;\n const open = focusManagerState == null ? void 0 : focusManagerState.open;\n const shouldRenderGuards =\n // The FocusManager and therefore floating element are currently open/\n // rendered.\n !!focusManagerState &&\n // Guards are only for non-modal focus management.\n !focusManagerState.modal &&\n // Don't render if unmount is transitioning.\n focusManagerState.open && preserveTabOrder && !!(root || portalNode);\n\n // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n React.useEffect(() => {\n if (!portalNode || !preserveTabOrder || modal) {\n return;\n }\n\n // Make sure elements inside the portal element are tabbable only when the\n // portal has already been focused, either by tabbing into a focus trap\n // element outside or using the mouse.\n function onFocus(event) {\n if (portalNode && isOutsideEvent(event)) {\n const focusing = event.type === 'focusin';\n const manageFocus = focusing ? enableFocusInside : disableFocusInside;\n manageFocus(portalNode);\n }\n }\n // Listen to the event on the capture phase so they run before the focus\n // trap elements onFocus prop is called.\n portalNode.addEventListener('focusin', onFocus, true);\n portalNode.addEventListener('focusout', onFocus, true);\n return () => {\n portalNode.removeEventListener('focusin', onFocus, true);\n portalNode.removeEventListener('focusout', onFocus, true);\n };\n }, [portalNode, preserveTabOrder, modal]);\n React.useEffect(() => {\n if (!portalNode) return;\n if (open) return;\n enableFocusInside(portalNode);\n }, [open, portalNode]);\n return /*#__PURE__*/React.createElement(PortalContext.Provider, {\n value: React.useMemo(() => ({\n preserveTabOrder,\n beforeOutsideRef,\n afterOutsideRef,\n beforeInsideRef,\n afterInsideRef,\n portalNode,\n setFocusManagerState\n }), [preserveTabOrder, portalNode])\n }, shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(FocusGuard, {\n \"data-type\": \"outside\",\n ref: beforeOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n var _beforeInsideRef$curr;\n (_beforeInsideRef$curr = beforeInsideRef.current) == null || _beforeInsideRef$curr.focus();\n } else {\n const prevTabbable = getPreviousTabbable() || (focusManagerState == null ? void 0 : focusManagerState.refs.domReference.current);\n prevTabbable == null || prevTabbable.focus();\n }\n }\n }), shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(\"span\", {\n \"aria-owns\": portalNode.id,\n style: HIDDEN_STYLES\n }), portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode), shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(FocusGuard, {\n \"data-type\": \"outside\",\n ref: afterOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n var _afterInsideRef$curre;\n (_afterInsideRef$curre = afterInsideRef.current) == null || _afterInsideRef$curre.focus();\n } else {\n const nextTabbable = getNextTabbable() || (focusManagerState == null ? void 0 : focusManagerState.refs.domReference.current);\n nextTabbable == null || nextTabbable.focus();\n (focusManagerState == null ? void 0 : focusManagerState.closeOnFocusOut) && (focusManagerState == null ? void 0 : focusManagerState.onOpenChange(false, event.nativeEvent, 'focus-out'));\n }\n }\n }));\n}\nconst usePortalContext = () => React.useContext(PortalContext);\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nfunction getFloatingFocusElement(floatingElement) {\n if (!floatingElement) {\n return null;\n }\n // Try to find the element that has `{...getFloatingProps()}` spread on it.\n // This indicates the floating element is acting as a positioning wrapper, and\n // so focus should be managed on the child element with the event handlers and\n // aria props.\n return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(\"[\" + FOCUSABLE_ATTRIBUTE + \"]\") || floatingElement;\n}\n\nconst LIST_LIMIT = 20;\nlet previouslyFocusedElements = [];\nfunction addPreviouslyFocusedElement(element) {\n previouslyFocusedElements = previouslyFocusedElements.filter(el => el.isConnected);\n let tabbableEl = element;\n if (!tabbableEl || getNodeName(tabbableEl) === 'body') return;\n if (!isTabbable(tabbableEl, getTabbableOptions())) {\n const tabbableChild = tabbable(tabbableEl, getTabbableOptions())[0];\n if (tabbableChild) {\n tabbableEl = tabbableChild;\n }\n }\n previouslyFocusedElements.push(tabbableEl);\n if (previouslyFocusedElements.length > LIST_LIMIT) {\n previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT);\n }\n}\nfunction getPreviouslyFocusedElement() {\n return previouslyFocusedElements.slice().reverse().find(el => el.isConnected);\n}\nconst VisuallyHiddenDismiss = /*#__PURE__*/React.forwardRef(function VisuallyHiddenDismiss(props, ref) {\n return /*#__PURE__*/React.createElement(\"button\", _extends({}, props, {\n type: \"button\",\n ref: ref,\n tabIndex: -1,\n style: HIDDEN_STYLES\n }));\n});\n/**\n * Provides focus management for the floating element.\n * @see https://floating-ui.com/docs/FloatingFocusManager\n */\nfunction FloatingFocusManager(props) {\n const {\n context,\n children,\n disabled = false,\n order = ['content'],\n guards: _guards = true,\n initialFocus = 0,\n returnFocus = true,\n restoreFocus = false,\n modal = true,\n visuallyHiddenDismiss = false,\n closeOnFocusOut = true\n } = props;\n const {\n open,\n refs,\n nodeId,\n onOpenChange,\n events,\n dataRef,\n floatingId,\n elements: {\n domReference,\n floating\n }\n } = context;\n const ignoreInitialFocus = typeof initialFocus === 'number' && initialFocus < 0;\n // If the reference is a combobox and is typeable (e.g. input/textarea),\n // there are different focus semantics. The guards should not be rendered, but\n // aria-hidden should be applied to all nodes still. Further, the visually\n // hidden dismiss button should only appear at the end of the list, not the\n // start.\n const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;\n\n // Force the guards to be rendered if the `inert` attribute is not supported.\n const guards = supportsInert() ? _guards : true;\n const orderRef = useLatestRef(order);\n const initialFocusRef = useLatestRef(initialFocus);\n const returnFocusRef = useLatestRef(returnFocus);\n const tree = useFloatingTree();\n const portalContext = usePortalContext();\n const startDismissButtonRef = React.useRef(null);\n const endDismissButtonRef = React.useRef(null);\n const preventReturnFocusRef = React.useRef(false);\n const isPointerDownRef = React.useRef(false);\n const tabbableIndexRef = React.useRef(-1);\n const isInsidePortal = portalContext != null;\n const floatingFocusElement = getFloatingFocusElement(floating);\n const getTabbableContent = useEffectEvent(function (container) {\n if (container === void 0) {\n container = floatingFocusElement;\n }\n return container ? tabbable(container, getTabbableOptions()) : [];\n });\n const getTabbableElements = useEffectEvent(container => {\n const content = getTabbableContent(container);\n return orderRef.current.map(type => {\n if (domReference && type === 'reference') {\n return domReference;\n }\n if (floatingFocusElement && type === 'floating') {\n return floatingFocusElement;\n }\n return content;\n }).filter(Boolean).flat();\n });\n React.useEffect(() => {\n if (disabled) return;\n if (!modal) return;\n function onKeyDown(event) {\n if (event.key === 'Tab') {\n // The focus guards have nothing to focus, so we need to stop the event.\n if (contains(floatingFocusElement, activeElement(getDocument(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {\n stopEvent(event);\n }\n const els = getTabbableElements();\n const target = getTarget(event);\n if (orderRef.current[0] === 'reference' && target === domReference) {\n stopEvent(event);\n if (event.shiftKey) {\n enqueueFocus(els[els.length - 1]);\n } else {\n enqueueFocus(els[1]);\n }\n }\n if (orderRef.current[1] === 'floating' && target === floatingFocusElement && event.shiftKey) {\n stopEvent(event);\n enqueueFocus(els[0]);\n }\n }\n }\n const doc = getDocument(floatingFocusElement);\n doc.addEventListener('keydown', onKeyDown);\n return () => {\n doc.removeEventListener('keydown', onKeyDown);\n };\n }, [disabled, domReference, floatingFocusElement, modal, orderRef, isUntrappedTypeableCombobox, getTabbableContent, getTabbableElements]);\n React.useEffect(() => {\n if (disabled) return;\n if (!floating) return;\n function handleFocusIn(event) {\n const target = getTarget(event);\n const tabbableContent = getTabbableContent();\n const tabbableIndex = tabbableContent.indexOf(target);\n if (tabbableIndex !== -1) {\n tabbableIndexRef.current = tabbableIndex;\n }\n }\n floating.addEventListener('focusin', handleFocusIn);\n return () => {\n floating.removeEventListener('focusin', handleFocusIn);\n };\n }, [disabled, floating, getTabbableContent]);\n React.useEffect(() => {\n if (disabled) return;\n if (!closeOnFocusOut) return;\n\n // In Safari, buttons lose focus when pressing them.\n function handlePointerDown() {\n isPointerDownRef.current = true;\n setTimeout(() => {\n isPointerDownRef.current = false;\n });\n }\n function handleFocusOutside(event) {\n const relatedTarget = event.relatedTarget;\n queueMicrotask(() => {\n const movedToUnrelatedNode = !(contains(domReference, relatedTarget) || contains(floating, relatedTarget) || contains(relatedTarget, floating) || contains(portalContext == null ? void 0 : portalContext.portalNode, relatedTarget) || relatedTarget != null && relatedTarget.hasAttribute(createAttribute('focus-guard')) || tree && (getChildren(tree.nodesRef.current, nodeId).find(node => {\n var _node$context, _node$context2;\n return contains((_node$context = node.context) == null ? void 0 : _node$context.elements.floating, relatedTarget) || contains((_node$context2 = node.context) == null ? void 0 : _node$context2.elements.domReference, relatedTarget);\n }) || getAncestors(tree.nodesRef.current, nodeId).find(node => {\n var _node$context3, _node$context4;\n return ((_node$context3 = node.context) == null ? void 0 : _node$context3.elements.floating) === relatedTarget || ((_node$context4 = node.context) == null ? void 0 : _node$context4.elements.domReference) === relatedTarget;\n })));\n\n // Restore focus to the previous tabbable element index to prevent\n // focus from being lost outside the floating tree.\n if (restoreFocus && movedToUnrelatedNode && activeElement(getDocument(floatingFocusElement)) === getDocument(floatingFocusElement).body) {\n // Let `FloatingPortal` effect knows that focus is still inside the\n // floating tree.\n if (isHTMLElement(floatingFocusElement)) {\n floatingFocusElement.focus();\n }\n const prevTabbableIndex = tabbableIndexRef.current;\n const tabbableContent = getTabbableContent();\n const nodeToFocus = tabbableContent[prevTabbableIndex] || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;\n if (isHTMLElement(nodeToFocus)) {\n nodeToFocus.focus();\n }\n }\n\n // Focus did not move inside the floating tree, and there are no tabbable\n // portal guards to handle closing.\n if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current &&\n // Fix React 18 Strict Mode returnFocus due to double rendering.\n relatedTarget !== getPreviouslyFocusedElement()) {\n preventReturnFocusRef.current = true;\n onOpenChange(false, event, 'focus-out');\n }\n });\n }\n if (floating && isHTMLElement(domReference)) {\n domReference.addEventListener('focusout', handleFocusOutside);\n domReference.addEventListener('pointerdown', handlePointerDown);\n floating.addEventListener('focusout', handleFocusOutside);\n return () => {\n domReference.removeEventListener('focusout', handleFocusOutside);\n domReference.removeEventListener('pointerdown', handlePointerDown);\n floating.removeEventListener('focusout', handleFocusOutside);\n };\n }\n }, [disabled, domReference, floating, floatingFocusElement, modal, nodeId, tree, portalContext, onOpenChange, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox]);\n React.useEffect(() => {\n var _portalContext$portal;\n if (disabled) return;\n\n // Don't hide portals nested within the parent portal.\n const portalNodes = Array.from((portalContext == null || (_portalContext$portal = portalContext.portalNode) == null ? void 0 : _portalContext$portal.querySelectorAll(\"[\" + createAttribute('portal') + \"]\")) || []);\n if (floating) {\n const insideElements = [floating, ...portalNodes, startDismissButtonRef.current, endDismissButtonRef.current, orderRef.current.includes('reference') || isUntrappedTypeableCombobox ? domReference : null].filter(x => x != null);\n const cleanup = modal || isUntrappedTypeableCombobox ? markOthers(insideElements, guards, !guards) : markOthers(insideElements);\n return () => {\n cleanup();\n };\n }\n }, [disabled, domReference, floating, modal, orderRef, portalContext, isUntrappedTypeableCombobox, guards]);\n index(() => {\n if (disabled || !isHTMLElement(floatingFocusElement)) return;\n const doc = getDocument(floatingFocusElement);\n const previouslyFocusedElement = activeElement(doc);\n\n // Wait for any layout effect state setters to execute to set `tabIndex`.\n queueMicrotask(() => {\n const focusableElements = getTabbableElements(floatingFocusElement);\n const initialFocusValue = initialFocusRef.current;\n const elToFocus = (typeof initialFocusValue === 'number' ? focusableElements[initialFocusValue] : initialFocusValue.current) || floatingFocusElement;\n const focusAlreadyInsideFloatingEl = contains(floatingFocusElement, previouslyFocusedElement);\n if (!ignoreInitialFocus && !focusAlreadyInsideFloatingEl && open) {\n enqueueFocus(elToFocus, {\n preventScroll: elToFocus === floatingFocusElement\n });\n }\n });\n }, [disabled, open, floatingFocusElement, ignoreInitialFocus, getTabbableElements, initialFocusRef]);\n index(() => {\n if (disabled || !floatingFocusElement) return;\n let preventReturnFocusScroll = false;\n const doc = getDocument(floatingFocusElement);\n const previouslyFocusedElement = activeElement(doc);\n const contextData = dataRef.current;\n let openEvent = contextData.openEvent;\n addPreviouslyFocusedElement(previouslyFocusedElement);\n\n // Dismissing via outside press should always ignore `returnFocus` to\n // prevent unwanted scrolling.\n function onOpenChange(_ref) {\n let {\n open,\n reason,\n event,\n nested\n } = _ref;\n if (open) {\n openEvent = event;\n }\n if (reason === 'escape-key' && refs.domReference.current) {\n addPreviouslyFocusedElement(refs.domReference.current);\n }\n if (reason === 'hover' && event.type === 'mouseleave') {\n preventReturnFocusRef.current = true;\n }\n if (reason !== 'outside-press') return;\n if (nested) {\n preventReturnFocusRef.current = false;\n preventReturnFocusScroll = true;\n } else {\n preventReturnFocusRef.current = !(isVirtualClick(event) || isVirtualPointerEvent(event));\n }\n }\n events.on('openchange', onOpenChange);\n const fallbackEl = doc.createElement('span');\n fallbackEl.setAttribute('tabindex', '-1');\n fallbackEl.setAttribute('aria-hidden', 'true');\n Object.assign(fallbackEl.style, HIDDEN_STYLES);\n if (isInsidePortal && domReference) {\n domReference.insertAdjacentElement('afterend', fallbackEl);\n }\n function getReturnElement() {\n if (typeof returnFocusRef.current === 'boolean') {\n return getPreviouslyFocusedElement() || fallbackEl;\n }\n return returnFocusRef.current.current || fallbackEl;\n }\n return () => {\n events.off('openchange', onOpenChange);\n const activeEl = activeElement(doc);\n const isFocusInsideFloatingTree = contains(floating, activeEl) || tree && getChildren(tree.nodesRef.current, nodeId).some(node => {\n var _node$context5;\n return contains((_node$context5 = node.context) == null ? void 0 : _node$context5.elements.floating, activeEl);\n });\n const shouldFocusReference = isFocusInsideFloatingTree || openEvent && ['click', 'mousedown'].includes(openEvent.type);\n if (shouldFocusReference && refs.domReference.current) {\n addPreviouslyFocusedElement(refs.domReference.current);\n }\n const returnElement = getReturnElement();\n queueMicrotask(() => {\n if (\n // eslint-disable-next-line react-hooks/exhaustive-deps\n returnFocusRef.current && !preventReturnFocusRef.current && isHTMLElement(returnElement) && (\n // If the focus moved somewhere else after mount, avoid returning focus\n // since it likely entered a different element which should be\n // respected: https://github.com/floating-ui/floating-ui/issues/2607\n returnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {\n returnElement.focus({\n preventScroll: preventReturnFocusScroll\n });\n }\n fallbackEl.remove();\n });\n };\n }, [disabled, floating, floatingFocusElement, returnFocusRef, dataRef, refs, events, tree, nodeId, isInsidePortal, domReference]);\n React.useEffect(() => {\n // The `returnFocus` cleanup behavior is inside a microtask; ensure we\n // wait for it to complete before resetting the flag.\n queueMicrotask(() => {\n preventReturnFocusRef.current = false;\n });\n }, [disabled]);\n\n // Synchronize the `context` & `modal` value to the FloatingPortal context.\n // It will decide whether or not it needs to render its own guards.\n index(() => {\n if (disabled) return;\n if (!portalContext) return;\n portalContext.setFocusManagerState({\n modal,\n closeOnFocusOut,\n open,\n onOpenChange,\n refs\n });\n return () => {\n portalContext.setFocusManagerState(null);\n };\n }, [disabled, portalContext, modal, open, onOpenChange, refs, closeOnFocusOut]);\n index(() => {\n if (disabled) return;\n if (!floatingFocusElement) return;\n if (typeof MutationObserver !== 'function') return;\n if (ignoreInitialFocus) return;\n const handleMutation = () => {\n const tabIndex = floatingFocusElement.getAttribute('tabindex');\n const tabbableContent = getTabbableContent();\n const activeEl = activeElement(getDocument(floating));\n const tabbableIndex = tabbableContent.indexOf(activeEl);\n if (tabbableIndex !== -1) {\n tabbableIndexRef.current = tabbableIndex;\n }\n if (orderRef.current.includes('floating') || activeEl !== refs.domReference.current && tabbableContent.length === 0) {\n if (tabIndex !== '0') {\n floatingFocusElement.setAttribute('tabindex', '0');\n }\n } else if (tabIndex !== '-1') {\n floatingFocusElement.setAttribute('tabindex', '-1');\n }\n };\n handleMutation();\n const observer = new MutationObserver(handleMutation);\n observer.observe(floatingFocusElement, {\n childList: true,\n subtree: true,\n attributes: true\n });\n return () => {\n observer.disconnect();\n };\n }, [disabled, floating, floatingFocusElement, refs, orderRef, getTabbableContent, ignoreInitialFocus]);\n function renderDismissButton(location) {\n if (disabled || !visuallyHiddenDismiss || !modal) {\n return null;\n }\n return /*#__PURE__*/React.createElement(VisuallyHiddenDismiss, {\n ref: location === 'start' ? startDismissButtonRef : endDismissButtonRef,\n onClick: event => onOpenChange(false, event.nativeEvent)\n }, typeof visuallyHiddenDismiss === 'string' ? visuallyHiddenDismiss : 'Dismiss');\n }\n const shouldRenderGuards = !disabled && guards && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);\n return /*#__PURE__*/React.createElement(React.Fragment, null, shouldRenderGuards && /*#__PURE__*/React.createElement(FocusGuard, {\n \"data-type\": \"inside\",\n ref: portalContext == null ? void 0 : portalContext.beforeInsideRef,\n onFocus: event => {\n if (modal) {\n const els = getTabbableElements();\n enqueueFocus(order[0] === 'reference' ? els[0] : els[els.length - 1]);\n } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n preventReturnFocusRef.current = false;\n if (isOutsideEvent(event, portalContext.portalNode)) {\n const nextTabbable = getNextTabbable() || domReference;\n nextTabbable == null || nextTabbable.focus();\n } else {\n var _portalContext$before;\n (_portalContext$before = portalContext.beforeOutsideRef.current) == null || _portalContext$before.focus();\n }\n }\n }\n }), !isUntrappedTypeableCombobox && renderDismissButton('start'), children, renderDismissButton('end'), shouldRenderGuards && /*#__PURE__*/React.createElement(FocusGuard, {\n \"data-type\": \"inside\",\n ref: portalContext == null ? void 0 : portalContext.afterInsideRef,\n onFocus: event => {\n if (modal) {\n enqueueFocus(getTabbableElements()[0]);\n } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n if (closeOnFocusOut) {\n preventReturnFocusRef.current = true;\n }\n if (isOutsideEvent(event, portalContext.portalNode)) {\n const prevTabbable = getPreviousTabbable() || domReference;\n prevTabbable == null || prevTabbable.focus();\n } else {\n var _portalContext$afterO;\n (_portalContext$afterO = portalContext.afterOutsideRef.current) == null || _portalContext$afterO.focus();\n }\n }\n }\n }));\n}\n\nlet lockCount = 0;\nfunction enableScrollLock() {\n const isIOS = /iP(hone|ad|od)|iOS/.test(getPlatform());\n const bodyStyle = document.body.style;\n // RTL <body> scrollbar\n const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;\n const paddingProp = scrollbarX ? 'paddingLeft' : 'paddingRight';\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;\n const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;\n bodyStyle.overflow = 'hidden';\n if (scrollbarWidth) {\n bodyStyle[paddingProp] = scrollbarWidth + \"px\";\n }\n\n // Only iOS doesn't respect `overflow: hidden` on document.body, and this\n // technique has fewer side effects.\n if (isIOS) {\n var _window$visualViewpor, _window$visualViewpor2;\n // iOS 12 does not support `visualViewport`.\n const offsetLeft = ((_window$visualViewpor = window.visualViewport) == null ? void 0 : _window$visualViewpor.offsetLeft) || 0;\n const offsetTop = ((_window$visualViewpor2 = window.visualViewport) == null ? void 0 : _window$visualViewpor2.offsetTop) || 0;\n Object.assign(bodyStyle, {\n position: 'fixed',\n top: -(scrollY - Math.floor(offsetTop)) + \"px\",\n left: -(scrollX - Math.floor(offsetLeft)) + \"px\",\n right: '0'\n });\n }\n return () => {\n Object.assign(bodyStyle, {\n overflow: '',\n [paddingProp]: ''\n });\n if (isIOS) {\n Object.assign(bodyStyle, {\n position: '',\n top: '',\n left: '',\n right: ''\n });\n window.scrollTo(scrollX, scrollY);\n }\n };\n}\nlet cleanup = () => {};\n\n/**\n * Provides base styling for a fixed overlay element to dim content or block\n * pointer events behind a floating element.\n * It's a regular `<div>`, so it can be styled via any CSS solution you prefer.\n * @see https://floating-ui.com/docs/FloatingOverlay\n */\nconst FloatingOverlay = /*#__PURE__*/React.forwardRef(function FloatingOverlay(props, ref) {\n const {\n lockScroll = false,\n ...rest\n } = props;\n index(() => {\n if (!lockScroll) return;\n lockCount++;\n if (lockCount === 1) {\n cleanup = enableScrollLock();\n }\n return () => {\n lockCount--;\n if (lockCount === 0) {\n cleanup();\n }\n };\n }, [lockScroll]);\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: ref\n }, rest, {\n style: {\n position: 'fixed',\n overflow: 'auto',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...rest.style\n }\n }));\n});\n\nfunction isButtonTarget(event) {\n return isHTMLElement(event.target) && event.target.tagName === 'BUTTON';\n}\nfunction isSpaceIgnored(element) {\n return isTypeableElement(element);\n}\n/**\n * Opens or closes the floating element when clicking the reference element.\n * @see https://floating-ui.com/docs/useClick\n */\nfunction useClick(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n dataRef,\n elements: {\n domReference\n }\n } = context;\n const {\n enabled = true,\n event: eventOption = 'click',\n toggle = true,\n ignoreMouse = false,\n keyboardHandlers = true,\n stickIfOpen = true\n } = props;\n const pointerTypeRef = React.useRef();\n const didKeyDownRef = React.useRef(false);\n const reference = React.useMemo(() => ({\n onPointerDown(event) {\n pointerTypeRef.current = event.pointerType;\n },\n onMouseDown(event) {\n const pointerType = pointerTypeRef.current;\n\n // Ignore all buttons except for the \"main\" button.\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n if (event.button !== 0) return;\n if (eventOption === 'click') return;\n if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'mousedown' : true)) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n // Prevent stealing focus from the floating element\n event.preventDefault();\n onOpenChange(true, event.nativeEvent, 'click');\n }\n },\n onClick(event) {\n const pointerType = pointerTypeRef.current;\n if (eventOption === 'mousedown' && pointerTypeRef.current) {\n pointerTypeRef.current = undefined;\n return;\n }\n if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'click' : true)) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n },\n onKeyDown(event) {\n pointerTypeRef.current = undefined;\n if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event)) {\n return;\n }\n if (event.key === ' ' && !isSpaceIgnored(domReference)) {\n // Prevent scrolling\n event.preventDefault();\n didKeyDownRef.current = true;\n }\n if (event.key === 'Enter') {\n if (open && toggle) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n }\n },\n onKeyUp(event) {\n if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event) || isSpaceIgnored(domReference)) {\n return;\n }\n if (event.key === ' ' && didKeyDownRef.current) {\n didKeyDownRef.current = false;\n if (open && toggle) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n }\n }\n }), [dataRef, domReference, eventOption, ignoreMouse, keyboardHandlers, onOpenChange, open, stickIfOpen, toggle]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nfunction createVirtualElement(domElement, data) {\n let offsetX = null;\n let offsetY = null;\n let isAutoUpdateEvent = false;\n return {\n contextElement: domElement || undefined,\n getBoundingClientRect() {\n var _data$dataRef$current;\n const domRect = (domElement == null ? void 0 : domElement.getBoundingClientRect()) || {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n const isXAxis = data.axis === 'x' || data.axis === 'both';\n const isYAxis = data.axis === 'y' || data.axis === 'both';\n const canTrackCursorOnAutoUpdate = ['mouseenter', 'mousemove'].includes(((_data$dataRef$current = data.dataRef.current.openEvent) == null ? void 0 : _data$dataRef$current.type) || '') && data.pointerType !== 'touch';\n let width = domRect.width;\n let height = domRect.height;\n let x = domRect.x;\n let y = domRect.y;\n if (offsetX == null && data.x && isXAxis) {\n offsetX = domRect.x - data.x;\n }\n if (offsetY == null && data.y && isYAxis) {\n offsetY = domRect.y - data.y;\n }\n x -= offsetX || 0;\n y -= offsetY || 0;\n width = 0;\n height = 0;\n if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {\n width = data.axis === 'y' ? domRect.width : 0;\n height = data.axis === 'x' ? domRect.height : 0;\n x = isXAxis && data.x != null ? data.x : x;\n y = isYAxis && data.y != null ? data.y : y;\n } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {\n height = data.axis === 'x' ? domRect.height : height;\n width = data.axis === 'y' ? domRect.width : width;\n }\n isAutoUpdateEvent = true;\n return {\n width,\n height,\n x,\n y,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x\n };\n }\n };\n}\nfunction isMouseBasedEvent(event) {\n return event != null && event.clientX != null;\n}\n/**\n * Positions the floating element relative to a client point (in the viewport),\n * such as the mouse position. By default, it follows the mouse cursor.\n * @see https://floating-ui.com/docs/useClientPoint\n */\nfunction useClientPoint(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n dataRef,\n elements: {\n floating,\n domReference\n },\n refs\n } = context;\n const {\n enabled = true,\n axis = 'both',\n x = null,\n y = null\n } = props;\n const initialRef = React.useRef(false);\n const cleanupListenerRef = React.useRef(null);\n const [pointerType, setPointerType] = React.useState();\n const [reactive, setReactive] = React.useState([]);\n const setReference = useEffectEvent((x, y) => {\n if (initialRef.current) return;\n\n // Prevent setting if the open event was not a mouse-like one\n // (e.g. focus to open, then hover over the reference element).\n // Only apply if the event exists.\n if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {\n return;\n }\n refs.setPositionReference(createVirtualElement(domReference, {\n x,\n y,\n axis,\n dataRef,\n pointerType\n }));\n });\n const handleReferenceEnterOrMove = useEffectEvent(event => {\n if (x != null || y != null) return;\n if (!open) {\n setReference(event.clientX, event.clientY);\n } else if (!cleanupListenerRef.current) {\n // If there's no cleanup, there's no listener, but we want to ensure\n // we add the listener if the cursor landed on the floating element and\n // then back on the reference (i.e. it's interactive).\n setReactive([]);\n }\n });\n\n // If the pointer is a mouse-like pointer, we want to continue following the\n // mouse even if the floating element is transitioning out. On touch\n // devices, this is undesirable because the floating element will move to\n // the dismissal touch point.\n const openCheck = isMouseLikePointerType(pointerType) ? floating : open;\n const addListener = React.useCallback(() => {\n // Explicitly specified `x`/`y` coordinates shouldn't add a listener.\n if (!openCheck || !enabled || x != null || y != null) return;\n const win = getWindow(floating);\n function handleMouseMove(event) {\n const target = getTarget(event);\n if (!contains(floating, target)) {\n setReference(event.clientX, event.clientY);\n } else {\n win.removeEventListener('mousemove', handleMouseMove);\n cleanupListenerRef.current = null;\n }\n }\n if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {\n win.addEventListener('mousemove', handleMouseMove);\n const cleanup = () => {\n win.removeEventListener('mousemove', handleMouseMove);\n cleanupListenerRef.current = null;\n };\n cleanupListenerRef.current = cleanup;\n return cleanup;\n }\n refs.setPositionReference(domReference);\n }, [openCheck, enabled, x, y, floating, dataRef, refs, domReference, setReference]);\n React.useEffect(() => {\n return addListener();\n }, [addListener, reactive]);\n React.useEffect(() => {\n if (enabled && !floating) {\n initialRef.current = false;\n }\n }, [enabled, floating]);\n React.useEffect(() => {\n if (!enabled && open) {\n initialRef.current = true;\n }\n }, [enabled, open]);\n index(() => {\n if (enabled && (x != null || y != null)) {\n initialRef.current = false;\n setReference(x, y);\n }\n }, [enabled, x, y, setReference]);\n const reference = React.useMemo(() => {\n function setPointerTypeRef(_ref) {\n let {\n pointerType\n } = _ref;\n setPointerType(pointerType);\n }\n return {\n onPointerDown: setPointerTypeRef,\n onPointerEnter: setPointerTypeRef,\n onMouseMove: handleReferenceEnterOrMove,\n onMouseEnter: handleReferenceEnterOrMove\n };\n }, [handleReferenceEnterOrMove]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nconst bubbleHandlerKeys = {\n pointerdown: 'onPointerDown',\n mousedown: 'onMouseDown',\n click: 'onClick'\n};\nconst captureHandlerKeys = {\n pointerdown: 'onPointerDownCapture',\n mousedown: 'onMouseDownCapture',\n click: 'onClickCapture'\n};\nconst normalizeProp = normalizable => {\n var _normalizable$escapeK, _normalizable$outside;\n return {\n escapeKey: typeof normalizable === 'boolean' ? normalizable : (_normalizable$escapeK = normalizable == null ? void 0 : normalizable.escapeKey) != null ? _normalizable$escapeK : false,\n outsidePress: typeof normalizable === 'boolean' ? normalizable : (_normalizable$outside = normalizable == null ? void 0 : normalizable.outsidePress) != null ? _normalizable$outside : true\n };\n};\n/**\n * Closes the floating element when a dismissal is requested — by default, when\n * the user presses the `escape` key or outside of the floating element.\n * @see https://floating-ui.com/docs/useDismiss\n */\nfunction useDismiss(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n elements,\n dataRef\n } = context;\n const {\n enabled = true,\n escapeKey = true,\n outsidePress: unstable_outsidePress = true,\n outsidePressEvent = 'pointerdown',\n referencePress = false,\n referencePressEvent = 'pointerdown',\n ancestorScroll = false,\n bubbles,\n capture\n } = props;\n const tree = useFloatingTree();\n const outsidePressFn = useEffectEvent(typeof unstable_outsidePress === 'function' ? unstable_outsidePress : () => false);\n const outsidePress = typeof unstable_outsidePress === 'function' ? outsidePressFn : unstable_outsidePress;\n const insideReactTreeRef = React.useRef(false);\n const endedOrStartedInsideRef = React.useRef(false);\n const {\n escapeKey: escapeKeyBubbles,\n outsidePress: outsidePressBubbles\n } = normalizeProp(bubbles);\n const {\n escapeKey: escapeKeyCapture,\n outsidePress: outsidePressCapture\n } = normalizeProp(capture);\n const isComposingRef = React.useRef(false);\n const closeOnEscapeKeyDown = useEffectEvent(event => {\n var _dataRef$current$floa;\n if (!open || !enabled || !escapeKey || event.key !== 'Escape') {\n return;\n }\n\n // Wait until IME is settled. Pressing `Escape` while composing should\n // close the compose menu, but not the floating element.\n if (isComposingRef.current) {\n return;\n }\n const nodeId = (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n const children = tree ? getChildren(tree.nodesRef.current, nodeId) : [];\n if (!escapeKeyBubbles) {\n event.stopPropagation();\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach(child => {\n var _child$context;\n if ((_child$context = child.context) != null && _child$context.open && !child.context.dataRef.current.__escapeKeyBubbles) {\n shouldDismiss = false;\n return;\n }\n });\n if (!shouldDismiss) {\n return;\n }\n }\n }\n onOpenChange(false, isReactEvent(event) ? event.nativeEvent : event, 'escape-key');\n });\n const closeOnEscapeKeyDownCapture = useEffectEvent(event => {\n var _getTarget2;\n const callback = () => {\n var _getTarget;\n closeOnEscapeKeyDown(event);\n (_getTarget = getTarget(event)) == null || _getTarget.removeEventListener('keydown', callback);\n };\n (_getTarget2 = getTarget(event)) == null || _getTarget2.addEventListener('keydown', callback);\n });\n const closeOnPressOutside = useEffectEvent(event => {\n var _dataRef$current$floa2;\n // Given developers can stop the propagation of the synthetic event,\n // we can only be confident with a positive value.\n const insideReactTree = insideReactTreeRef.current;\n insideReactTreeRef.current = false;\n\n // When click outside is lazy (`click` event), handle dragging.\n // Don't close if:\n // - The click started inside the floating element.\n // - The click ended inside the floating element.\n const endedOrStartedInside = endedOrStartedInsideRef.current;\n endedOrStartedInsideRef.current = false;\n if (outsidePressEvent === 'click' && endedOrStartedInside) {\n return;\n }\n if (insideReactTree) {\n return;\n }\n if (typeof outsidePress === 'function' && !outsidePress(event)) {\n return;\n }\n const target = getTarget(event);\n const inertSelector = \"[\" + createAttribute('inert') + \"]\";\n const markers = getDocument(elements.floating).querySelectorAll(inertSelector);\n let targetRootAncestor = isElement(target) ? target : null;\n while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {\n const nextParent = getParentNode(targetRootAncestor);\n if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {\n break;\n }\n targetRootAncestor = nextParent;\n }\n\n // Check if the click occurred on a third-party element injected after the\n // floating element rendered.\n if (markers.length && isElement(target) && !isRootElement(target) &&\n // Clicked on a direct ancestor (e.g. FloatingOverlay).\n !contains(target, elements.floating) &&\n // If the target root element contains none of the markers, then the\n // element was injected after the floating element rendered.\n Array.from(markers).every(marker => !contains(targetRootAncestor, marker))) {\n return;\n }\n\n // Check if the click occurred on the scrollbar\n if (isHTMLElement(target) && floating) {\n // In Firefox, `target.scrollWidth > target.clientWidth` for inline\n // elements.\n const canScrollX = target.clientWidth > 0 && target.scrollWidth > target.clientWidth;\n const canScrollY = target.clientHeight > 0 && target.scrollHeight > target.clientHeight;\n let xCond = canScrollY && event.offsetX > target.clientWidth;\n\n // In some browsers it is possible to change the <body> (or window)\n // scrollbar to the left side, but is very rare and is difficult to\n // check for. Plus, for modal dialogs with backdrops, it is more\n // important that the backdrop is checked but not so much the window.\n if (canScrollY) {\n const isRTL = getComputedStyle(target).direction === 'rtl';\n if (isRTL) {\n xCond = event.offsetX <= target.offsetWidth - target.clientWidth;\n }\n }\n if (xCond || canScrollX && event.offsetY > target.clientHeight) {\n return;\n }\n }\n const nodeId = (_dataRef$current$floa2 = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa2.nodeId;\n const targetIsInsideChildren = tree && getChildren(tree.nodesRef.current, nodeId).some(node => {\n var _node$context;\n return isEventTargetWithin(event, (_node$context = node.context) == null ? void 0 : _node$context.elements.floating);\n });\n if (isEventTargetWithin(event, elements.floating) || isEventTargetWithin(event, elements.domReference) || targetIsInsideChildren) {\n return;\n }\n const children = tree ? getChildren(tree.nodesRef.current, nodeId) : [];\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach(child => {\n var _child$context2;\n if ((_child$context2 = child.context) != null && _child$context2.open && !child.context.dataRef.current.__outsidePressBubbles) {\n shouldDismiss = false;\n return;\n }\n });\n if (!shouldDismiss) {\n return;\n }\n }\n onOpenChange(false, event, 'outside-press');\n });\n const closeOnPressOutsideCapture = useEffectEvent(event => {\n var _getTarget4;\n const callback = () => {\n var _getTarget3;\n closeOnPressOutside(event);\n (_getTarget3 = getTarget(event)) == null || _getTarget3.removeEventListener(outsidePressEvent, callback);\n };\n (_getTarget4 = getTarget(event)) == null || _getTarget4.addEventListener(outsidePressEvent, callback);\n });\n React.useEffect(() => {\n if (!open || !enabled) {\n return;\n }\n dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;\n dataRef.current.__outsidePressBubbles = outsidePressBubbles;\n let compositionTimeout = -1;\n function onScroll(event) {\n onOpenChange(false, event, 'ancestor-scroll');\n }\n function handleCompositionStart() {\n window.clearTimeout(compositionTimeout);\n isComposingRef.current = true;\n }\n function handleCompositionEnd() {\n // Safari fires `compositionend` before `keydown`, so we need to wait\n // until the next tick to set `isComposing` to `false`.\n // https://bugs.webkit.org/show_bug.cgi?id=165004\n compositionTimeout = window.setTimeout(() => {\n isComposingRef.current = false;\n },\n // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.\n // Only apply to WebKit for the test to remain 0ms.\n isWebKit() ? 5 : 0);\n }\n const doc = getDocument(elements.floating);\n if (escapeKey) {\n doc.addEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n doc.addEventListener('compositionstart', handleCompositionStart);\n doc.addEventListener('compositionend', handleCompositionEnd);\n }\n outsidePress && doc.addEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n let ancestors = [];\n if (ancestorScroll) {\n if (isElement(elements.domReference)) {\n ancestors = getOverflowAncestors(elements.domReference);\n }\n if (isElement(elements.floating)) {\n ancestors = ancestors.concat(getOverflowAncestors(elements.floating));\n }\n if (!isElement(elements.reference) && elements.reference && elements.reference.contextElement) {\n ancestors = ancestors.concat(getOverflowAncestors(elements.reference.contextElement));\n }\n }\n\n // Ignore the visual viewport for scrolling dismissal (allow pinch-zoom)\n ancestors = ancestors.filter(ancestor => {\n var _doc$defaultView;\n return ancestor !== ((_doc$defaultView = doc.defaultView) == null ? void 0 : _doc$defaultView.visualViewport);\n });\n ancestors.forEach(ancestor => {\n ancestor.addEventListener('scroll', onScroll, {\n passive: true\n });\n });\n return () => {\n if (escapeKey) {\n doc.removeEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n doc.removeEventListener('compositionstart', handleCompositionStart);\n doc.removeEventListener('compositionend', handleCompositionEnd);\n }\n outsidePress && doc.removeEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n ancestors.forEach(ancestor => {\n ancestor.removeEventListener('scroll', onScroll);\n });\n window.clearTimeout(compositionTimeout);\n };\n }, [dataRef, elements, escapeKey, outsidePress, outsidePressEvent, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, escapeKeyCapture, closeOnEscapeKeyDownCapture, closeOnPressOutside, outsidePressCapture, closeOnPressOutsideCapture]);\n React.useEffect(() => {\n insideReactTreeRef.current = false;\n }, [outsidePress, outsidePressEvent]);\n const reference = React.useMemo(() => ({\n onKeyDown: closeOnEscapeKeyDown,\n [bubbleHandlerKeys[referencePressEvent]]: event => {\n if (referencePress) {\n onOpenChange(false, event.nativeEvent, 'reference-press');\n }\n }\n }), [closeOnEscapeKeyDown, onOpenChange, referencePress, referencePressEvent]);\n const floating = React.useMemo(() => ({\n onKeyDown: closeOnEscapeKeyDown,\n onMouseDown() {\n endedOrStartedInsideRef.current = true;\n },\n onMouseUp() {\n endedOrStartedInsideRef.current = true;\n },\n [captureHandlerKeys[outsidePressEvent]]: () => {\n insideReactTreeRef.current = true;\n }\n }), [closeOnEscapeKeyDown, outsidePressEvent]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nfunction useFloatingRootContext(options) {\n const {\n open = false,\n onOpenChange: onOpenChangeProp,\n elements: elementsProp\n } = options;\n const floatingId = useId();\n const dataRef = React.useRef({});\n const [events] = React.useState(() => createPubSub());\n const nested = useFloatingParentNodeId() != null;\n if (process.env.NODE_ENV !== \"production\") {\n const optionDomReference = elementsProp.reference;\n if (optionDomReference && !isElement(optionDomReference)) {\n error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `refs.setPositionReference()`', 'instead.');\n }\n }\n const [positionReference, setPositionReference] = React.useState(elementsProp.reference);\n const onOpenChange = useEffectEvent((open, event, reason) => {\n dataRef.current.openEvent = open ? event : undefined;\n events.emit('openchange', {\n open,\n event,\n reason,\n nested\n });\n onOpenChangeProp == null || onOpenChangeProp(open, event, reason);\n });\n const refs = React.useMemo(() => ({\n setPositionReference\n }), []);\n const elements = React.useMemo(() => ({\n reference: positionReference || elementsProp.reference || null,\n floating: elementsProp.floating || null,\n domReference: elementsProp.reference\n }), [positionReference, elementsProp.reference, elementsProp.floating]);\n return React.useMemo(() => ({\n dataRef,\n open,\n onOpenChange,\n elements,\n events,\n floatingId,\n refs\n }), [open, onOpenChange, elements, events, floatingId, refs]);\n}\n\n/**\n * Provides data to position a floating element and context to add interactions.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n nodeId\n } = options;\n const internalRootContext = useFloatingRootContext({\n ...options,\n elements: {\n reference: null,\n floating: null,\n ...options.elements\n }\n });\n const rootContext = options.rootContext || internalRootContext;\n const computedElements = rootContext.elements;\n const [_domReference, setDomReference] = React.useState(null);\n const [positionReference, _setPositionReference] = React.useState(null);\n const optionDomReference = computedElements == null ? void 0 : computedElements.domReference;\n const domReference = optionDomReference || _domReference;\n const domReferenceRef = React.useRef(null);\n const tree = useFloatingTree();\n index(() => {\n if (domReference) {\n domReferenceRef.current = domReference;\n }\n }, [domReference]);\n const position = useFloating$1({\n ...options,\n elements: {\n ...computedElements,\n ...(positionReference && {\n reference: positionReference\n })\n }\n });\n const setPositionReference = React.useCallback(node => {\n const computedPositionReference = isElement(node) ? {\n getBoundingClientRect: () => node.getBoundingClientRect(),\n contextElement: node\n } : node;\n // Store the positionReference in state if the DOM reference is specified externally via the\n // `elements.reference` option. This ensures that it won't be overridden on future renders.\n _setPositionReference(computedPositionReference);\n position.refs.setReference(computedPositionReference);\n }, [position.refs]);\n const setReference = React.useCallback(node => {\n if (isElement(node) || node === null) {\n domReferenceRef.current = node;\n setDomReference(node);\n }\n\n // Backwards-compatibility for passing a virtual element to `reference`\n // after it has set the DOM reference.\n if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||\n // Don't allow setting virtual elements using the old technique back to\n // `null` to support `positionReference` + an unstable `reference`\n // callback ref.\n node !== null && !isElement(node)) {\n position.refs.setReference(node);\n }\n }, [position.refs]);\n const refs = React.useMemo(() => ({\n ...position.refs,\n setReference,\n setPositionReference,\n domReference: domReferenceRef\n }), [position.refs, setReference, setPositionReference]);\n const elements = React.useMemo(() => ({\n ...position.elements,\n domReference: domReference\n }), [position.elements, domReference]);\n const context = React.useMemo(() => ({\n ...position,\n ...rootContext,\n refs,\n elements,\n nodeId\n }), [position, refs, elements, nodeId, rootContext]);\n index(() => {\n rootContext.dataRef.current.floatingContext = context;\n const node = tree == null ? void 0 : tree.nodesRef.current.find(node => node.id === nodeId);\n if (node) {\n node.context = context;\n }\n });\n return React.useMemo(() => ({\n ...position,\n context,\n refs,\n elements\n }), [position, refs, elements, context]);\n}\n\n/**\n * Opens the floating element while the reference element has focus, like CSS\n * `:focus`.\n * @see https://floating-ui.com/docs/useFocus\n */\nfunction useFocus(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n events,\n dataRef,\n elements\n } = context;\n const {\n enabled = true,\n visibleOnly = true\n } = props;\n const blockFocusRef = React.useRef(false);\n const timeoutRef = React.useRef();\n const keyboardModalityRef = React.useRef(true);\n React.useEffect(() => {\n if (!enabled) return;\n const win = getWindow(elements.domReference);\n\n // If the reference was focused and the user left the tab/window, and the\n // floating element was not open, the focus should be blocked when they\n // return to the tab/window.\n function onBlur() {\n if (!open && isHTMLElement(elements.domReference) && elements.domReference === activeElement(getDocument(elements.domReference))) {\n blockFocusRef.current = true;\n }\n }\n function onKeyDown() {\n keyboardModalityRef.current = true;\n }\n win.addEventListener('blur', onBlur);\n win.addEventListener('keydown', onKeyDown, true);\n return () => {\n win.removeEventListener('blur', onBlur);\n win.removeEventListener('keydown', onKeyDown, true);\n };\n }, [elements.domReference, open, enabled]);\n React.useEffect(() => {\n if (!enabled) return;\n function onOpenChange(_ref) {\n let {\n reason\n } = _ref;\n if (reason === 'reference-press' || reason === 'escape-key') {\n blockFocusRef.current = true;\n }\n }\n events.on('openchange', onOpenChange);\n return () => {\n events.off('openchange', onOpenChange);\n };\n }, [events, enabled]);\n React.useEffect(() => {\n return () => {\n clearTimeout(timeoutRef.current);\n };\n }, []);\n const reference = React.useMemo(() => ({\n onPointerDown(event) {\n if (isVirtualPointerEvent(event.nativeEvent)) return;\n keyboardModalityRef.current = false;\n },\n onMouseLeave() {\n blockFocusRef.current = false;\n },\n onFocus(event) {\n if (blockFocusRef.current) return;\n const target = getTarget(event.nativeEvent);\n if (visibleOnly && isElement(target)) {\n try {\n // Mac Safari unreliably matches `:focus-visible` on the reference\n // if focus was outside the page initially - use the fallback\n // instead.\n if (isSafari() && isMac()) throw Error();\n if (!target.matches(':focus-visible')) return;\n } catch (e) {\n // Old browsers will throw an error when using `:focus-visible`.\n if (!keyboardModalityRef.current && !isTypeableElement(target)) {\n return;\n }\n }\n }\n onOpenChange(true, event.nativeEvent, 'focus');\n },\n onBlur(event) {\n blockFocusRef.current = false;\n const relatedTarget = event.relatedTarget;\n const nativeEvent = event.nativeEvent;\n\n // Hit the non-modal focus management portal guard. Focus will be\n // moved into the floating element immediately after.\n const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';\n\n // Wait for the window blur listener to fire.\n timeoutRef.current = window.setTimeout(() => {\n var _dataRef$current$floa;\n const activeEl = activeElement(elements.domReference ? elements.domReference.ownerDocument : document);\n\n // Focus left the page, keep it open.\n if (!relatedTarget && activeEl === elements.domReference) return;\n\n // When focusing the reference element (e.g. regular click), then\n // clicking into the floating element, prevent it from hiding.\n // Note: it must be focusable, e.g. `tabindex=\"-1\"`.\n // We can not rely on relatedTarget to point to the correct element\n // as it will only point to the shadow host of the newly focused element\n // and not the element that actually has received focus if it is located\n // inside a shadow root.\n if (contains((_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.refs.floating.current, activeEl) || contains(elements.domReference, activeEl) || movedToFocusGuard) {\n return;\n }\n onOpenChange(false, nativeEvent, 'focus');\n });\n }\n }), [dataRef, elements.domReference, onOpenChange, visibleOnly]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nconst ACTIVE_KEY = 'active';\nconst SELECTED_KEY = 'selected';\nfunction mergeProps(userProps, propsList, elementKey) {\n const map = new Map();\n const isItem = elementKey === 'item';\n let domUserProps = userProps;\n if (isItem && userProps) {\n const {\n [ACTIVE_KEY]: _,\n [SELECTED_KEY]: __,\n ...validProps\n } = userProps;\n domUserProps = validProps;\n }\n return {\n ...(elementKey === 'floating' && {\n tabIndex: -1,\n [FOCUSABLE_ATTRIBUTE]: ''\n }),\n ...domUserProps,\n ...propsList.map(value => {\n const propsOrGetProps = value ? value[elementKey] : null;\n if (typeof propsOrGetProps === 'function') {\n return userProps ? propsOrGetProps(userProps) : null;\n }\n return propsOrGetProps;\n }).concat(userProps).reduce((acc, props) => {\n if (!props) {\n return acc;\n }\n Object.entries(props).forEach(_ref => {\n let [key, value] = _ref;\n if (isItem && [ACTIVE_KEY, SELECTED_KEY].includes(key)) {\n return;\n }\n if (key.indexOf('on') === 0) {\n if (!map.has(key)) {\n map.set(key, []);\n }\n if (typeof value === 'function') {\n var _map$get;\n (_map$get = map.get(key)) == null || _map$get.push(value);\n acc[key] = function () {\n var _map$get2;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return (_map$get2 = map.get(key)) == null ? void 0 : _map$get2.map(fn => fn(...args)).find(val => val !== undefined);\n };\n }\n } else {\n acc[key] = value;\n }\n });\n return acc;\n }, {})\n };\n}\n/**\n * Merges an array of interaction hooks' props into prop getters, allowing\n * event handler functions to be composed together without overwriting one\n * another.\n * @see https://floating-ui.com/docs/useInteractions\n */\nfunction useInteractions(propsList) {\n if (propsList === void 0) {\n propsList = [];\n }\n const referenceDeps = propsList.map(key => key == null ? void 0 : key.reference);\n const floatingDeps = propsList.map(key => key == null ? void 0 : key.floating);\n const itemDeps = propsList.map(key => key == null ? void 0 : key.item);\n const getReferenceProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'reference'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n referenceDeps);\n const getFloatingProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'floating'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n floatingDeps);\n const getItemProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'item'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n itemDeps);\n return React.useMemo(() => ({\n getReferenceProps,\n getFloatingProps,\n getItemProps\n }), [getReferenceProps, getFloatingProps, getItemProps]);\n}\n\nlet isPreventScrollSupported = false;\nfunction doSwitch(orientation, vertical, horizontal) {\n switch (orientation) {\n case 'vertical':\n return vertical;\n case 'horizontal':\n return horizontal;\n default:\n return vertical || horizontal;\n }\n}\nfunction isMainOrientationKey(key, orientation) {\n const vertical = key === ARROW_UP || key === ARROW_DOWN;\n const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n const vertical = key === ARROW_DOWN;\n const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal) || key === 'Enter' || key === ' ' || key === '';\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n const horizontal = key === ARROW_DOWN;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl) {\n const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n const horizontal = key === ARROW_UP;\n return doSwitch(orientation, vertical, horizontal);\n}\n/**\n * Adds arrow key-based navigation of a list of items, either using real DOM\n * focus or virtual focus.\n * @see https://floating-ui.com/docs/useListNavigation\n */\nfunction useListNavigation(context, props) {\n const {\n open,\n onOpenChange,\n elements\n } = context;\n const {\n listRef,\n activeIndex,\n onNavigate: unstable_onNavigate = () => {},\n enabled = true,\n selectedIndex = null,\n allowEscape = false,\n loop = false,\n nested = false,\n rtl = false,\n virtual = false,\n focusItemOnOpen = 'auto',\n focusItemOnHover = true,\n openOnArrowKeyDown = true,\n disabledIndices = undefined,\n orientation = 'vertical',\n cols = 1,\n scrollItemIntoView = true,\n virtualItemRef,\n itemSizes,\n dense = false\n } = props;\n if (process.env.NODE_ENV !== \"production\") {\n if (allowEscape) {\n if (!loop) {\n warn('`useListNavigation` looping must be enabled to allow escaping.');\n }\n if (!virtual) {\n warn('`useListNavigation` must be virtual to allow escaping.');\n }\n }\n if (orientation === 'vertical' && cols > 1) {\n warn('In grid list navigation mode (`cols` > 1), the `orientation` should', 'be either \"horizontal\" or \"both\".');\n }\n }\n const floatingFocusElement = getFloatingFocusElement(elements.floating);\n const floatingFocusElementRef = useLatestRef(floatingFocusElement);\n const parentId = useFloatingParentNodeId();\n const tree = useFloatingTree();\n const onNavigate = useEffectEvent(unstable_onNavigate);\n const typeableComboboxReference = isTypeableCombobox(elements.domReference);\n const focusItemOnOpenRef = React.useRef(focusItemOnOpen);\n const indexRef = React.useRef(selectedIndex != null ? selectedIndex : -1);\n const keyRef = React.useRef(null);\n const isPointerModalityRef = React.useRef(true);\n const previousOnNavigateRef = React.useRef(onNavigate);\n const previousMountedRef = React.useRef(!!elements.floating);\n const previousOpenRef = React.useRef(open);\n const forceSyncFocus = React.useRef(false);\n const forceScrollIntoViewRef = React.useRef(false);\n const disabledIndicesRef = useLatestRef(disabledIndices);\n const latestOpenRef = useLatestRef(open);\n const scrollItemIntoViewRef = useLatestRef(scrollItemIntoView);\n const selectedIndexRef = useLatestRef(selectedIndex);\n const [activeId, setActiveId] = React.useState();\n const [virtualId, setVirtualId] = React.useState();\n const focusItem = useEffectEvent(function (listRef, indexRef, forceScrollIntoView) {\n if (forceScrollIntoView === void 0) {\n forceScrollIntoView = false;\n }\n function runFocus(item) {\n if (virtual) {\n setActiveId(item.id);\n tree == null || tree.events.emit('virtualfocus', item);\n if (virtualItemRef) {\n virtualItemRef.current = item;\n }\n } else {\n enqueueFocus(item, {\n preventScroll: true,\n // Mac Safari does not move the virtual cursor unless the focus call\n // is sync. However, for the very first focus call, we need to wait\n // for the position to be ready in order to prevent unwanted\n // scrolling. This means the virtual cursor will not move to the first\n // item when first opening the floating element, but will on\n // subsequent calls. `preventScroll` is supported in modern Safari,\n // so we can use that instead.\n // iOS Safari must be async or the first item will not be focused.\n sync: isMac() && isSafari() ? isPreventScrollSupported || forceSyncFocus.current : false\n });\n }\n }\n const initialItem = listRef.current[indexRef.current];\n if (initialItem) {\n runFocus(initialItem);\n }\n requestAnimationFrame(() => {\n const waitedItem = listRef.current[indexRef.current] || initialItem;\n if (!waitedItem) return;\n if (!initialItem) {\n runFocus(waitedItem);\n }\n const scrollIntoViewOptions = scrollItemIntoViewRef.current;\n const shouldScrollIntoView = scrollIntoViewOptions && item && (forceScrollIntoView || !isPointerModalityRef.current);\n if (shouldScrollIntoView) {\n // JSDOM doesn't support `.scrollIntoView()` but it's widely supported\n // by all browsers.\n waitedItem.scrollIntoView == null || waitedItem.scrollIntoView(typeof scrollIntoViewOptions === 'boolean' ? {\n block: 'nearest',\n inline: 'nearest'\n } : scrollIntoViewOptions);\n }\n });\n });\n index(() => {\n document.createElement('div').focus({\n get preventScroll() {\n isPreventScrollSupported = true;\n return false;\n }\n });\n }, []);\n\n // Sync `selectedIndex` to be the `activeIndex` upon opening the floating\n // element. Also, reset `activeIndex` upon closing the floating element.\n index(() => {\n if (!enabled) return;\n if (open && elements.floating) {\n if (focusItemOnOpenRef.current && selectedIndex != null) {\n // Regardless of the pointer modality, we want to ensure the selected\n // item comes into view when the floating element is opened.\n forceScrollIntoViewRef.current = true;\n indexRef.current = selectedIndex;\n onNavigate(selectedIndex);\n }\n } else if (previousMountedRef.current) {\n // Since the user can specify `onNavigate` conditionally\n // (onNavigate: open ? setActiveIndex : setSelectedIndex),\n // we store and call the previous function.\n indexRef.current = -1;\n previousOnNavigateRef.current(null);\n }\n }, [enabled, open, elements.floating, selectedIndex, onNavigate]);\n\n // Sync `activeIndex` to be the focused item while the floating element is\n // open.\n index(() => {\n if (!enabled) return;\n if (open && elements.floating) {\n if (activeIndex == null) {\n forceSyncFocus.current = false;\n if (selectedIndexRef.current != null) {\n return;\n }\n\n // Reset while the floating element was open (e.g. the list changed).\n if (previousMountedRef.current) {\n indexRef.current = -1;\n focusItem(listRef, indexRef);\n }\n\n // Initial sync.\n if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n let runs = 0;\n const waitForListPopulated = () => {\n if (listRef.current[0] == null) {\n // Avoid letting the browser paint if possible on the first try,\n // otherwise use rAF. Don't try more than twice, since something\n // is wrong otherwise.\n if (runs < 2) {\n const scheduler = runs ? requestAnimationFrame : queueMicrotask;\n scheduler(waitForListPopulated);\n }\n runs++;\n } else {\n indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinIndex(listRef, disabledIndicesRef.current) : getMaxIndex(listRef, disabledIndicesRef.current);\n keyRef.current = null;\n onNavigate(indexRef.current);\n }\n };\n waitForListPopulated();\n }\n } else if (!isIndexOutOfBounds(listRef, activeIndex)) {\n indexRef.current = activeIndex;\n focusItem(listRef, indexRef, forceScrollIntoViewRef.current);\n forceScrollIntoViewRef.current = false;\n }\n }\n }, [enabled, open, elements.floating, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, disabledIndicesRef]);\n\n // Ensure the parent floating element has focus when a nested child closes\n // to allow arrow key navigation to work after the pointer leaves the child.\n index(() => {\n var _nodes$find;\n if (!enabled || elements.floating || !tree || virtual || !previousMountedRef.current) {\n return;\n }\n const nodes = tree.nodesRef.current;\n const parent = (_nodes$find = nodes.find(node => node.id === parentId)) == null || (_nodes$find = _nodes$find.context) == null ? void 0 : _nodes$find.elements.floating;\n const activeEl = activeElement(getDocument(elements.floating));\n const treeContainsActiveEl = nodes.some(node => node.context && contains(node.context.elements.floating, activeEl));\n if (parent && !treeContainsActiveEl && isPointerModalityRef.current) {\n parent.focus({\n preventScroll: true\n });\n }\n }, [enabled, elements.floating, tree, parentId, virtual]);\n index(() => {\n if (!enabled) return;\n if (!tree) return;\n if (!virtual) return;\n if (parentId) return;\n function handleVirtualFocus(item) {\n setVirtualId(item.id);\n if (virtualItemRef) {\n virtualItemRef.current = item;\n }\n }\n tree.events.on('virtualfocus', handleVirtualFocus);\n return () => {\n tree.events.off('virtualfocus', handleVirtualFocus);\n };\n }, [enabled, tree, virtual, parentId, virtualItemRef]);\n index(() => {\n previousOnNavigateRef.current = onNavigate;\n previousMountedRef.current = !!elements.floating;\n });\n index(() => {\n if (!open) {\n keyRef.current = null;\n }\n }, [open]);\n index(() => {\n previousOpenRef.current = open;\n }, [open]);\n const hasActiveIndex = activeIndex != null;\n const item = React.useMemo(() => {\n function syncCurrentTarget(currentTarget) {\n if (!open) return;\n const index = listRef.current.indexOf(currentTarget);\n if (index !== -1) {\n onNavigate(index);\n }\n }\n const props = {\n onFocus(_ref) {\n let {\n currentTarget\n } = _ref;\n syncCurrentTarget(currentTarget);\n },\n onClick: _ref2 => {\n let {\n currentTarget\n } = _ref2;\n return currentTarget.focus({\n preventScroll: true\n });\n },\n // Safari\n ...(focusItemOnHover && {\n onMouseMove(_ref3) {\n let {\n currentTarget\n } = _ref3;\n syncCurrentTarget(currentTarget);\n },\n onPointerLeave(_ref4) {\n let {\n pointerType\n } = _ref4;\n if (!isPointerModalityRef.current || pointerType === 'touch') {\n return;\n }\n indexRef.current = -1;\n focusItem(listRef, indexRef);\n onNavigate(null);\n if (!virtual) {\n enqueueFocus(floatingFocusElementRef.current, {\n preventScroll: true\n });\n }\n }\n })\n };\n return props;\n }, [open, floatingFocusElementRef, focusItem, focusItemOnHover, listRef, onNavigate, virtual]);\n const commonOnKeyDown = useEffectEvent(event => {\n isPointerModalityRef.current = false;\n forceSyncFocus.current = true;\n\n // When composing a character, Chrome fires ArrowDown twice. Firefox/Safari\n // don't appear to suffer from this. `event.isComposing` is avoided due to\n // Safari not supporting it properly (although it's not needed in the first\n // place for Safari, just avoiding any possible issues).\n if (event.which === 229) {\n return;\n }\n\n // If the floating element is animating out, ignore navigation. Otherwise,\n // the `activeIndex` gets set to 0 despite not being open so the next time\n // the user ArrowDowns, the first item won't be focused.\n if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) {\n return;\n }\n if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl)) {\n stopEvent(event);\n onOpenChange(false, event.nativeEvent, 'list-navigation');\n if (isHTMLElement(elements.domReference)) {\n if (virtual) {\n tree == null || tree.events.emit('virtualfocus', elements.domReference);\n } else {\n elements.domReference.focus();\n }\n }\n return;\n }\n const currentIndex = indexRef.current;\n const minIndex = getMinIndex(listRef, disabledIndices);\n const maxIndex = getMaxIndex(listRef, disabledIndices);\n if (!typeableComboboxReference) {\n if (event.key === 'Home') {\n stopEvent(event);\n indexRef.current = minIndex;\n onNavigate(indexRef.current);\n }\n if (event.key === 'End') {\n stopEvent(event);\n indexRef.current = maxIndex;\n onNavigate(indexRef.current);\n }\n }\n\n // Grid navigation.\n if (cols > 1) {\n const sizes = itemSizes || Array.from({\n length: listRef.current.length\n }, () => ({\n width: 1,\n height: 1\n }));\n // To calculate movements on the grid, we use hypothetical cell indices\n // as if every item was 1x1, then convert back to real indices.\n const cellMap = buildCellMap(sizes, cols, dense);\n const minGridIndex = cellMap.findIndex(index => index != null && !isDisabled(listRef.current, index, disabledIndices));\n // last enabled index\n const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isDisabled(listRef.current, index, disabledIndices) ? cellIndex : foundIndex, -1);\n const index = cellMap[getGridNavigatedIndex({\n current: cellMap.map(itemIndex => itemIndex != null ? listRef.current[itemIndex] : null)\n }, {\n event,\n orientation,\n loop,\n rtl,\n cols,\n // treat undefined (empty grid spaces) as disabled indices so we\n // don't end up in them\n disabledIndices: getCellIndices([...(disabledIndices || listRef.current.map((_, index) => isDisabled(listRef.current, index) ? index : undefined)), undefined], cellMap),\n minIndex: minGridIndex,\n maxIndex: maxGridIndex,\n prevIndex: getCellIndexOfCorner(indexRef.current > maxIndex ? minIndex : indexRef.current, sizes, cellMap, cols,\n // use a corner matching the edge closest to the direction\n // we're moving in so we don't end up in the same item. Prefer\n // top/left over bottom/right.\n event.key === ARROW_DOWN ? 'bl' : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? 'tr' : 'tl'),\n stopEvent: true\n })];\n if (index != null) {\n indexRef.current = index;\n onNavigate(indexRef.current);\n }\n if (orientation === 'both') {\n return;\n }\n }\n if (isMainOrientationKey(event.key, orientation)) {\n stopEvent(event);\n\n // Reset the index if no item is focused.\n if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n onNavigate(indexRef.current);\n return;\n }\n if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n if (loop) {\n indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n });\n } else {\n indexRef.current = Math.min(maxIndex, findNonDisabledIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n }));\n }\n } else {\n if (loop) {\n indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n });\n } else {\n indexRef.current = Math.max(minIndex, findNonDisabledIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n }));\n }\n }\n if (isIndexOutOfBounds(listRef, indexRef.current)) {\n onNavigate(null);\n } else {\n onNavigate(indexRef.current);\n }\n }\n });\n const ariaActiveDescendantProp = React.useMemo(() => {\n return virtual && open && hasActiveIndex && {\n 'aria-activedescendant': virtualId || activeId\n };\n }, [virtual, open, hasActiveIndex, virtualId, activeId]);\n const floating = React.useMemo(() => {\n return {\n 'aria-orientation': orientation === 'both' ? undefined : orientation,\n ...(!isTypeableCombobox(elements.domReference) && ariaActiveDescendantProp),\n onKeyDown: commonOnKeyDown,\n onPointerMove() {\n isPointerModalityRef.current = true;\n }\n };\n }, [ariaActiveDescendantProp, commonOnKeyDown, elements.domReference, orientation]);\n const reference = React.useMemo(() => {\n function checkVirtualMouse(event) {\n if (focusItemOnOpen === 'auto' && isVirtualClick(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n function checkVirtualPointer(event) {\n // `pointerdown` fires first, reset the state then perform the checks.\n focusItemOnOpenRef.current = focusItemOnOpen;\n if (focusItemOnOpen === 'auto' && isVirtualPointerEvent(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n return {\n ...ariaActiveDescendantProp,\n onKeyDown(event) {\n isPointerModalityRef.current = false;\n const isArrowKey = event.key.startsWith('Arrow');\n const isHomeOrEndKey = ['Home', 'End'].includes(event.key);\n const isMoveKey = isArrowKey || isHomeOrEndKey;\n const isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n const isCrossCloseKey = isCrossOrientationCloseKey(event.key, orientation, rtl);\n const isMainKey = isMainOrientationKey(event.key, orientation);\n const isNavigationKey = (nested ? isCrossOpenKey : isMainKey) || event.key === 'Enter' || event.key.trim() === '';\n if (virtual && open) {\n const rootNode = tree == null ? void 0 : tree.nodesRef.current.find(node => node.parentId == null);\n const deepestNode = tree && rootNode ? getDeepestNode(tree.nodesRef.current, rootNode.id) : null;\n if (isMoveKey && deepestNode && virtualItemRef) {\n const eventObject = new KeyboardEvent('keydown', {\n key: event.key,\n bubbles: true\n });\n if (isCrossOpenKey || isCrossCloseKey) {\n var _deepestNode$context, _deepestNode$context2;\n const isCurrentTarget = ((_deepestNode$context = deepestNode.context) == null ? void 0 : _deepestNode$context.elements.domReference) === event.currentTarget;\n const dispatchItem = isCrossCloseKey && !isCurrentTarget ? (_deepestNode$context2 = deepestNode.context) == null ? void 0 : _deepestNode$context2.elements.domReference : isCrossOpenKey ? listRef.current.find(item => (item == null ? void 0 : item.id) === activeId) : null;\n if (dispatchItem) {\n stopEvent(event);\n dispatchItem.dispatchEvent(eventObject);\n setVirtualId(undefined);\n }\n }\n if ((isMainKey || isHomeOrEndKey) && deepestNode.context) {\n if (deepestNode.context.open && deepestNode.parentId && event.currentTarget !== deepestNode.context.elements.domReference) {\n var _deepestNode$context$;\n stopEvent(event);\n (_deepestNode$context$ = deepestNode.context.elements.domReference) == null || _deepestNode$context$.dispatchEvent(eventObject);\n return;\n }\n }\n }\n return commonOnKeyDown(event);\n }\n\n // If a floating element should not open on arrow key down, avoid\n // setting `activeIndex` while it's closed.\n if (!open && !openOnArrowKeyDown && isArrowKey) {\n return;\n }\n if (isNavigationKey) {\n keyRef.current = nested && isMainKey ? null : event.key;\n }\n if (nested) {\n if (isCrossOpenKey) {\n stopEvent(event);\n if (open) {\n indexRef.current = getMinIndex(listRef, disabledIndicesRef.current);\n onNavigate(indexRef.current);\n } else {\n onOpenChange(true, event.nativeEvent, 'list-navigation');\n }\n }\n return;\n }\n if (isMainKey) {\n if (selectedIndex != null) {\n indexRef.current = selectedIndex;\n }\n stopEvent(event);\n if (!open && openOnArrowKeyDown) {\n onOpenChange(true, event.nativeEvent, 'list-navigation');\n } else {\n commonOnKeyDown(event);\n }\n if (open) {\n onNavigate(indexRef.current);\n }\n }\n },\n onFocus() {\n if (open && !virtual) {\n onNavigate(null);\n }\n },\n onPointerDown: checkVirtualPointer,\n onMouseDown: checkVirtualMouse,\n onClick: checkVirtualMouse\n };\n }, [activeId, ariaActiveDescendantProp, commonOnKeyDown, disabledIndicesRef, focusItemOnOpen, listRef, nested, onNavigate, onOpenChange, open, openOnArrowKeyDown, orientation, rtl, selectedIndex, tree, virtual, virtualItemRef]);\n return React.useMemo(() => enabled ? {\n reference,\n floating,\n item\n } : {}, [enabled, reference, floating, item]);\n}\n\nconst componentRoleToAriaRoleMap = /*#__PURE__*/new Map([['select', 'listbox'], ['combobox', 'listbox'], ['label', false]]);\n\n/**\n * Adds base screen reader props to the reference and floating elements for a\n * given floating element `role`.\n * @see https://floating-ui.com/docs/useRole\n */\nfunction useRole(context, props) {\n var _componentRoleToAriaR;\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n floatingId\n } = context;\n const {\n enabled = true,\n role = 'dialog'\n } = props;\n const ariaRole = (_componentRoleToAriaR = componentRoleToAriaRoleMap.get(role)) != null ? _componentRoleToAriaR : role;\n const referenceId = useId();\n const parentId = useFloatingParentNodeId();\n const isNested = parentId != null;\n const reference = React.useMemo(() => {\n if (ariaRole === 'tooltip' || role === 'label') {\n return {\n [\"aria-\" + (role === 'label' ? 'labelledby' : 'describedby')]: open ? floatingId : undefined\n };\n }\n return {\n 'aria-expanded': open ? 'true' : 'false',\n 'aria-haspopup': ariaRole === 'alertdialog' ? 'dialog' : ariaRole,\n 'aria-controls': open ? floatingId : undefined,\n ...(ariaRole === 'listbox' && {\n role: 'combobox'\n }),\n ...(ariaRole === 'menu' && {\n id: referenceId\n }),\n ...(ariaRole === 'menu' && isNested && {\n role: 'menuitem'\n }),\n ...(role === 'select' && {\n 'aria-autocomplete': 'none'\n }),\n ...(role === 'combobox' && {\n 'aria-autocomplete': 'list'\n })\n };\n }, [ariaRole, floatingId, isNested, open, referenceId, role]);\n const floating = React.useMemo(() => {\n const floatingProps = {\n id: floatingId,\n ...(ariaRole && {\n role: ariaRole\n })\n };\n if (ariaRole === 'tooltip' || role === 'label') {\n return floatingProps;\n }\n return {\n ...floatingProps,\n ...(ariaRole === 'menu' && {\n 'aria-labelledby': referenceId\n })\n };\n }, [ariaRole, floatingId, referenceId, role]);\n const item = React.useCallback(_ref => {\n let {\n active,\n selected\n } = _ref;\n const commonProps = {\n role: 'option',\n ...(active && {\n id: floatingId + \"-option\"\n })\n };\n\n // For `menu`, we are unable to tell if the item is a `menuitemradio`\n // or `menuitemcheckbox`. For backwards-compatibility reasons, also\n // avoid defaulting to `menuitem` as it may overwrite custom role props.\n switch (role) {\n case 'select':\n return {\n ...commonProps,\n 'aria-selected': active && selected\n };\n case 'combobox':\n {\n return {\n ...commonProps,\n ...(active && {\n 'aria-selected': true\n })\n };\n }\n }\n return {};\n }, [floatingId, role]);\n return React.useMemo(() => enabled ? {\n reference,\n floating,\n item\n } : {}, [enabled, reference, floating, item]);\n}\n\n// Converts a JS style key like `backgroundColor` to a CSS transition-property\n// like `background-color`.\nconst camelCaseToKebabCase = str => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\nfunction execWithArgsOrReturn(valueOrFn, args) {\n return typeof valueOrFn === 'function' ? valueOrFn(args) : valueOrFn;\n}\nfunction useDelayUnmount(open, durationMs) {\n const [isMounted, setIsMounted] = React.useState(open);\n if (open && !isMounted) {\n setIsMounted(true);\n }\n React.useEffect(() => {\n if (!open && isMounted) {\n const timeout = setTimeout(() => setIsMounted(false), durationMs);\n return () => clearTimeout(timeout);\n }\n }, [open, isMounted, durationMs]);\n return isMounted;\n}\n/**\n * Provides a status string to apply CSS transitions to a floating element,\n * correctly handling placement-aware transitions.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstatus\n */\nfunction useTransitionStatus(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n elements: {\n floating\n }\n } = context;\n const {\n duration = 250\n } = props;\n const isNumberDuration = typeof duration === 'number';\n const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n const [status, setStatus] = React.useState('unmounted');\n const isMounted = useDelayUnmount(open, closeDuration);\n if (!isMounted && status === 'close') {\n setStatus('unmounted');\n }\n index(() => {\n if (!floating) return;\n if (open) {\n setStatus('initial');\n const frame = requestAnimationFrame(() => {\n setStatus('open');\n });\n return () => {\n cancelAnimationFrame(frame);\n };\n }\n setStatus('close');\n }, [open, floating]);\n return {\n isMounted,\n status\n };\n}\n/**\n * Provides styles to apply CSS transitions to a floating element, correctly\n * handling placement-aware transitions. Wrapper around `useTransitionStatus`.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstyles\n */\nfunction useTransitionStyles(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n initial: unstable_initial = {\n opacity: 0\n },\n open: unstable_open,\n close: unstable_close,\n common: unstable_common,\n duration = 250\n } = props;\n const placement = context.placement;\n const side = placement.split('-')[0];\n const fnArgs = React.useMemo(() => ({\n side,\n placement\n }), [side, placement]);\n const isNumberDuration = typeof duration === 'number';\n const openDuration = (isNumberDuration ? duration : duration.open) || 0;\n const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n const [styles, setStyles] = React.useState(() => ({\n ...execWithArgsOrReturn(unstable_common, fnArgs),\n ...execWithArgsOrReturn(unstable_initial, fnArgs)\n }));\n const {\n isMounted,\n status\n } = useTransitionStatus(context, {\n duration\n });\n const initialRef = useLatestRef(unstable_initial);\n const openRef = useLatestRef(unstable_open);\n const closeRef = useLatestRef(unstable_close);\n const commonRef = useLatestRef(unstable_common);\n index(() => {\n const initialStyles = execWithArgsOrReturn(initialRef.current, fnArgs);\n const closeStyles = execWithArgsOrReturn(closeRef.current, fnArgs);\n const commonStyles = execWithArgsOrReturn(commonRef.current, fnArgs);\n const openStyles = execWithArgsOrReturn(openRef.current, fnArgs) || Object.keys(initialStyles).reduce((acc, key) => {\n acc[key] = '';\n return acc;\n }, {});\n if (status === 'initial') {\n setStyles(styles => ({\n transitionProperty: styles.transitionProperty,\n ...commonStyles,\n ...initialStyles\n }));\n }\n if (status === 'open') {\n setStyles({\n transitionProperty: Object.keys(openStyles).map(camelCaseToKebabCase).join(','),\n transitionDuration: openDuration + \"ms\",\n ...commonStyles,\n ...openStyles\n });\n }\n if (status === 'close') {\n const styles = closeStyles || initialStyles;\n setStyles({\n transitionProperty: Object.keys(styles).map(camelCaseToKebabCase).join(','),\n transitionDuration: closeDuration + \"ms\",\n ...commonStyles,\n ...styles\n });\n }\n }, [closeDuration, closeRef, initialRef, openRef, commonRef, openDuration, status, fnArgs]);\n return {\n isMounted,\n styles\n };\n}\n\n/**\n * Provides a matching callback that can be used to focus an item as the user\n * types, often used in tandem with `useListNavigation()`.\n * @see https://floating-ui.com/docs/useTypeahead\n */\nfunction useTypeahead(context, props) {\n var _ref;\n const {\n open,\n dataRef\n } = context;\n const {\n listRef,\n activeIndex,\n onMatch: unstable_onMatch,\n onTypingChange: unstable_onTypingChange,\n enabled = true,\n findMatch = null,\n resetMs = 750,\n ignoreKeys = [],\n selectedIndex = null\n } = props;\n const timeoutIdRef = React.useRef();\n const stringRef = React.useRef('');\n const prevIndexRef = React.useRef((_ref = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref : -1);\n const matchIndexRef = React.useRef(null);\n const onMatch = useEffectEvent(unstable_onMatch);\n const onTypingChange = useEffectEvent(unstable_onTypingChange);\n const findMatchRef = useLatestRef(findMatch);\n const ignoreKeysRef = useLatestRef(ignoreKeys);\n index(() => {\n if (open) {\n clearTimeout(timeoutIdRef.current);\n matchIndexRef.current = null;\n stringRef.current = '';\n }\n }, [open]);\n index(() => {\n // Sync arrow key navigation but not typeahead navigation.\n if (open && stringRef.current === '') {\n var _ref2;\n prevIndexRef.current = (_ref2 = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref2 : -1;\n }\n }, [open, selectedIndex, activeIndex]);\n const setTypingChange = useEffectEvent(value => {\n if (value) {\n if (!dataRef.current.typing) {\n dataRef.current.typing = value;\n onTypingChange(value);\n }\n } else {\n if (dataRef.current.typing) {\n dataRef.current.typing = value;\n onTypingChange(value);\n }\n }\n });\n const onKeyDown = useEffectEvent(event => {\n function getMatchingIndex(list, orderedList, string) {\n const str = findMatchRef.current ? findMatchRef.current(orderedList, string) : orderedList.find(text => (text == null ? void 0 : text.toLocaleLowerCase().indexOf(string.toLocaleLowerCase())) === 0);\n return str ? list.indexOf(str) : -1;\n }\n const listContent = listRef.current;\n if (stringRef.current.length > 0 && stringRef.current[0] !== ' ') {\n if (getMatchingIndex(listContent, listContent, stringRef.current) === -1) {\n setTypingChange(false);\n } else if (event.key === ' ') {\n stopEvent(event);\n }\n }\n if (listContent == null || ignoreKeysRef.current.includes(event.key) ||\n // Character key.\n event.key.length !== 1 ||\n // Modifier key.\n event.ctrlKey || event.metaKey || event.altKey) {\n return;\n }\n if (open && event.key !== ' ') {\n stopEvent(event);\n setTypingChange(true);\n }\n\n // Bail out if the list contains a word like \"llama\" or \"aaron\". TODO:\n // allow it in this case, too.\n const allowRapidSuccessionOfFirstLetter = listContent.every(text => {\n var _text$, _text$2;\n return text ? ((_text$ = text[0]) == null ? void 0 : _text$.toLocaleLowerCase()) !== ((_text$2 = text[1]) == null ? void 0 : _text$2.toLocaleLowerCase()) : true;\n });\n\n // Allows the user to cycle through items that start with the same letter\n // in rapid succession.\n if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {\n stringRef.current = '';\n prevIndexRef.current = matchIndexRef.current;\n }\n stringRef.current += event.key;\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = setTimeout(() => {\n stringRef.current = '';\n prevIndexRef.current = matchIndexRef.current;\n setTypingChange(false);\n }, resetMs);\n const prevIndex = prevIndexRef.current;\n const index = getMatchingIndex(listContent, [...listContent.slice((prevIndex || 0) + 1), ...listContent.slice(0, (prevIndex || 0) + 1)], stringRef.current);\n if (index !== -1) {\n onMatch(index);\n matchIndexRef.current = index;\n } else if (event.key !== ' ') {\n stringRef.current = '';\n setTypingChange(false);\n }\n });\n const reference = React.useMemo(() => ({\n onKeyDown\n }), [onKeyDown]);\n const floating = React.useMemo(() => {\n return {\n onKeyDown,\n onKeyUp(event) {\n if (event.key === ' ') {\n setTypingChange(false);\n }\n }\n };\n }, [onKeyDown, setTypingChange]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nfunction getArgsWithCustomFloatingHeight(state, height) {\n return {\n ...state,\n rects: {\n ...state.rects,\n floating: {\n ...state.rects.floating,\n height\n }\n }\n };\n}\n/**\n * Positions the floating element such that an inner element inside of it is\n * anchored to the reference element.\n * @see https://floating-ui.com/docs/inner\n */\nconst inner = props => ({\n name: 'inner',\n options: props,\n async fn(state) {\n const {\n listRef,\n overflowRef,\n onFallbackChange,\n offset: innerOffset = 0,\n index = 0,\n minItemsVisible = 4,\n referenceOverflowThreshold = 0,\n scrollRef,\n ...detectOverflowOptions\n } = evaluate(props, state);\n const {\n rects,\n elements: {\n floating\n }\n } = state;\n const item = listRef.current[index];\n const scrollEl = (scrollRef == null ? void 0 : scrollRef.current) || floating;\n\n // Valid combinations:\n // 1. Floating element is the scrollRef and has a border (default)\n // 2. Floating element is not the scrollRef, floating element has a border\n // 3. Floating element is not the scrollRef, scrollRef has a border\n // Floating > {...getFloatingProps()} wrapper > scrollRef > items is not\n // allowed as VoiceOver doesn't work.\n const clientTop = floating.clientTop || scrollEl.clientTop;\n const floatingIsBordered = floating.clientTop !== 0;\n const scrollElIsBordered = scrollEl.clientTop !== 0;\n const floatingIsScrollEl = floating === scrollEl;\n if (process.env.NODE_ENV !== \"production\") {\n if (!state.placement.startsWith('bottom')) {\n warn('`placement` side must be \"bottom\" when using the `inner`', 'middleware.');\n }\n }\n if (!item) {\n return {};\n }\n const nextArgs = {\n ...state,\n ...(await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state))\n };\n const overflow = await detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n const refOverflow = await detectOverflow(nextArgs, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const diffY = max(0, overflow.top);\n const nextY = nextArgs.y + diffY;\n const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n const rounder = isScrollable ? v => v : round;\n const maxHeight = rounder(max(0, scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0) - diffY - max(0, overflow.bottom)));\n scrollEl.style.maxHeight = maxHeight + \"px\";\n scrollEl.scrollTop = diffY;\n\n // There is not enough space, fallback to standard anchored positioning\n if (onFallbackChange) {\n const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * min(minItemsVisible, listRef.current.length) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n ReactDOM.flushSync(() => onFallbackChange(shouldFallback));\n }\n if (overflowRef) {\n overflowRef.current = await detectOverflow(getArgsWithCustomFloatingHeight({\n ...nextArgs,\n y: nextY\n }, scrollEl.offsetHeight + clientTop + floating.clientTop), detectOverflowOptions);\n }\n return {\n y: nextY\n };\n }\n});\n/**\n * Changes the `inner` middleware's `offset` upon a `wheel` event to\n * expand the floating element's height, revealing more list items.\n * @see https://floating-ui.com/docs/inner\n */\nfunction useInnerOffset(context, props) {\n const {\n open,\n elements\n } = context;\n const {\n enabled = true,\n overflowRef,\n scrollRef,\n onChange: unstable_onChange\n } = props;\n const onChange = useEffectEvent(unstable_onChange);\n const controlledScrollingRef = React.useRef(false);\n const prevScrollTopRef = React.useRef(null);\n const initialOverflowRef = React.useRef(null);\n React.useEffect(() => {\n if (!enabled) return;\n function onWheel(e) {\n if (e.ctrlKey || !el || overflowRef.current == null) {\n return;\n }\n const dY = e.deltaY;\n const isAtTop = overflowRef.current.top >= -0.5;\n const isAtBottom = overflowRef.current.bottom >= -0.5;\n const remainingScroll = el.scrollHeight - el.clientHeight;\n const sign = dY < 0 ? -1 : 1;\n const method = dY < 0 ? 'max' : 'min';\n if (el.scrollHeight <= el.clientHeight) {\n return;\n }\n if (!isAtTop && dY > 0 || !isAtBottom && dY < 0) {\n e.preventDefault();\n ReactDOM.flushSync(() => {\n onChange(d => d + Math[method](dY, remainingScroll * sign));\n });\n } else if (/firefox/i.test(getUserAgent())) {\n // Needed to propagate scrolling during momentum scrolling phase once\n // it gets limited by the boundary. UX improvement, not critical.\n el.scrollTop += dY;\n }\n }\n const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n if (open && el) {\n el.addEventListener('wheel', onWheel);\n\n // Wait for the position to be ready.\n requestAnimationFrame(() => {\n prevScrollTopRef.current = el.scrollTop;\n if (overflowRef.current != null) {\n initialOverflowRef.current = {\n ...overflowRef.current\n };\n }\n });\n return () => {\n prevScrollTopRef.current = null;\n initialOverflowRef.current = null;\n el.removeEventListener('wheel', onWheel);\n };\n }\n }, [enabled, open, elements.floating, overflowRef, scrollRef, onChange]);\n const floating = React.useMemo(() => ({\n onKeyDown() {\n controlledScrollingRef.current = true;\n },\n onWheel() {\n controlledScrollingRef.current = false;\n },\n onPointerMove() {\n controlledScrollingRef.current = false;\n },\n onScroll() {\n const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n if (!overflowRef.current || !el || !controlledScrollingRef.current) {\n return;\n }\n if (prevScrollTopRef.current !== null) {\n const scrollDiff = el.scrollTop - prevScrollTopRef.current;\n if (overflowRef.current.bottom < -0.5 && scrollDiff < -1 || overflowRef.current.top < -0.5 && scrollDiff > 1) {\n ReactDOM.flushSync(() => onChange(d => d + scrollDiff));\n }\n }\n\n // [Firefox] Wait for the height change to have been applied.\n requestAnimationFrame(() => {\n prevScrollTopRef.current = el.scrollTop;\n });\n }\n }), [elements.floating, onChange, overflowRef, scrollRef]);\n return React.useMemo(() => enabled ? {\n floating\n } : {}, [enabled, floating]);\n}\n\nfunction isPointInPolygon(point, polygon) {\n const [x, y] = point;\n let isInside = false;\n const length = polygon.length;\n for (let i = 0, j = length - 1; i < length; j = i++) {\n const [xi, yi] = polygon[i] || [0, 0];\n const [xj, yj] = polygon[j] || [0, 0];\n const intersect = yi >= y !== yj >= y && x <= (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) {\n isInside = !isInside;\n }\n }\n return isInside;\n}\nfunction isInside(point, rect) {\n return point[0] >= rect.x && point[0] <= rect.x + rect.width && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n}\n/**\n * Generates a safe polygon area that the user can traverse without closing the\n * floating element once leaving the reference element.\n * @see https://floating-ui.com/docs/useHover#safepolygon\n */\nfunction safePolygon(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n buffer = 0.5,\n blockPointerEvents = false,\n requireIntent = true\n } = options;\n let timeoutId;\n let hasLanded = false;\n let lastX = null;\n let lastY = null;\n let lastCursorTime = performance.now();\n function getCursorSpeed(x, y) {\n const currentTime = performance.now();\n const elapsedTime = currentTime - lastCursorTime;\n if (lastX === null || lastY === null || elapsedTime === 0) {\n lastX = x;\n lastY = y;\n lastCursorTime = currentTime;\n return null;\n }\n const deltaX = x - lastX;\n const deltaY = y - lastY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const speed = distance / elapsedTime; // px / ms\n\n lastX = x;\n lastY = y;\n lastCursorTime = currentTime;\n return speed;\n }\n const fn = _ref => {\n let {\n x,\n y,\n placement,\n elements,\n onClose,\n nodeId,\n tree\n } = _ref;\n return function onMouseMove(event) {\n function close() {\n clearTimeout(timeoutId);\n onClose();\n }\n clearTimeout(timeoutId);\n if (!elements.domReference || !elements.floating || placement == null || x == null || y == null) {\n return;\n }\n const {\n clientX,\n clientY\n } = event;\n const clientPoint = [clientX, clientY];\n const target = getTarget(event);\n const isLeave = event.type === 'mouseleave';\n const isOverFloatingEl = contains(elements.floating, target);\n const isOverReferenceEl = contains(elements.domReference, target);\n const refRect = elements.domReference.getBoundingClientRect();\n const rect = elements.floating.getBoundingClientRect();\n const side = placement.split('-')[0];\n const cursorLeaveFromRight = x > rect.right - rect.width / 2;\n const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;\n const isOverReferenceRect = isInside(clientPoint, refRect);\n const isFloatingWider = rect.width > refRect.width;\n const isFloatingTaller = rect.height > refRect.height;\n const left = (isFloatingWider ? refRect : rect).left;\n const right = (isFloatingWider ? refRect : rect).right;\n const top = (isFloatingTaller ? refRect : rect).top;\n const bottom = (isFloatingTaller ? refRect : rect).bottom;\n if (isOverFloatingEl) {\n hasLanded = true;\n if (!isLeave) {\n return;\n }\n }\n if (isOverReferenceEl) {\n hasLanded = false;\n }\n if (isOverReferenceEl && !isLeave) {\n hasLanded = true;\n return;\n }\n\n // Prevent overlapping floating element from being stuck in an open-close\n // loop: https://github.com/floating-ui/floating-ui/issues/1910\n if (isLeave && isElement(event.relatedTarget) && contains(elements.floating, event.relatedTarget)) {\n return;\n }\n\n // If any nested child is open, abort.\n if (tree && getChildren(tree.nodesRef.current, nodeId).some(_ref2 => {\n let {\n context\n } = _ref2;\n return context == null ? void 0 : context.open;\n })) {\n return;\n }\n\n // If the pointer is leaving from the opposite side, the \"buffer\" logic\n // creates a point where the floating element remains open, but should be\n // ignored.\n // A constant of 1 handles floating point rounding errors.\n if (side === 'top' && y >= refRect.bottom - 1 || side === 'bottom' && y <= refRect.top + 1 || side === 'left' && x >= refRect.right - 1 || side === 'right' && x <= refRect.left + 1) {\n return close();\n }\n\n // Ignore when the cursor is within the rectangular trough between the\n // two elements. Since the triangle is created from the cursor point,\n // which can start beyond the ref element's edge, traversing back and\n // forth from the ref to the floating element can cause it to close. This\n // ensures it always remains open in that case.\n let rectPoly = [];\n switch (side) {\n case 'top':\n rectPoly = [[left, refRect.top + 1], [left, rect.bottom - 1], [right, rect.bottom - 1], [right, refRect.top + 1]];\n break;\n case 'bottom':\n rectPoly = [[left, rect.top + 1], [left, refRect.bottom - 1], [right, refRect.bottom - 1], [right, rect.top + 1]];\n break;\n case 'left':\n rectPoly = [[rect.right - 1, bottom], [rect.right - 1, top], [refRect.left + 1, top], [refRect.left + 1, bottom]];\n break;\n case 'right':\n rectPoly = [[refRect.right - 1, bottom], [refRect.right - 1, top], [rect.left + 1, top], [rect.left + 1, bottom]];\n break;\n }\n function getPolygon(_ref3) {\n let [x, y] = _ref3;\n switch (side) {\n case 'top':\n {\n const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.bottom - buffer : isFloatingWider ? rect.bottom - buffer : rect.top], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.bottom - buffer : rect.top : rect.bottom - buffer]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n case 'bottom':\n {\n const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.top + buffer : isFloatingWider ? rect.top + buffer : rect.bottom], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.top + buffer : rect.bottom : rect.top + buffer]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n case 'left':\n {\n const cursorPointOne = [x + buffer + 1, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const cursorPointTwo = [x + buffer + 1, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const commonPoints = [[cursorLeaveFromBottom ? rect.right - buffer : isFloatingTaller ? rect.right - buffer : rect.left, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.right - buffer : rect.left : rect.right - buffer, rect.bottom]];\n return [...commonPoints, cursorPointOne, cursorPointTwo];\n }\n case 'right':\n {\n const cursorPointOne = [x - buffer, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const cursorPointTwo = [x - buffer, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const commonPoints = [[cursorLeaveFromBottom ? rect.left + buffer : isFloatingTaller ? rect.left + buffer : rect.right, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.left + buffer : rect.right : rect.left + buffer, rect.bottom]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n }\n }\n if (isPointInPolygon([clientX, clientY], rectPoly)) {\n return;\n }\n if (hasLanded && !isOverReferenceRect) {\n return close();\n }\n if (!isLeave && requireIntent) {\n const cursorSpeed = getCursorSpeed(event.clientX, event.clientY);\n const cursorSpeedThreshold = 0.1;\n if (cursorSpeed !== null && cursorSpeed < cursorSpeedThreshold) {\n return close();\n }\n }\n if (!isPointInPolygon([clientX, clientY], getPolygon([x, y]))) {\n close();\n } else if (!hasLanded && requireIntent) {\n timeoutId = window.setTimeout(close, 40);\n }\n };\n };\n fn.__options = {\n blockPointerEvents\n };\n return fn;\n}\n\nexport { Composite, CompositeItem, FloatingArrow, FloatingDelayGroup, FloatingFocusManager, FloatingList, FloatingNode, FloatingOverlay, FloatingPortal, FloatingTree, inner, safePolygon, useClick, useClientPoint, useDelayGroup, useDelayGroupContext, useDismiss, useFloating, useFloatingNodeId, useFloatingParentNodeId, useFloatingPortalNode, useFloatingRootContext, useFloatingTree, useFocus, useHover, useId, useInnerOffset, useInteractions, useListItem, useListNavigation, useMergeRefs, useRole, useTransitionStatus, useTransitionStyles, useTypeahead };\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n autoUpdate,\n flip,\n inline,\n offset,\n shift,\n useFloating,\n} from '@floating-ui/react';\nimport { useYooptaEditor, useYooptaPluginOptions } from '@yoopta/editor';\n\nimport { MentionCommands } from '../commands';\nimport type {\n MentionCloseEvent,\n MentionItem,\n MentionPluginOptions,\n MentionState,\n UseMentionDropdownOptions,\n UseMentionDropdownReturn,\n} from '../types';\nimport { INITIAL_MENTION_STATE } from '../types';\n\n/**\n * Hook for building mention dropdown UI\n * Provides state, actions, and floating-ui refs\n */\nexport function useMentionDropdown<TMeta = Record<string, unknown>>(\n options: UseMentionDropdownOptions = {},\n): UseMentionDropdownReturn<TMeta> {\n const editor = useYooptaEditor();\n const pluginOptions = useYooptaPluginOptions<MentionPluginOptions<TMeta>>('Mention');\n\n // Local state for items/loading\n const [items, setItems] = useState<MentionItem<TMeta>[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n // Track mention state from editor\n const [mentionState, setMentionState] = useState<MentionState>(INITIAL_MENTION_STATE);\n\n // Debounce timer ref\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const lastQueryRef = useRef<string>('');\n\n // Debounce settings\n const debounceMs = options.debounceMs ?? pluginOptions?.debounceMs ?? 300;\n const minQueryLength = pluginOptions?.minQueryLength ?? 0;\n\n // Floating UI setup\n const { refs, floatingStyles } = useFloating({\n placement: 'bottom-start',\n open: mentionState.isOpen,\n middleware: [inline(), flip(), shift({ padding: 8 }), offset(4)],\n whileElementsMounted: autoUpdate,\n });\n\n // Sync editor mention state to local state\n useEffect(() => {\n const handleMentionOpen = () => {\n setMentionState({ ...editor.mentions.state });\n setSelectedIndex(0);\n setItems([]);\n setError(null);\n };\n\n const handleMentionClose = () => {\n setMentionState({ ...INITIAL_MENTION_STATE });\n setItems([]);\n setSelectedIndex(0);\n setError(null);\n };\n\n const handleQueryChange = () => {\n setMentionState({ ...editor.mentions.state });\n };\n\n editor.on('mention:open', handleMentionOpen);\n editor.on('mention:close', handleMentionClose);\n editor.on('mention:query-change', handleQueryChange);\n\n return () => {\n editor.off('mention:open', handleMentionOpen);\n editor.off('mention:close', handleMentionClose);\n editor.off('mention:query-change', handleQueryChange);\n };\n }, [editor]);\n\n // Update floating reference when target changes\n useEffect(() => {\n if (mentionState.targetRect) {\n refs.setReference({\n getBoundingClientRect: () => mentionState.targetRect!.domRect,\n getClientRects: () => mentionState.targetRect!.clientRects,\n });\n }\n }, [mentionState.targetRect, refs]);\n\n // Fetch items when query changes\n useEffect(() => {\n if (!mentionState.isOpen || !pluginOptions?.onSearch) return;\n\n const query = mentionState.query;\n const trigger = mentionState.trigger;\n\n // Skip if query is same as last\n if (query === lastQueryRef.current && items.length > 0) return;\n lastQueryRef.current = query;\n\n // Check min query length\n if (query.length < minQueryLength) {\n setItems([]);\n return;\n }\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Debounce search\n debounceTimerRef.current = setTimeout(async () => {\n if (!trigger) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const results = await pluginOptions?.onSearch?.(query, trigger);\n setItems(results as MentionItem<TMeta>[]);\n setSelectedIndex(0);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Search failed'));\n setItems([]);\n } finally {\n setLoading(false);\n }\n }, debounceMs);\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [mentionState.isOpen, mentionState.query, mentionState.trigger, pluginOptions, debounceMs, minQueryLength, items.length]);\n\n // Select item action\n const selectItem = useCallback(\n (item: MentionItem<TMeta>) => {\n MentionCommands.insertMention(editor, item, { focus: true });\n },\n [editor],\n );\n\n // Close action\n const close = useCallback(\n (reason: MentionCloseEvent['reason'] = 'manual') => {\n MentionCommands.closeDropdown(editor, reason);\n },\n [editor],\n );\n\n // Keyboard navigation\n useEffect(() => {\n if (!mentionState.isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex((prev) => (prev + 1) % Math.max(items.length, 1));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex((prev) => (prev - 1 + Math.max(items.length, 1)) % Math.max(items.length, 1));\n break;\n case 'Enter':\n e.preventDefault();\n if (items[selectedIndex]) {\n selectItem(items[selectedIndex]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n close('escape');\n break;\n case 'Tab':\n // Close on tab\n close('escape');\n break;\n\n default:\n break;\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [mentionState.isOpen, items, selectedIndex, selectItem, close]);\n\n // Click outside to close\n useEffect(() => {\n if (!mentionState.isOpen) return;\n if (pluginOptions?.closeOnClickOutside === false) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n const floatingEl = refs.floating.current;\n if (floatingEl && !floatingEl.contains(e.target as Node)) {\n close('click-outside');\n }\n };\n\n // Delay to avoid immediate close\n const timer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n }, 0);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [mentionState.isOpen, refs.floating, close, pluginOptions?.closeOnClickOutside]);\n\n return useMemo(\n () => ({\n // State\n isOpen: mentionState.isOpen,\n query: mentionState.query,\n trigger: mentionState.trigger,\n\n // Results\n items,\n loading,\n error,\n\n // Navigation\n selectedIndex,\n setSelectedIndex,\n\n // Actions\n selectItem,\n close,\n\n // Refs\n refs: {\n setFloating: refs.setFloating,\n setReference: refs.setReference,\n },\n floatingStyles,\n }),\n [\n mentionState.isOpen,\n mentionState.query,\n mentionState.trigger,\n items,\n loading,\n error,\n selectedIndex,\n selectItem,\n close,\n refs.setFloating,\n refs.setReference,\n floatingStyles,\n ],\n );\n}\n","import type { MentionItem as MentionItemType } from '@yoopta/mention';\n\nimport { MentionAvatar } from './mention-avatar';\nimport { cn } from '../../../utils';\nimport { DEFAULT_TYPE_COLORS } from '../../types';\n\ntype MentionItemProps<TMeta = Record<string, unknown>> = {\n item: MentionItemType<TMeta>;\n selected: boolean;\n onSelect: () => void;\n onMouseEnter?: () => void;\n showTypeBadge?: boolean;\n};\n\nexport const MentionItem = (props: MentionItemProps) => {\n const { item, selected, onSelect, onMouseEnter, showTypeBadge = true } = props;\n const typeColor = item.type ? DEFAULT_TYPE_COLORS[item.type] ?? DEFAULT_TYPE_COLORS.custom : null;\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n onMouseEnter={onMouseEnter}\n className={cn(\n 'w-full flex items-center gap-2 px-2 py-1.5 text-left rounded-sm transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus:outline-none focus:bg-accent focus:text-accent-foreground',\n selected && 'bg-accent text-accent-foreground',\n )}>\n <MentionAvatar name={item.name} avatar={item.avatar} size=\"sm\" />\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"font-medium text-sm truncate\">{item.name}</span>\n {showTypeBadge && item.type && (\n <span className={cn('text-[10px] px-1.5 py-0.5 rounded-full font-medium', typeColor)}>\n {item.type}\n </span>\n )}\n </div>\n {item.meta && typeof item.meta === 'object' && 'description' in item.meta && (\n <p className=\"text-xs text-muted-foreground truncate\">\n {String((item.meta as { description?: string }).description)}\n </p>\n )}\n </div>\n </button>\n );\n};\n","import { useEffect, useRef } from 'react';\nimport { useMentionDropdown } from '@yoopta/mention';\n\nimport { MentionItem } from './mention-item';\nimport { ScrollArea } from '../../../ui/scroll-area';\nimport { cn } from '../../../utils';\n\ntype MentionDropdownProps = {\n showTypeBadge?: boolean;\n maxHeight?: number;\n className?: string;\n};\n\nexport const MentionDropdown = ({\n showTypeBadge = true,\n maxHeight = 280,\n className,\n}: MentionDropdownProps) => {\n const {\n isOpen,\n query,\n trigger,\n items,\n loading,\n error,\n selectedIndex,\n setSelectedIndex,\n selectItem,\n refs,\n floatingStyles,\n } = useMentionDropdown();\n\n const listRef = useRef<HTMLDivElement>(null);\n const selectedRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (selectedRef.current && listRef.current) {\n selectedRef.current.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n }, [selectedIndex]);\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={refs.setFloating}\n style={floatingStyles}\n className={cn(\n 'z-50 min-w-[220px] max-w-[320px] rounded-md border bg-popover text-popover-foreground shadow-md',\n 'animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}>\n {query && (\n <div className=\"px-3 py-2 border-b\">\n <p className=\"text-xs text-muted-foreground\">\n Searching for &ldquo;{trigger?.char}\n <span className=\"font-medium text-foreground\">{query}</span>&rdquo;\n </p>\n </div>\n )}\n\n {loading && (\n <div className=\"p-2 space-y-1\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-2 px-2 py-1.5 animate-pulse\">\n <div className=\"w-6 h-6 rounded-full bg-muted\" />\n <div className=\"flex-1 space-y-1\">\n <div className=\"h-3 w-24 rounded bg-muted\" />\n <div className=\"h-2 w-16 rounded bg-muted\" />\n </div>\n </div>\n ))}\n </div>\n )}\n\n {error && !loading && (\n <div className=\"px-3 py-4 text-center\">\n <p className=\"text-sm text-destructive\">{error.message}</p>\n </div>\n )}\n\n {!loading && !error && items.length === 0 && (\n <div className=\"px-3 py-4 text-center\">\n <p className=\"text-sm text-muted-foreground\">\n {query ? 'No results found' : 'Type to search...'}\n </p>\n </div>\n )}\n\n {!loading && !error && items.length > 0 && (\n <ScrollArea style={{ maxHeight, overflowY: 'auto' }} className=\"p-1\">\n <div ref={listRef} role=\"listbox\" aria-label=\"Mention suggestions\">\n {items.map((item, index) => (\n <div\n key={item.id}\n ref={index === selectedIndex ? selectedRef : undefined}\n role=\"option\"\n aria-selected={index === selectedIndex}>\n <MentionItem\n item={item}\n selected={index === selectedIndex}\n onSelect={() => selectItem(item)}\n onMouseEnter={() => setSelectedIndex(index)}\n showTypeBadge={showTypeBadge}\n />\n </div>\n ))}\n </div>\n </ScrollArea>\n )}\n\n {items.length > 0 && (\n <div className=\"px-3 py-1.5 border-t text-[10px] text-muted-foreground flex items-center gap-2\">\n <span>\n <kbd className=\"px-1 py-0.5 rounded bg-muted text-[9px]\">↑↓</kbd> navigate\n </span>\n <span>\n <kbd className=\"px-1 py-0.5 rounded bg-muted text-[9px]\">↵</kbd> select\n </span>\n <span>\n <kbd className=\"px-1 py-0.5 rounded bg-muted text-[9px]\">esc</kbd> close\n </span>\n </div>\n )}\n </div>\n );\n}\n","import { MentionElement } from './elements/mention/mention-element';\n\nexport { MentionDropdown } from './elements/mention/mention-dropdown';\nexport { MentionItem } from './elements/mention/mention-item';\nexport { MentionAvatar } from './elements/mention/mention-avatar';\nexport { MentionElement } from './elements/mention/mention-element';\nexport type { MentionThemeConfig, MentionItemRenderProps } from './types';\n\nexport const MentionUI = {\n mention: {\n render: MentionElement,\n },\n};\n"],"names":["_jsx","copy","_jsxs","_Fragment","Path","ancestors","path","options","arguments","length","undefined","reverse","paths","levels","slice","common","another","i","av","bv","push","compare","min","Math","endsAfter","as","bs","equals","endsAt","endsBefore","every","n","hasPrevious","isAfter","isAncestor","isBefore","isChild","isCommon","isDescendant","isParent","isPath","value","Array","isArray","isSibling","al","bl","list","next","Error","concat","last","operationCanTransformPath","operation","type","parent","previous","relative","ancestor","transform","p","affinity","op","position","newPath","onp","_typeof","_toPrimitive","_toPropertyKey","toPrimitive","_defineProperty","toPropertyKey","objectWithoutPropertiesLoose","Range","edges","range","anchor","focus","isBackward","end","Point","surrounds","target","intersectionRange","intersection","includes","isRange","rs","re","ts","te","start","isAfterStart","isBeforeEnd","isPoint","rest","_objectWithoutProperties","_excluded","s1","e1","s2","e2","_objectSpread","isCollapsed","isExpanded","isForward","isObject","points","affinityAnchor","affinityFocus","isElement","deep","isEditor","apply","isChildrenValid","Node","isNodeList","children","Element","isElementList","val","isElementProps","props","isElementType","elementVal","elementKey","matches","element","key","root","node","get","Text","isText","Scrubber","stringify","entry","child","index","c","childPath","descendant","Editor","descendants","nodes","elements","extractProps","properties","_excluded2","first","fragment","newRoot","nodeEntries","pass","_ref","_loop","modifyChildren","removeChildren","modifyLeaf","before","text","offset","getIf","has","isNode","leaf","isTextProps","from","to","visited","Set","add","nextIndex","parentPath","string","map","join","texts","Operation","isNodeOperation","isOperation","endsWith","newProperties","isOperationList","isSelectionOperation","isTextOperation","inverse","inversePath","inverseNewPath","isDeepEqual","a","b","getDefaultInsertLocation","editor","selection","CodepointType","L","V","LV","LVT","T","Any","Extend","ZWJ","SpacingMark","Prepend","ExtPict","RI","addMark","deleteFragment","insertBreak","insertSoftBreak","insertFragment","insertNode","insertText","isElementReadOnly","isInline","isSelectable","isVoid","normalizeNode","onChange","removeMark","getDirtyPaths","marks","operations","above","after","at","deleteBackward","unit","deleteForward","elementReadOnly","hasBlocks","hasInlines","hasPath","hasTexts","isBlock","isEdge","point","isEmpty","isEnd","isNormalizing","isStart","getMarks","normalize","pathRef","pathRefs","pointRef","pointRefs","positions","rangeRef","rangeRefs","setNormalizing","unhangRange","void","withoutNormalizing","fn","shouldMergeNodesRemovePrevNode","prevNode","curNode","result","_scrubber","setScrubber","scrubber","JSON","loose","omitText","obj","isTextList","hasOwnProperty","decorations","leaves","dec","merge","mergeDecoration","leafEnd","decorationStart","decorationEnd","Object","assign","leafStart","middle","off","currentOffset","item","entries","isFirst","isLast","insertChildren","xs","_len","newValues","_key","replaceChildren","removeCount","_len2","_key2","modifyDescendant","f","slicedPath","modifiedNode","pop","ancestorNode","GeneralTransforms","transformSelection","prevPath","prevIndex","prev","newNode","truePath","newIndex","preferNext","nextNode","NodeTransforms","insertNodes","liftNodes","mergeNodes","moveNodes","removeNodes","setNodes","splitNodes","unsetNodes","unwrapNodes","wrapNodes","SelectionTransforms","collapse","deselect","move","select","setPoint","setSelection","TextTransforms","delete","voids","startRef","endRef","Transforms","startPoint","unref","endPoint","freeGlobal","global","require$$0","Symbol","DOMNode","globalThis","DOMText","getDefaultView","ownerDocument","defaultView","isDOMComment","isDOMNode","nodeType","isDOMElement","window","isDOMSelection","anchorNode","Selection","normalizeDOMPoint","domPoint","childNodes","getEditableChildAndIndex","getEditableChild","textContent","hasShadowRoot","parentNode","toString","direction","triedForward","triedBackward","getAttribute","getSelection","document","isTrackedMutation","mutation","batch","DOMEditor","getWindow","containsShadowAware","hasDOMNode","editable","parentMutation","find","addedNodes","removedNodes","otherNode","Boolean","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_FOLLOWING","closestShadowAware","selector","current","parentElement","host","contains","IS_APPLE","navigator","test","userAgent","IS_ANDROID","IS_FIREFOX","IS_CHROME","_navigator$userAgent$","match","parseInt","_navigator$userAgent$2","Key","constructor","id","NODE_TO_INDEX","WeakMap","NODE_TO_PARENT","EDITOR_TO_WINDOW","EDITOR_TO_ELEMENT","ELEMENT_TO_NODE","NODE_TO_KEY","EDITOR_TO_KEY_TO_ELEMENT","IS_READ_ONLY","IS_FOCUSED","IS_COMPOSING","EDITOR_TO_SCHEDULE_FLUSH","EDITOR_TO_PENDING_DIFFS","androidPendingDiffs","androidScheduleFlush","_EDITOR_TO_SCHEDULE_F","blur","el","toDOMNode","findDocumentOrShadowRoot","set","activeElement","domSelection","rangeCount","removeAllRanges","getRootNode","Document","ShadowRoot","findEventRange","event","nativeEvent","clientX","x","clientY","y","toSlateNode","findPath","rect","getBoundingClientRect","isPrev","left","width","top","height","edge","domRange","caretRangeFromPoint","caretPositionFromPoint","createRange","setStart","offsetNode","setEnd","toSlateRange","exactMatch","suppressThrow","findKey","unshift","retries","setTimeout","toDOMRange","addRange","preventScroll","editorEl","targetEl","err","message","isContentEditable","hasEditableTarget","hasRange","hasSelectableTarget","isTargetInsideNonReadonlyVoid","hasTarget","insertData","data","insertFragmentData","insertTextData","isComposing","isFocused","isReadOnly","slateNode","setFragmentData","originEvent","KEY_TO_ELEMENT","domNode","toDOMPoint","querySelectorAll","attr","trueLength","nextText","hasAttribute","_nextText$textContent","domText","startsWith","max","domAnchor","domFocus","startNode","startOffset","endNode","endOffset","startEl","isStartAtZeroWidth","endEl","isEndAtZeroWidth","domEl","closest","toSlatePoint","searchDirection","nearestNode","nearestOffset","textNode","_domNode$textContent","_domNode$textContent2","potentialVoidNode","voidNode","potentialNonEditableNode","nonEditableNode","leafNode","contents","cloneContents","removals","prototype","call","forEach","textContext","removeChild","leafNodes","getLeafNodes","elementNode","_leafNodes$findLast","previousElementSibling","findLast","_leafNodes2$find","nextElementSibling","querySelector","_focusNode$textConten","startContainer","anchorOffset","focusNode","focusOffset","firstRange","getRangeAt","lastRange","HTMLTableRowElement","getLastChildren","childElementCount","firstNodeRow","lastNodeRow","firstNode","lastNode","HTMLElement","innerHTML","endContainer","collapsed","focusBeforeAnchor","mode","HOTKEYS","bold","compose","moveBackward","moveForward","moveWordBackward","moveWordForward","extendBackward","extendForward","italic","splitBlock","undo","APPLE_HOTKEYS","moveLineBackward","moveLineForward","deleteLineBackward","deleteLineForward","deleteWordBackward","deleteWordForward","extendLineBackward","extendLineForward","redo","transposeCharacter","WINDOWS_HOTKEYS","create","generic","apple","windows","isGeneric","isHotkey","isApple","isWindows","isBold","isCompose","isMoveBackward","isMoveForward","isDeleteBackward","isDeleteForward","isDeleteLineBackward","isDeleteLineForward","isDeleteWordBackward","isDeleteWordForward","isExtendBackward","isExtendForward","isExtendLineBackward","isExtendLineForward","isItalic","isMoveLineBackward","isMoveLineForward","isMoveWordBackward","isMoveWordForward","isRedo","isSoftBreak","isSplitBlock","isTransposeCharacter","isUndo","EditorContext","createContext","ReactEditor","createRestoreDomManager","receivedUserInput","bufferedMutations","clear","registerMutations","mutations","trackedMutations","filter","restoreDOM","insertBefore","nextSibling","MUTATION_OBSERVER_CONFIG","subtree","childList","characterData","characterDataOldValue","RestoreDOMComponent","Component","observe","_this$mutationObserve","mutationObserver","componentDidMount","context","manager","MutationObserver","getSnapshotBeforeUpdate","_this$mutationObserve2","_this$mutationObserve3","_this$manager2","pendingMutations","takeRecords","_this$manager","disconnect","componentDidUpdate","_this$manager3","componentWillUnmount","_this$mutationObserve4","render","React","version","split","getComputedStyle","computePosition","flip","inline","shift","offset$1","shift$1","flip$1","inline$1","useFloating"],"mappings":"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","x_google_ignoreList":[0,1,2,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65]}