ct-rich-text-editor 1.2.5 → 1.2.7

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-c98eb13a.js","sources":["../src/context/HtmlViewContext.tsx","../src/api/auth.ts","../src/Provider/EditorProvider.tsx","../src/editorConfig.ts","../src/api/config/axios.ts","../src/api/config/endpoints.ts","../src/api/ai/index.ts","../src/nodes/ImageNode.tsx","../src/utils/helper.ts","../src/components/AiPlugin/index.tsx","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_trimmedEndIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTrim.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toNumber.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/now.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/debounce.js","../src/components/CodeActionMenuPlugin/utils.ts","../src/components/CodeActionMenuPlugin/components/CopyButton/index.tsx","../src/components/CodeActionMenuPlugin/components/PrettierButton/index.tsx","../src/components/CodeActionMenuPlugin/index.tsx","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/alert-circle.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/alert-triangle.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/align-center.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/align-justify.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/align-left.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/align-right.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/check-circle.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/check.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-up.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/clock.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/code.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/corner-down-left.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file-code-2.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/heading-1.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/heading-2.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/heading-3.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/heading-4.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/heading-5.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/heading-6.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/highlighter.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/info.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/lightbulb.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/message-square.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/minus.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/more-horizontal.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/paperclip.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/pen-line.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/pen.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/quote.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/reply.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/sparkles.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/sticky-note.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/subscript.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/superscript.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/text.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash-2.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/type.js","../../../node_modules/.pnpm/lucide-react@0.344.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js","../src/context/CommentContext.tsx","../src/nodes/CommentedTextNode.tsx","../../../node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-context/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-slot@1.1.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-primitive@2.0.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18_sejcxqoscaweil2bvgwwavaoha/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-avatar@1.1.3_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3._yu5hhcfjqf7c3r4w6t4dqx4u3m/node_modules/@radix-ui/react-avatar/dist/index.mjs","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.pnpm/tailwind-merge@3.0.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/avatar.tsx","../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../src/components/ui/badge.tsx","../../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-slot@1.2.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-slot/dist/index.mjs","../src/components/ui/button.tsx","../src/components/ui/card.tsx","../../../node_modules/.pnpm/@radix-ui+react-separator@1.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18_vz6sl6hxokhvhvfbon337b345i/node_modules/@radix-ui/react-separator/dist/index.mjs","../src/components/ui/separator.tsx","../../../node_modules/.pnpm/@radix-ui+primitive@1.1.1/node_modules/@radix-ui/primitive/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-id@1.1.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-id/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.1.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.5_@types+react-dom@18.3.5_@types+react@18.3.18__@types+_nitdfoqpcbroetgllwgz3is5ai/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@_fadkqkpo6fm4ufegukbxon2hs4/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-portal@1.1.4_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3._ulc3jfxcmrz2rfz7bui53djdtu/node_modules/@radix-ui/react-portal/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18._pqwkltkxenlrsgmgun6icjiigu/node_modules/@radix-ui/react-presence/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@18.3.18_react@18.3.1/node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@18.3.18_react@18.3.1/node_modules/use-callback-ref/dist/es2015/useRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@18.3.18_react@18.3.1/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@18.3.18_react@18.3.1/node_modules/use-sidecar/dist/es2015/medium.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@18.3.18_react@18.3.1/node_modules/use-sidecar/dist/es2015/exports.js","../../../node_modules/.pnpm/react-remove-scroll@2.6.3_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/medium.js","../../../node_modules/.pnpm/react-remove-scroll@2.6.3_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/UI.js","../../../node_modules/.pnpm/get-nonce@1.0.1/node_modules/get-nonce/dist/es2015/index.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@18.3.18_react@18.3.1/node_modules/react-style-singleton/dist/es2015/singleton.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@18.3.18_react@18.3.1/node_modules/react-style-singleton/dist/es2015/hook.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@18.3.18_react@18.3.1/node_modules/react-style-singleton/dist/es2015/component.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../node_modules/.pnpm/react-remove-scroll@2.6.3_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../node_modules/.pnpm/react-remove-scroll@2.6.3_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../node_modules/.pnpm/react-remove-scroll@2.6.3_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../node_modules/.pnpm/react-remove-scroll@2.6.3_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../node_modules/.pnpm/react-remove-scroll@2.6.3_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../node_modules/.pnpm/aria-hidden@1.2.4/node_modules/aria-hidden/dist/es2015/index.js","../../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.6_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3._tj6htj5pmg2es74uknz4aewlhy/node_modules/@radix-ui/react-dialog/dist/index.mjs","../src/components/ui/sheet.tsx","../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@1_tagbd57u5fsqga6qdjecsll7fm/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-direction/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react_ki7uy4u3diz5446cqygvbjwuge/node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-tabs@1.1.3_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3.18_6ckgp3tkihixcw23rfuy4coqt4/node_modules/@radix-ui/react-tabs/dist/index.mjs","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx","../src/components/CommentSidebar/CommentSidebar.tsx","../../../node_modules/.pnpm/@floating-ui+utils@0.2.9/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.6.9/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.9/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.6.13/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/.pnpm/@floating-ui+react-dom@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../node_modules/.pnpm/@radix-ui+react-arrow@1.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3.1_x6p6stvosyj5xtena3xfahoytu/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-size/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-popper@1.2.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3._vskr4u3q77jmhehtw5db7awfeq/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+re_omyrydx3gc2oidaiqb4gsovieq/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.1.8_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3_zlakc5i4tpx4eat4ixff5zh6tq/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../src/components/ui/tooltip.tsx","../src/components/CommentToggle/CommentToggle.tsx","../src/components/HtmlViewDisplay.tsx","../src/components/CommentView/CommentView.tsx","../src/nodes/CommentNode.tsx","../src/nodes/EmbedNode.tsx","../src/nodes/MentionNode.ts","../src/components/NotePanelView/NotePanelView.tsx","../src/nodes/NotePanelNode.tsx","../src/plugins/CustomHorizontalRulePlugin/CustomHorizontalRuleNode.tsx","../src/plugins/CustomHorizontalRulePlugin/CustomHorizontalRulePlugin.tsx","../src/components/ui/dialog.tsx","../src/components/ui/input.tsx","../../../node_modules/.pnpm/@radix-ui+react-label@2.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3.1_2cqdrul4wd4nqxmfcrqwokv4ti/node_modules/@radix-ui/react-label/dist/index.mjs","../src/components/ui/label.tsx","../src/plugins/CustomHorizontalRulePlugin/HorizontalRuleCustomizationDialog.tsx","../src/styles/PlaygroundEditorTheme.ts","../src/ui/Icons.tsx","../src/constants.tsx","../src/context/ToolbarContext.tsx","../src/hooks/useCustomCommands.ts","../src/utils/getSelectedNode.ts","../src/hooks/useEditorToolbar.ts","../src/plugins/AIChatPlugin.tsx","../src/plugins/TablePlugin.tsx","../src/api/transcript/index.ts","../src/plugins/VoiceTranscriptPlugin.tsx","../src/utils/url.ts","../src/hooks/useColorPicker.ts","../../../node_modules/.pnpm/@radix-ui+react-menu@2.1.6_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3.18_axhjfyng3d254sxapu4or3ut5e/node_modules/@radix-ui/react-menu/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.6_@types+react-dom@18.3.5_@types+react@18.3.18__@types+reac_uitznd7fbts7e2qmp4q343v7yi/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs","../src/components/ui/dropdown-menu.tsx","../src/components/AlignMenu/AlignMenu.tsx","../src/hooks/useBlockFormat.tsx","../src/components/BlockFormatMenu/BlockFormatMenu.tsx","../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-colorful/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+primitive@1.1.2/node_modules/@radix-ui/primitive/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-context@1.1.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-context/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.2_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18_auhtgb76jjknvcx6iu3t7zh36q/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.9_@types+react-dom@18.3.5_@types+react@18.3.18__@types+_o4n3e6rnwef4jr7bvngo73izxu/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.6_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@_ck2vjxrmrajpowdtni6sw74lxi/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-id@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-id/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-arrow@1.1.6_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3.1_aazaj6jhdlhp5yn4lcc6ajbffq/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-size/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-popper@1.2.6_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3._kogueaxqb66j236x7utok4axce/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-portal@1.1.8_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3._jvrmsznn236b2negqyn656q3e4/node_modules/@radix-ui/react-portal/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.4_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18._eabna3flfjr6znbogmodfjegla/node_modules/@radix-ui/react-presence/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-popover@1.1.13_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18._vnodnvw5dxmbrbao4zdabvexqm/node_modules/@radix-ui/react-popover/dist/index.mjs","../src/components/ui/popover.tsx","../src/components/ColorPicker/ColorPicker.tsx","../src/components/EmojiPickerWidget/EmojiPickerWidget.tsx","../../../node_modules/.pnpm/@radix-ui+number@1.1.0/node_modules/@radix-ui/number/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-select@2.1.6_@types+react-dom@18.3.5_@types+react@18.3.18__@types+react@18.3._h3snaisb2dmidicxlzdds2tiqu/node_modules/@radix-ui/react-select/dist/index.mjs","../src/components/ui/select.tsx","../src/components/FontFamilySelect/FontFamilyMenu.tsx","../src/components/FontSizePicker/FontSizeControl.tsx","../src/components/FormatTextMenu/FormatTextMenu.tsx","../src/components/HighlightColorPicker/HighlightColorPicker.tsx","../src/plugins/FilePlugin.tsx","../src/hooks/useS3Uploader.tsx","../src/components/FileUpload/InsertFileUploadedDialogBody.tsx","../src/components/FileUpload/InsertFileDialog.tsx","../src/plugins/ImagePlugin.tsx","../src/components/ImageView/ImageDialog/ImageUploadDialogBody.tsx","../src/components/ImageView/ImageDialog/index.tsx","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/extends.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/typeof.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/createClass.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/inherits.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/createSuper.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js","../../../node_modules/.pnpm/signature_pad@2.3.2/node_modules/signature_pad/dist/signature_pad.mjs","../../../node_modules/.pnpm/trim-canvas@0.1.2/node_modules/trim-canvas/build/index.js","../../../node_modules/.pnpm/react-signature-canvas@1.1.0-alpha.2_@types+prop-types@15.7.14_@types+react@18.3.18_prop-type_ysqsgrkps7urcirdaciplixmem/node_modules/react-signature-canvas/dist/index.mjs","../src/plugins/SignatureCanvasPlugin/SignatureCanvasPlugin.tsx","../src/plugins/SignatureCanvasPlugin/SignatureCanvasDialog.tsx","../src/components/InsertMenu/InsertMenu.tsx","../src/plugins/NotePanelPlugin.tsx","../src/components/NotePanelMenu/NotePanelMenu.tsx","../src/components/Toolbar/styles.ts","../src/components/Toolbar/Toolbar.tsx","../src/components/ui/skeleton.tsx","../src/plugins/AutocompletePlugin.tsx","../src/plugins/CodeHighlightPlugin.ts","../src/plugins/CommentPlugin.tsx","../src/plugins/EmbedPreviewPlugin/FloatingEmbedMenuPlugin.tsx","../src/plugins/EmbedPreviewPlugin/index.tsx","../src/utils/setFloatingElemPositionForLinkEditor.ts","../src/plugins/FloatingLinkEditorPlugin/index.tsx","../src/utils/getDOMRangeRect.ts","../src/utils/setFloatingElemPosition.ts","../src/plugins/FloatingTextFormatToolbarPlugin/index.tsx","../src/plugins/HtmlCodeViewPlugin/index.tsx","../src/plugins/HtmlSyncPlugin.tsx","../src/plugins/LinkPlugin/index.tsx","../src/utils/debounce.ts","../src/plugins/LocalStoragePlugin.tsx","../src/plugins/MentionsPlugin/index.tsx","../src/hooks/useModal.tsx","../src/ui/TextInput.tsx","../src/ui/ColorPicker.tsx","../src/utils/invarient.ts","../src/plugins/TableActionMenuPlugin/index.tsx","../src/plugins/TableCellResizer/index.tsx","../src/hooks/useDebounce.ts","../src/plugins/TableHoverActionsPlugin/index.tsx","../src/plugins/SlashCommandPlugin/index.tsx","../src/plugins/WordCountPlugin.tsx","../src/plugins/GrammarCheckPlugin.tsx","../src/pages/styles.ts","../src/pages/ConfigurableEditor/ConfigurableEditor.tsx","../src/components/ScopedEditor.tsx","../src/components/ConfigurableEditorWithAuth.tsx"],"sourcesContent":["import {\n createContext,\n Dispatch,\n ReactNode,\n SetStateAction,\n useContext,\n useState,\n} from \"react\";\n\ninterface HtmlViewContextType {\n isHtmlView: boolean;\n setIsHtmlView: Dispatch<SetStateAction<boolean>>;\n htmlContent: string;\n setHtmlContent: Dispatch<SetStateAction<string>>;\n isUserTyping: boolean;\n setIsUserTyping: Dispatch<SetStateAction<boolean>>;\n canUpdateFromEditor: boolean;\n setCanUpdateFromEditor: Dispatch<SetStateAction<boolean>>;\n}\n\nconst HtmlViewContext = createContext<HtmlViewContextType | undefined>(\n undefined\n);\n\nexport const useHtmlView = () => {\n const context = useContext(HtmlViewContext);\n if (!context) {\n throw new Error(\"useHtmlView must be used within an HtmlViewProvider\");\n }\n return context;\n};\n\ninterface HtmlViewProviderProps {\n children: ReactNode;\n}\n\nexport const HtmlViewProvider: React.FC<HtmlViewProviderProps> = ({\n children,\n}) => {\n const [isHtmlView, setIsHtmlView] = useState(false);\n const [htmlContent, setHtmlContent] = useState(\"\");\n const [isUserTyping, setIsUserTyping] = useState(false);\n const [canUpdateFromEditor, setCanUpdateFromEditor] = useState(true);\n\n return (\n <HtmlViewContext.Provider\n value={{\n isHtmlView,\n setIsHtmlView,\n htmlContent,\n setHtmlContent,\n isUserTyping,\n setIsUserTyping,\n canUpdateFromEditor,\n setCanUpdateFromEditor,\n }}\n >\n {children}\n </HtmlViewContext.Provider>\n );\n};\n","import axios from \"axios\";\n\n// Default API endpoint hardcoded in the package\nconst DEFAULT_API_ENDPOINT = import.meta.env.VITE_APP_API_VALIDATION_ENDPOINT;\n// This exactly matches the API response structure\nexport interface EditorConfig {\n customizations: {\n enableToolbar: boolean;\n toolbarOptions: {\n enableUndoRedo: boolean;\n enableTextFormatting: boolean;\n enableAlignment: boolean;\n enableFontControls: boolean;\n enableTableOptions: boolean;\n enableInsertMenu: boolean;\n enableColorPicker: boolean;\n enableClearOptions: boolean;\n enableEmojiPicker: boolean;\n enableLinks: boolean;\n enableFormatTextMenu: boolean;\n enableCodeFormat: boolean;\n enableAIChat: boolean;\n enableTodoList: boolean;\n enableHtmlViewToggle: boolean;\n enableAutocompleteToggle: boolean;\n };\n enableFloatingMenu: boolean;\n htmlViewOption: boolean;\n floatingMenuOptions: {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n uppercase: boolean;\n lowercase: boolean;\n capitalize: boolean;\n strikethrough: boolean;\n subscript: boolean;\n superscript: boolean;\n code: boolean;\n link: boolean;\n aiChat: boolean;\n };\n };\n expiresAt: string;\n isValid: boolean;\n paidPlan: boolean;\n status: string;\n}\n\nexport interface ProjectData {\n id: string;\n name: string;\n paidPlan: boolean;\n customizations: {\n enableToolbar: boolean;\n toolbarOptions: {\n enableUndoRedo: boolean;\n enableTextFormatting: boolean;\n enableAlignment: boolean;\n enableFontControls: boolean;\n enableTableOptions: boolean;\n enableInsertMenu: boolean;\n enableColorPicker: boolean;\n enableClearOptions: boolean;\n enableEmojiPicker: boolean;\n enableLinks: boolean;\n enableFormatTextMenu: boolean;\n enableCodeFormat: boolean;\n enableAIChat: boolean;\n enableTodoList: boolean;\n enableAutocompleteToggle: boolean;\n };\n enableFloatingMenu: boolean;\n htmlViewOption: boolean;\n floatingMenuOptions: {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n uppercase: boolean;\n lowercase: boolean;\n capitalize: boolean;\n strikethrough: boolean;\n subscript: boolean;\n superscript: boolean;\n code: boolean;\n link: boolean;\n aiChat: boolean;\n };\n };\n expiresAt: string;\n isValid: boolean;\n status: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ApiResponse {\n success: boolean;\n message: string;\n data: ProjectData;\n}\n\n/**\n * Internal function to get the API endpoint\n * This encapsulates the endpoint logic within the package\n */\nexport const getApiEndpoint = (): string => {\n // Optional: Allow override through environment variables - completely optional\n // This is NOT something users need to set - it's here for advanced customization\n // or for development/testing scenarios only\n\n return DEFAULT_API_ENDPOINT;\n};\n\n/**\n * Verify the API key by making a request to the API endpoint\n * @param apiKey The API key to verify\n */\nexport const verifyApiKey = async (apiKey: string): Promise<ApiResponse> => {\n try {\n const endpoint = getApiEndpoint();\n const response = await axios.post(\n endpoint,\n {},\n {\n headers: {\n \"X-API-Key\": apiKey,\n },\n }\n );\n return response.data;\n } catch (error) {\n throw new Error(\"Failed to verify API key\");\n }\n};\n","import { createContext, useContext, useState } from \"react\";\n\nimport { ApiResponse, ProjectData, verifyApiKey } from \"../api/auth\";\nimport { EditorConfigTypes } from \"../types\";\n\n// Convert the API EditorConfig to EditorConfigTypes\nconst convertToEditorConfigTypes = (config: ProjectData): EditorConfigTypes => {\n return {\n enableToolbar: config?.customizations?.enableToolbar,\n toolbarOptions: {\n ...config?.customizations?.toolbarOptions,\n enableTodoList:\n config?.customizations?.toolbarOptions?.enableTodoList ?? true,\n enableHtmlViewToggle:\n (config?.customizations?.toolbarOptions as any)?.enableHtmlViewToggle ??\n true,\n enableHtmlView:\n (config?.customizations?.toolbarOptions as any)?.enableHtmlView ?? true,\n enableAutocompleteToggle:\n (config?.customizations?.toolbarOptions as any)\n ?.enableAutocompleteToggle ?? true,\n enableNotePanels:\n (config?.customizations?.toolbarOptions as any)?.enableNotePanels ??\n true,\n },\n enableFloatingMenu: config?.customizations?.enableFloatingMenu,\n htmlViewOption: config?.customizations?.htmlViewOption,\n floatingMenuOptions: {\n ...config?.customizations?.floatingMenuOptions,\n comment: true,\n },\n };\n};\n\ninterface EditorContextType {\n isAuthenticated: boolean;\n isLoading: boolean;\n error: string | null;\n editorConfig: EditorConfigTypes | null;\n projectName: string | null;\n isPaidPlan: boolean;\n verifyKey: (apiKey: string) => Promise<void>;\n}\n\nconst EditorContext = createContext<EditorContextType | undefined>(undefined);\n\nexport const useEditor = () => {\n const context = useContext(EditorContext);\n if (!context) {\n throw new Error(\"useEditor must be used within an EditorProvider\");\n }\n return context;\n};\n\ninterface EditorProviderProps {\n children: React.ReactNode;\n defaultFontFamilies?: string[];\n mentionUserList?: string[];\n}\n\nexport const EditorProvider: React.FC<EditorProviderProps> = ({\n children,\n defaultFontFamilies = [],\n mentionUserList = [],\n}) => {\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [editorConfig, setEditorConfig] = useState<EditorConfigTypes | null>(\n null\n );\n const [projectName, setProjectName] = useState<string | null>(null);\n const [isPaidPlan, setIsPaidPlan] = useState(false);\n\n const verifyKey = async (apiKey: string) => {\n if (isAuthenticated || isLoading) return; // Guard\n console.log(\"verifyKey\");\n setIsLoading(true);\n setError(null);\n try {\n const response: ApiResponse = await verifyApiKey(apiKey);\n console.log(response, \"response form verifyKey\");\n if (response.success) {\n setIsAuthenticated(true);\n setEditorConfig(convertToEditorConfigTypes(response.data));\n setProjectName(response.data.name);\n setIsPaidPlan(response.data.paidPlan);\n } else {\n console.log(response.message, \"response.message form verifyKey\");\n setError(response.message);\n }\n } catch (err: any) {\n console.log(err, \"error form verifyKey\");\n // Preserve the error message from the backend if available\n const errorMessage =\n err.response?.data?.message ||\n err.message ||\n \"Failed to verify API key\";\n setError(errorMessage);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <EditorContext.Provider\n value={{\n isAuthenticated,\n isLoading,\n error,\n editorConfig,\n projectName,\n isPaidPlan,\n verifyKey,\n }}\n >\n {children}\n </EditorContext.Provider>\n );\n};\n","export const editorConfig = {\n enableToolbar: true,\n toolbarOptions: {\n enableUndoRedo: true,\n enableTextFormatting: true,\n enableAlignment: true,\n enableFontControls: true,\n enableTableOptions: true,\n enableInsertMenu: true,\n enableColorPicker: true,\n enableClearOptions: true,\n enableEmojiPicker: true,\n enableLinks: true,\n enableFormatTextMenu: true,\n enableCodeFormat: true,\n enableAIChat: true,\n enableTodoList: true,\n enableHtmlViewToggle: true,\n enableNotePanels: true,\n enableAutocompleteToggle: true,\n },\n enableFloatingMenu: true,\n htmlViewOption: true,\n floatingMenuOptions: {\n bold: true,\n italic: true,\n underline: true,\n uppercase: true,\n lowercase: true,\n capitalize: true,\n strikethrough: true,\n subscript: true,\n superscript: true,\n code: true,\n link: true,\n aiChat: true,\n comment: true,\n },\n enableAutocomplete: true,\n autocompleteOptions: {\n minMatchLength: 2,\n maxSuggestions: 5,\n },\n defaultFontFamilies: [\n \"Arial\",\n \"Courier New\",\n \"Georgia\",\n \"Times New Roman\",\n \"Verdana\",\n \"Comic Sans MS\",\n \"Tahoma\",\n \"Impact\",\n \"Helvetica\",\n \"Trebuchet MS\",\n \"Lucida Sans Unicode\",\n \"Garamond\",\n \"Palatino Linotype\",\n \"Book Antiqua\",\n \"Cambria\",\n \"Candara\",\n \"Franklin Gothic Medium\",\n \"Futura\",\n \"Century Gothic\",\n \"Baskerville\",\n \"Gill Sans\",\n ],\n mentionUserList: [\"mukthar\", \"nimish\", \"Anoop\", \"Jewel\", \"Ankit\", \"Nitin\"],\n};\n","import axios, { AxiosInstance } from \"axios\";\n\n// Create a single backend instance\nconst backendInstance: AxiosInstance = axios.create({\n baseURL: import.meta.env.VITE_APP_BACKEND_ENDPOINT || \"http://localhost:5000\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n});\n\n// Export the single instance\nexport const backendAPI = backendInstance;\n","// src/api/constants/apiEndpoints.ts\nexport const apiEndpoints = {\n // School management endpoints\n chat: {\n stream: \"/api/chat/stream\",\n json: \"/api/chat/json\",\n imageCreation: \"/api/chat/image-creation\",\n editorAction: \"/api/chat/chat-action\",\n },\n project: {\n fileUpload: \"/api/files/upload\",\n },\n transcript:{\n voiceTranscript: \"/api/transcript/get-assemblyai-token\",\n }\n};\n","import { backendAPI } from \"../config/axios\";\nimport { apiEndpoints } from \"../config/endpoints\";\n\ntype AiStreamType = {\n content: string;\n onMessage: (message: string) => void;\n};\n\nexport const AiStream = async ({ content, onMessage }: AiStreamType) => {\n try {\n // Keep track of partial messages between chunks\n let buffer = \"\";\n\n const res = await backendAPI.post(\n apiEndpoints.chat.stream,\n {\n content,\n },\n {\n responseType: \"stream\",\n onDownloadProgress: (progressEvent) => {\n const chunk = progressEvent.event?.target?.responseText;\n if (!chunk) return;\n\n // Get only the new content by removing already processed data\n const newChunk = chunk.slice(buffer.length);\n buffer = chunk; // Update buffer with complete chunk\n\n // Split on newlines and handle partial messages\n const lines = newChunk.split(\"\\n\");\n\n // Process complete messages\n lines.forEach((line: string) => {\n // Skip empty lines\n if (!line.trim()) return;\n\n // Handle potential JSON messages\n try {\n const parsed = JSON.parse(line);\n onMessage(parsed);\n } catch {\n // If not JSON, send the raw message\n onMessage(line.trim());\n }\n });\n },\n }\n );\n // Additional check for stream completion\n if (res.status === 200) {\n onMessage(\"[DONE]\");\n }\n } catch (error) {\n console.error(\"Error in tutorStream:\", error);\n // throw error;\n }\n};\n\nexport const AiJsonResponse = async ({ content }: { content: string }) => {\n try {\n const res = await backendAPI.post(apiEndpoints.chat.json, {\n content,\n });\n return res.data;\n } catch (error) {\n console.error(\"Error in AiJsonResponse:\", error);\n throw error;\n }\n};\n\nexport const AiImageResponse = async ({ content }: { content: string }) => {\n try {\n const res = await backendAPI.post(apiEndpoints.chat.imageCreation, {\n content,\n });\n return res.data;\n } catch (error) {\n console.error(\"Error in AiImageResponse:\", error);\n throw error;\n }\n};\n\nexport const AiEditorAction = async ({ content }: { content: string }) => {\n try {\n const res = await backendAPI.post(apiEndpoints.chat.editorAction, {\n content,\n });\n return res.data;\n } catch (error) {\n console.error(\"Error in AiEditorAction:\", error);\n throw error;\n }\n};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n SerializedEditor,\n SerializedLexicalNode,\n Spread,\n} from \"lexical\";\nimport { $applyNodeReplacement, createEditor, DecoratorNode } from \"lexical\";\nimport React, { Suspense } from \"react\";\n\nconst ImageView = React.lazy(() => import(\"src/components/ImageView\"));\n\nexport interface ImagePayload {\n altText: string;\n caption?: LexicalEditor;\n height?: number;\n key?: NodeKey;\n maxWidth?: number;\n showCaption?: boolean;\n src: string;\n width?: number;\n captionsEnabled?: boolean;\n}\n\nfunction isGoogleDocCheckboxImg(img: HTMLImageElement): boolean {\n return (\n img.parentElement != null &&\n img.parentElement.tagName === \"LI\" &&\n img.previousSibling === null &&\n img.getAttribute(\"aria-roledescription\") === \"checkbox\"\n );\n}\n\nfunction $convertImageElement(domNode: Node): null | DOMConversionOutput {\n const img = domNode as HTMLImageElement;\n if (img.src.startsWith(\"file:///\") || isGoogleDocCheckboxImg(img)) {\n return null;\n }\n const { alt: altText, src, width, height } = img;\n const node = $createImageNode({ altText, height, src, width });\n return { node };\n}\n\nexport type SerializedImageNode = Spread<\n {\n altText: string;\n caption: SerializedEditor;\n height?: number;\n maxWidth: number;\n showCaption: boolean;\n src: string;\n width?: number;\n },\n SerializedLexicalNode\n>;\n\nexport class ImageNode extends DecoratorNode<JSX.Element> {\n __src: string;\n __altText: string;\n __width: \"inherit\" | number;\n __height: \"inherit\" | number;\n __maxWidth: number;\n __showCaption: boolean;\n __caption: LexicalEditor;\n // Captions cannot yet be used within editor cells\n __captionsEnabled: boolean;\n\n // to identify the image node and must unique too\n static getType(): string {\n return \"image\";\n }\n\n // Clones the ImageNode when needed (during editor updates)\n static clone(node: ImageNode): ImageNode {\n return new ImageNode(\n node.__src,\n node.__altText,\n node.__maxWidth,\n node.__width,\n node.__height,\n node.__showCaption,\n node.__caption,\n node.__captionsEnabled,\n node.__key\n );\n }\n\n // importing to json format\n static importJSON(serializedNode: SerializedImageNode): ImageNode {\n const { altText, height, width, maxWidth, caption, src, showCaption } =\n serializedNode;\n const node = $createImageNode({\n altText,\n height,\n maxWidth,\n showCaption,\n src,\n width,\n });\n const nestedEditor = node.__caption;\n const editorState = nestedEditor.parseEditorState(caption.editorState);\n if (!editorState.isEmpty()) {\n nestedEditor.setEditorState(editorState);\n }\n return node;\n }\n // Exports this node as an actual <img> tag in the DOM when needed\n exportDOM(): DOMExportOutput {\n const element = document.createElement(\"img\");\n element.setAttribute(\"src\", this.__src);\n element.setAttribute(\"alt\", this.__altText);\n element.setAttribute(\"width\", this.__width.toString());\n element.setAttribute(\"height\", this.__height.toString());\n return { element };\n }\n // convert img tag into image node in the editor using convertImageElement func\n static importDOM(): DOMConversionMap | null {\n return {\n img: (node: Node) => ({\n conversion: $convertImageElement,\n priority: 0,\n }),\n };\n }\n\n constructor(\n src: string,\n altText: string,\n maxWidth: number,\n width?: \"inherit\" | number,\n height?: \"inherit\" | number,\n showCaption?: boolean,\n caption?: LexicalEditor,\n captionsEnabled?: boolean,\n key?: NodeKey\n ) {\n super(key);\n this.__src = src;\n this.__altText = altText;\n this.__maxWidth = maxWidth;\n this.__width = width || \"inherit\";\n this.__height = height || \"inherit\";\n this.__showCaption = showCaption || false;\n this.__caption =\n caption ||\n createEditor({\n nodes: [],\n });\n this.__captionsEnabled = captionsEnabled || captionsEnabled === undefined;\n }\n\n exportJSON(): SerializedImageNode {\n return {\n altText: this.getAltText(),\n caption: this.__caption.toJSON(),\n height: this.__height === \"inherit\" ? 0 : this.__height,\n maxWidth: this.__maxWidth,\n showCaption: this.__showCaption,\n src: this.getSrc(),\n type: \"image\",\n version: 1,\n width: this.__width === \"inherit\" ? 0 : this.__width,\n };\n }\n\n // setting width and height when resizing\n setWidthAndHeight(\n width: \"inherit\" | number,\n height: \"inherit\" | number\n ): void {\n const writable = this.getWritable();\n writable.__width = width;\n writable.__height = height;\n }\n\n // state to update to show the caption\n setShowCaption(showCaption: boolean): void {\n const writable = this.getWritable();\n writable.__showCaption = showCaption;\n }\n\n // To create a dom representation of image view\n createDOM(config: EditorConfig): HTMLElement {\n const span = document.createElement(\"span\");\n const theme = config.theme;\n const className = theme.image;\n if (className !== undefined) {\n span.className = className;\n }\n return span;\n }\n\n updateDOM(): false {\n return false;\n }\n // to get the image src\n getSrc(): string {\n return this.__src;\n }\n\n getAltText(): string {\n return this.__altText;\n }\n\n // to render the image tag\n decorate(): JSX.Element {\n return (\n <Suspense fallback={null}>\n <ImageView\n src={this.__src}\n altText={this.__altText}\n width={this.__width}\n height={this.__height}\n maxWidth={this.__maxWidth}\n nodeKey={this.getKey()}\n showCaption={this.__showCaption}\n caption={this.__caption}\n captionsEnabled={this.__captionsEnabled}\n resizable={true}\n />\n </Suspense>\n );\n }\n}\n\nexport function $createImageNode({\n altText,\n height,\n maxWidth = 500,\n captionsEnabled,\n src,\n width,\n showCaption,\n caption,\n key,\n}: ImagePayload): ImageNode {\n return $applyNodeReplacement(\n new ImageNode(\n src,\n altText,\n maxWidth,\n width,\n height,\n showCaption,\n caption,\n captionsEnabled,\n key\n )\n );\n}\n\nexport function $isImageNode(\n node: LexicalNode | null | undefined\n): node is ImageNode {\n return node instanceof ImageNode;\n}\n","import { createCommand } from \"lexical\";\n\nexport const AI_ACTION_COMMAND = createCommand<{ type: string }>(\n \"AI_ACTION_COMMAND\"\n);\n","import { $generateNodesFromDOM } from \"@lexical/html\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $getSelection,\n $insertNodes,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n createCommand,\n} from \"lexical\";\nimport { useEffect, useRef } from \"react\";\nimport { AiImageResponse, AiJsonResponse } from \"src/api/ai\";\nimport { $createImageNode } from \"src/nodes/ImageNode\";\nimport { AI_ACTION_COMMAND } from \"src/utils/helper\";\n\n// Create a Lexical command for rephrasing\nexport const AI_REPHRASE_COMMAND = createCommand(\"AI_REPHRASE_COMMAND\");\nexport const AI_IMAGE_COMMAND = createCommand(\"AI_IMAGE_COMMAND\");\nconst AIRephrasePlugin = () => {\n const [editor] = useLexicalComposerContext();\n const messageBufferRef = useRef<string>(\"\"); // Avoid using state for performance\n\n const handleChatStream = async (type: string) => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return false;\n const selectedText = selection.getTextContent().trim();\n if (!selectedText) return false;\n\n let prompt = \"\";\n switch (type) {\n case \"SPELLING_GRAMMAR\":\n prompt = `Fix any spelling and grammatical errors while preserving the original tone:\\n\"${selectedText}\"`;\n break;\n case \"SIMPLIFY\":\n prompt = `Rephrase this text in simpler language while keeping its original meaning:\\n\"${selectedText}\"`;\n break;\n case \"COMPLETE_SENTENCE\":\n prompt = `Complete this sentence naturally:\\n\"${selectedText}\"`;\n break;\n case \"AI_RESPONSE\":\n prompt = selectedText;\n break;\n case \"EMOJIFY\":\n prompt = `Add relevant emojis to this text while keeping it natural and engaging:\\n\"${selectedText}\"`;\n break;\n case \"TRANSLATE\":\n prompt = `Translate this text to Hindi:\\n\"${selectedText}\"`;\n break;\n }\n if (!prompt.length) return;\n\n try {\n const response = await AiJsonResponse({ content: prompt });\n if (!response.data) {\n console.warn(\"Empty response received\");\n return false;\n }\n\n // Use a single editor.update call\n editor.update(() => {\n const currentSelection = $getSelection();\n if (!currentSelection || !$isRangeSelection(currentSelection)) return;\n\n // Parse the HTML string\n const parser = new DOMParser();\n const dom = parser.parseFromString(response.data, \"text/html\");\n\n // Generate LexicalNodes from the parsed HTML content\n const nodes = $generateNodesFromDOM(editor, dom);\n\n // Clear the selected text and insert new nodes\n currentSelection.insertText(\"\");\n $insertNodes(nodes);\n });\n\n return true;\n } catch (error) {\n console.error(\"Error in AI stream:\", error);\n return false;\n }\n };\n\n const handleImageGeneration = async () => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return false;\n const selectedText = selection.getTextContent().trim();\n if (!selectedText) return false;\n\n try {\n const { data } = await AiImageResponse({ content: selectedText });\n if (!data) {\n console.warn(\"No image generated\");\n return false;\n }\n console.log(data, \"data\");\n\n editor.update(() => {\n const imageNode = $createImageNode({\n altText: \"AI CREATED IMAGE\",\n src: data,\n maxWidth: 1080,\n });\n selection.insertNodes([imageNode]);\n });\n\n return true;\n } catch (error) {\n console.error(\"Error generating image:\", error);\n return false;\n }\n };\n // Register Lexical Command\n useEffect(() => {\n return editor.registerCommand(\n AI_ACTION_COMMAND,\n ({ type }) => {\n (async () => {\n try {\n await handleChatStream(type);\n } catch (error) {\n console.error(`Error on AI stream: ${error}`);\n }\n })();\n return true;\n },\n COMMAND_PRIORITY_LOW\n );\n }, [editor]);\n\n useEffect(() => {\n return editor.registerCommand(\n AI_IMAGE_COMMAND,\n () => {\n (async () => {\n try {\n await handleImageGeneration();\n } catch (error) {\n console.error(`Error generating image: ${error}`);\n }\n })();\n return true;\n },\n COMMAND_PRIORITY_LOW\n );\n }, [editor]);\n\n return null;\n};\n\nexport default AIRephrasePlugin;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\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\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\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\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\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\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { debounce } from \"lodash-es\";\nimport { useMemo, useRef } from \"react\";\n\nexport function useDebounce<T extends (...args: never[]) => void>(\n fn: T,\n ms: number,\n maxWait?: number\n) {\n const funcRef = useRef<T | null>(null);\n funcRef.current = fn;\n\n return useMemo(\n () =>\n debounce(\n (...args: Parameters<T>) => {\n if (funcRef.current) {\n funcRef.current(...args);\n }\n },\n ms,\n { maxWait }\n ),\n [ms, maxWait]\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { $isCodeNode } from \"@lexical/code\";\nimport {\n $getNearestNodeFromDOMNode,\n $getSelection,\n $setSelection,\n LexicalEditor,\n} from \"lexical\";\nimport * as React from \"react\";\nimport { useState } from \"react\";\n\nimport { useDebounce } from \"../../utils\";\n\ninterface Props {\n editor: LexicalEditor;\n getCodeDOMNode: () => HTMLElement | null;\n}\n\nexport function CopyButton({ editor, getCodeDOMNode }: Props) {\n const [isCopyCompleted, setCopyCompleted] = useState<boolean>(false);\n\n const removeSuccessIcon = useDebounce(() => {\n setCopyCompleted(false);\n }, 1000);\n\n async function handleClick(): Promise<void> {\n const codeDOMNode = getCodeDOMNode();\n\n if (!codeDOMNode) {\n return;\n }\n\n let content = \"\";\n\n editor.update(() => {\n const codeNode = $getNearestNodeFromDOMNode(codeDOMNode);\n\n if ($isCodeNode(codeNode)) {\n content = codeNode.getTextContent();\n }\n\n const selection = $getSelection();\n $setSelection(selection);\n });\n\n try {\n await navigator.clipboard.writeText(content);\n setCopyCompleted(true);\n removeSuccessIcon();\n } catch (err) {\n console.error(\"Failed to copy: \", err);\n }\n }\n\n return (\n <button className=\"menu-item\" onClick={handleClick} aria-label=\"copy\">\n {isCopyCompleted ? (\n <i className=\"format success\" />\n ) : (\n <i className=\"format copy\" />\n )}\n </button>\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport \"./index.css\";\n\nimport { $isCodeNode } from \"@lexical/code\";\nimport { $getNearestNodeFromDOMNode, LexicalEditor } from \"lexical\";\nimport { Options } from \"prettier\";\nimport { useState } from \"react\";\n\ninterface Props {\n lang: string;\n editor: LexicalEditor;\n getCodeDOMNode: () => HTMLElement | null;\n}\n\nconst PRETTIER_PARSER_MODULES = {\n css: [() => import(\"prettier/plugins/postcss\")],\n html: [() => import(\"prettier/plugins/html\")],\n js: [\n () => import(\"prettier/plugins/babel\"),\n () => import(\"prettier/plugins/estree\"),\n ],\n markdown: [() => import(\"prettier/plugins/markdown\")],\n typescript: [\n () => import(\"prettier/plugins/typescript\"),\n () => import(\"prettier/plugins/estree\"),\n ],\n} as const;\n\ntype LanguagesType = keyof typeof PRETTIER_PARSER_MODULES;\n\nasync function loadPrettierParserByLang(lang: string) {\n const dynamicImports = PRETTIER_PARSER_MODULES[lang as LanguagesType];\n const modules = await Promise.all(\n dynamicImports.map((dynamicImport) => dynamicImport())\n );\n return modules;\n}\n\nasync function loadPrettierFormat() {\n const { format } = await import(\"prettier/standalone\");\n return format;\n}\n\nconst PRETTIER_OPTIONS_BY_LANG: Record<string, Options> = {\n css: { parser: \"css\" },\n html: { parser: \"html\" },\n js: { parser: \"babel\" },\n markdown: { parser: \"markdown\" },\n typescript: { parser: \"typescript\" },\n};\n\nconst LANG_CAN_BE_PRETTIER = Object.keys(PRETTIER_OPTIONS_BY_LANG);\n\nexport function canBePrettier(lang: string): boolean {\n return LANG_CAN_BE_PRETTIER.includes(lang);\n}\n\nfunction getPrettierOptions(lang: string): Options {\n const options = PRETTIER_OPTIONS_BY_LANG[lang];\n if (!options) {\n throw new Error(\n `CodeActionMenuPlugin: Prettier does not support this language: ${lang}`\n );\n }\n\n return options;\n}\n\nexport function PrettierButton({ lang, editor, getCodeDOMNode }: Props) {\n const [syntaxError, setSyntaxError] = useState<string>(\"\");\n const [tipsVisible, setTipsVisible] = useState<boolean>(false);\n\n async function handleClick(): Promise<void> {\n const codeDOMNode = getCodeDOMNode();\n if (!codeDOMNode) {\n return;\n }\n\n let content = \"\";\n editor.update(() => {\n const codeNode = $getNearestNodeFromDOMNode(codeDOMNode);\n if ($isCodeNode(codeNode)) {\n content = codeNode.getTextContent();\n }\n });\n if (content === \"\") {\n return;\n }\n\n try {\n const format = await loadPrettierFormat();\n const options = getPrettierOptions(lang);\n const prettierParsers = await loadPrettierParserByLang(lang);\n options.plugins = prettierParsers.map(\n (parser) => parser.default || parser\n );\n const formattedCode = await format(content, options);\n\n editor.update(() => {\n const codeNode = $getNearestNodeFromDOMNode(codeDOMNode);\n if ($isCodeNode(codeNode)) {\n const selection = codeNode.select(0);\n selection.insertText(formattedCode);\n setSyntaxError(\"\");\n setTipsVisible(false);\n }\n });\n } catch (error: unknown) {\n setError(error);\n }\n }\n\n function setError(error: unknown) {\n if (error instanceof Error) {\n setSyntaxError(error.message);\n setTipsVisible(true);\n } else {\n console.error(\"Unexpected error: \", error);\n }\n }\n\n function handleMouseEnter() {\n if (syntaxError !== \"\") {\n setTipsVisible(true);\n }\n }\n\n function handleMouseLeave() {\n if (syntaxError !== \"\") {\n setTipsVisible(false);\n }\n }\n\n return (\n <div className=\"prettier-wrapper\">\n <button\n className=\"menu-item\"\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-label=\"prettier\"\n >\n {syntaxError ? (\n <i className=\"format prettier-error\" />\n ) : (\n <i className=\"format prettier\" />\n )}\n </button>\n {tipsVisible ? (\n <pre className=\"code-error-tips\">{syntaxError}</pre>\n ) : null}\n </div>\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport \"./index.css\";\n\nimport {\n $isCodeNode,\n CodeNode,\n getLanguageFriendlyName,\n normalizeCodeLang,\n} from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getNearestNodeFromDOMNode, isHTMLElement } from \"lexical\";\nimport type { JSX } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { CopyButton } from \"./components/CopyButton\";\nimport { canBePrettier, PrettierButton } from \"./components/PrettierButton\";\nimport { useDebounce } from \"./utils\";\n\nconst CODE_PADDING = 8;\n\ninterface Position {\n top: string;\n right: string;\n}\n\nfunction CodeActionMenuContainer({\n anchorElem,\n}: {\n anchorElem: HTMLElement;\n}): JSX.Element {\n const [editor] = useLexicalComposerContext();\n\n const [lang, setLang] = useState(\"\");\n const [isShown, setShown] = useState<boolean>(false);\n const [shouldListenMouseMove, setShouldListenMouseMove] =\n useState<boolean>(false);\n const [position, setPosition] = useState<Position>({\n right: \"0\",\n top: \"0\",\n });\n const codeSetRef = useRef<Set<string>>(new Set());\n const codeDOMNodeRef = useRef<HTMLElement | null>(null);\n\n function getCodeDOMNode(): HTMLElement | null {\n return codeDOMNodeRef.current;\n }\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { codeDOMNode, isOutside } = getMouseInfo(event);\n if (isOutside) {\n setShown(false);\n return;\n }\n\n if (!codeDOMNode) {\n return;\n }\n\n codeDOMNodeRef.current = codeDOMNode;\n\n let codeNode: CodeNode | null = null;\n let _lang = \"\";\n\n editor.update(() => {\n const maybeCodeNode = $getNearestNodeFromDOMNode(codeDOMNode);\n\n if ($isCodeNode(maybeCodeNode)) {\n codeNode = maybeCodeNode;\n _lang = codeNode.getLanguage() || \"\";\n }\n });\n\n if (codeNode) {\n const { y: editorElemY, right: editorElemRight } =\n anchorElem.getBoundingClientRect();\n const { y, right } = codeDOMNode.getBoundingClientRect();\n setLang(_lang);\n setShown(true);\n setPosition({\n right: `${editorElemRight - right + CODE_PADDING}px`,\n top: `${y - editorElemY}px`,\n });\n }\n },\n 50,\n 1000\n );\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return;\n }\n\n document.addEventListener(\"mousemove\", debouncedOnMouseMove);\n\n return () => {\n setShown(false);\n debouncedOnMouseMove.cancel();\n document.removeEventListener(\"mousemove\", debouncedOnMouseMove);\n };\n }, [shouldListenMouseMove, debouncedOnMouseMove]);\n\n useEffect(() => {\n return editor.registerMutationListener(\n CodeNode,\n (mutations) => {\n editor.getEditorState().read(() => {\n for (const [key, type] of mutations) {\n switch (type) {\n case \"created\":\n codeSetRef.current.add(key);\n break;\n\n case \"destroyed\":\n codeSetRef.current.delete(key);\n break;\n\n default:\n break;\n }\n }\n });\n setShouldListenMouseMove(codeSetRef.current.size > 0);\n },\n { skipInitialization: false }\n );\n }, [editor]);\n\n const normalizedLang = normalizeCodeLang(lang);\n const codeFriendlyName = getLanguageFriendlyName(lang);\n\n return (\n <>\n {isShown ? (\n <div className=\"code-action-menu-container\" style={{ ...position }}>\n <div className=\"code-highlight-language\">{codeFriendlyName}</div>\n <CopyButton editor={editor} getCodeDOMNode={getCodeDOMNode} />\n {canBePrettier(normalizedLang) ? (\n <PrettierButton\n editor={editor}\n getCodeDOMNode={getCodeDOMNode}\n lang={normalizedLang}\n />\n ) : null}\n </div>\n ) : null}\n </>\n );\n}\n\nfunction getMouseInfo(event: MouseEvent): {\n codeDOMNode: HTMLElement | null;\n isOutside: boolean;\n} {\n const target = event.target;\n\n if (isHTMLElement(target)) {\n const codeDOMNode = target.closest<HTMLElement>(\n \"code.PlaygroundEditorTheme__code\"\n );\n const isOutside = !(\n codeDOMNode ||\n target.closest<HTMLElement>(\"div.code-action-menu-container\")\n );\n\n return { codeDOMNode, isOutside };\n } else {\n return { codeDOMNode: null, isOutside: true };\n }\n}\n\nexport default function CodeActionMenuPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.ReactPortal | null {\n return createPortal(\n <CodeActionMenuContainer anchorElem={anchorElem} />,\n anchorElem\n );\n}\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase().trim();\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n ...rest\n }, ref) => {\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: [\"lucide\", `lucide-${toKebabCase(iconName)}`, className].join(\" \"),\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n );\n Component.displayName = `${iconName}`;\n return Component;\n};\n\nexport { createLucideIcon as default, toKebabCase };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst AlertCircle = createLucideIcon(\"AlertCircle\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n]);\n\nexport { AlertCircle as default };\n//# sourceMappingURL=alert-circle.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst AlertTriangle = createLucideIcon(\"AlertTriangle\", [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\",\n key: \"c3ski4\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { AlertTriangle as default };\n//# sourceMappingURL=alert-triangle.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst AlignCenter = createLucideIcon(\"AlignCenter\", [\n [\"line\", { x1: \"21\", x2: \"3\", y1: \"6\", y2: \"6\", key: \"1fp77t\" }],\n [\"line\", { x1: \"17\", x2: \"7\", y1: \"12\", y2: \"12\", key: \"rsh8ii\" }],\n [\"line\", { x1: \"19\", x2: \"5\", y1: \"18\", y2: \"18\", key: \"1t0tuv\" }]\n]);\n\nexport { AlignCenter as default };\n//# sourceMappingURL=align-center.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst AlignJustify = createLucideIcon(\"AlignJustify\", [\n [\"line\", { x1: \"3\", x2: \"21\", y1: \"6\", y2: \"6\", key: \"4m8b97\" }],\n [\"line\", { x1: \"3\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"10d38w\" }],\n [\"line\", { x1: \"3\", x2: \"21\", y1: \"18\", y2: \"18\", key: \"kwyyxn\" }]\n]);\n\nexport { AlignJustify as default };\n//# sourceMappingURL=align-justify.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst AlignLeft = createLucideIcon(\"AlignLeft\", [\n [\"line\", { x1: \"21\", x2: \"3\", y1: \"6\", y2: \"6\", key: \"1fp77t\" }],\n [\"line\", { x1: \"15\", x2: \"3\", y1: \"12\", y2: \"12\", key: \"v6grx8\" }],\n [\"line\", { x1: \"17\", x2: \"3\", y1: \"18\", y2: \"18\", key: \"1awlsn\" }]\n]);\n\nexport { AlignLeft as default };\n//# sourceMappingURL=align-left.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst AlignRight = createLucideIcon(\"AlignRight\", [\n [\"line\", { x1: \"21\", x2: \"3\", y1: \"6\", y2: \"6\", key: \"1fp77t\" }],\n [\"line\", { x1: \"21\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1uyos4\" }],\n [\"line\", { x1: \"21\", x2: \"7\", y1: \"18\", y2: \"18\", key: \"1g9eri\" }]\n]);\n\nexport { AlignRight as default };\n//# sourceMappingURL=align-right.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CheckCircle = createLucideIcon(\"CheckCircle\", [\n [\"path\", { d: \"M22 11.08V12a10 10 0 1 1-5.93-9.14\", key: \"g774vq\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n]);\n\nexport { CheckCircle as default };\n//# sourceMappingURL=check-circle.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Check = createLucideIcon(\"Check\", [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]]);\n\nexport { Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"ChevronDown\", [\n [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronRight = createLucideIcon(\"ChevronRight\", [\n [\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]\n]);\n\nexport { ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronUp = createLucideIcon(\"ChevronUp\", [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]]);\n\nexport { ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Circle = createLucideIcon(\"Circle\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n]);\n\nexport { Circle as default };\n//# sourceMappingURL=circle.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock = createLucideIcon(\"Clock\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Code = createLucideIcon(\"Code\", [\n [\"polyline\", { points: \"16 18 22 12 16 6\", key: \"z7tu5w\" }],\n [\"polyline\", { points: \"8 6 2 12 8 18\", key: \"1eg1df\" }]\n]);\n\nexport { Code as default };\n//# sourceMappingURL=code.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CornerDownLeft = createLucideIcon(\"CornerDownLeft\", [\n [\"polyline\", { points: \"9 10 4 15 9 20\", key: \"r3jprv\" }],\n [\"path\", { d: \"M20 4v7a4 4 0 0 1-4 4H4\", key: \"6o5b7l\" }]\n]);\n\nexport { CornerDownLeft as default };\n//# sourceMappingURL=corner-down-left.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileCode2 = createLucideIcon(\"FileCode2\", [\n [\"path\", { d: \"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4\", key: \"1pf5j1\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"m5 12-3 3 3 3\", key: \"oke12k\" }],\n [\"path\", { d: \"m9 18 3-3-3-3\", key: \"112psh\" }]\n]);\n\nexport { FileCode2 as default };\n//# sourceMappingURL=file-code-2.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Heading1 = createLucideIcon(\"Heading1\", [\n [\"path\", { d: \"M4 12h8\", key: \"17cfdx\" }],\n [\"path\", { d: \"M4 18V6\", key: \"1rz3zl\" }],\n [\"path\", { d: \"M12 18V6\", key: \"zqpxq5\" }],\n [\"path\", { d: \"m17 12 3-2v8\", key: \"1hhhft\" }]\n]);\n\nexport { Heading1 as default };\n//# sourceMappingURL=heading-1.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Heading2 = createLucideIcon(\"Heading2\", [\n [\"path\", { d: \"M4 12h8\", key: \"17cfdx\" }],\n [\"path\", { d: \"M4 18V6\", key: \"1rz3zl\" }],\n [\"path\", { d: \"M12 18V6\", key: \"zqpxq5\" }],\n [\"path\", { d: \"M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1\", key: \"9jr5yi\" }]\n]);\n\nexport { Heading2 as default };\n//# sourceMappingURL=heading-2.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Heading3 = createLucideIcon(\"Heading3\", [\n [\"path\", { d: \"M4 12h8\", key: \"17cfdx\" }],\n [\"path\", { d: \"M4 18V6\", key: \"1rz3zl\" }],\n [\"path\", { d: \"M12 18V6\", key: \"zqpxq5\" }],\n [\"path\", { d: \"M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2\", key: \"68ncm8\" }],\n [\"path\", { d: \"M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2\", key: \"1ejuhz\" }]\n]);\n\nexport { Heading3 as default };\n//# sourceMappingURL=heading-3.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Heading4 = createLucideIcon(\"Heading4\", [\n [\"path\", { d: \"M4 12h8\", key: \"17cfdx\" }],\n [\"path\", { d: \"M4 18V6\", key: \"1rz3zl\" }],\n [\"path\", { d: \"M12 18V6\", key: \"zqpxq5\" }],\n [\"path\", { d: \"M17 10v4h4\", key: \"13sv97\" }],\n [\"path\", { d: \"M21 10v8\", key: \"1kdml4\" }]\n]);\n\nexport { Heading4 as default };\n//# sourceMappingURL=heading-4.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Heading5 = createLucideIcon(\"Heading5\", [\n [\"path\", { d: \"M4 12h8\", key: \"17cfdx\" }],\n [\"path\", { d: \"M4 18V6\", key: \"1rz3zl\" }],\n [\"path\", { d: \"M12 18V6\", key: \"zqpxq5\" }],\n [\"path\", { d: \"M17 13v-3h4\", key: \"1nvgqp\" }],\n [\n \"path\",\n { d: \"M17 17.7c.4.2.8.3 1.3.3 1.5 0 2.7-1.1 2.7-2.5S19.8 13 18.3 13H17\", key: \"2nebdn\" }\n ]\n]);\n\nexport { Heading5 as default };\n//# sourceMappingURL=heading-5.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Heading6 = createLucideIcon(\"Heading6\", [\n [\"path\", { d: \"M4 12h8\", key: \"17cfdx\" }],\n [\"path\", { d: \"M4 18V6\", key: \"1rz3zl\" }],\n [\"path\", { d: \"M12 18V6\", key: \"zqpxq5\" }],\n [\"circle\", { cx: \"19\", cy: \"16\", r: \"2\", key: \"15mx69\" }],\n [\"path\", { d: \"M20 10c-2 2-3 3.5-3 6\", key: \"f35dl0\" }]\n]);\n\nexport { Heading6 as default };\n//# sourceMappingURL=heading-6.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Highlighter = createLucideIcon(\"Highlighter\", [\n [\"path\", { d: \"m9 11-6 6v3h9l3-3\", key: \"1a3l36\" }],\n [\"path\", { d: \"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\", key: \"14a9rk\" }]\n]);\n\nexport { Highlighter as default };\n//# sourceMappingURL=highlighter.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Info = createLucideIcon(\"Info\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n]);\n\nexport { Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Lightbulb = createLucideIcon(\"Lightbulb\", [\n [\n \"path\",\n {\n d: \"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\",\n key: \"1gvzjb\"\n }\n ],\n [\"path\", { d: \"M9 18h6\", key: \"x1upvd\" }],\n [\"path\", { d: \"M10 22h4\", key: \"ceow96\" }]\n]);\n\nexport { Lightbulb as default };\n//# sourceMappingURL=lightbulb.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MessageSquare = createLucideIcon(\"MessageSquare\", [\n [\"path\", { d: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\", key: \"1lielz\" }]\n]);\n\nexport { MessageSquare as default };\n//# sourceMappingURL=message-square.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Minus = createLucideIcon(\"Minus\", [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]]);\n\nexport { Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MoreHorizontal = createLucideIcon(\"MoreHorizontal\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n]);\n\nexport { MoreHorizontal as default };\n//# sourceMappingURL=more-horizontal.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Paperclip = createLucideIcon(\"Paperclip\", [\n [\n \"path\",\n {\n d: \"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\",\n key: \"1u3ebp\"\n }\n ]\n]);\n\nexport { Paperclip as default };\n//# sourceMappingURL=paperclip.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst PenLine = createLucideIcon(\"PenLine\", [\n [\"path\", { d: \"M12 20h9\", key: \"t2du7b\" }],\n [\"path\", { d: \"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z\", key: \"ymcmye\" }]\n]);\n\nexport { PenLine as default };\n//# sourceMappingURL=pen-line.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Pen = createLucideIcon(\"Pen\", [\n [\"path\", { d: \"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\", key: \"5qss01\" }]\n]);\n\nexport { Pen as default };\n//# sourceMappingURL=pen.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Plus = createLucideIcon(\"Plus\", [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n]);\n\nexport { Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Quote = createLucideIcon(\"Quote\", [\n [\n \"path\",\n {\n d: \"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z\",\n key: \"4rm80e\"\n }\n ],\n [\n \"path\",\n {\n d: \"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z\",\n key: \"10za9r\"\n }\n ]\n]);\n\nexport { Quote as default };\n//# sourceMappingURL=quote.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Reply = createLucideIcon(\"Reply\", [\n [\"polyline\", { points: \"9 17 4 12 9 7\", key: \"hvgpf2\" }],\n [\"path\", { d: \"M20 18v-2a4 4 0 0 0-4-4H4\", key: \"5vmcpk\" }]\n]);\n\nexport { Reply as default };\n//# sourceMappingURL=reply.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Sparkles = createLucideIcon(\"Sparkles\", [\n [\n \"path\",\n {\n d: \"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\",\n key: \"17u4zn\"\n }\n ],\n [\"path\", { d: \"M5 3v4\", key: \"bklmnn\" }],\n [\"path\", { d: \"M19 17v4\", key: \"iiml17\" }],\n [\"path\", { d: \"M3 5h4\", key: \"nem4j1\" }],\n [\"path\", { d: \"M17 19h4\", key: \"lbex7p\" }]\n]);\n\nexport { Sparkles as default };\n//# sourceMappingURL=sparkles.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst StickyNote = createLucideIcon(\"StickyNote\", [\n [\"path\", { d: \"M16 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8Z\", key: \"qazsjp\" }],\n [\"path\", { d: \"M15 3v4a2 2 0 0 0 2 2h4\", key: \"40519r\" }]\n]);\n\nexport { StickyNote as default };\n//# sourceMappingURL=sticky-note.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Subscript = createLucideIcon(\"Subscript\", [\n [\"path\", { d: \"m4 5 8 8\", key: \"1eunvl\" }],\n [\"path\", { d: \"m12 5-8 8\", key: \"1ah0jp\" }],\n [\n \"path\",\n {\n d: \"M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2.11 2.11 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07\",\n key: \"e8ta8j\"\n }\n ]\n]);\n\nexport { Subscript as default };\n//# sourceMappingURL=subscript.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Superscript = createLucideIcon(\"Superscript\", [\n [\"path\", { d: \"m4 19 8-8\", key: \"hr47gm\" }],\n [\"path\", { d: \"m12 19-8-8\", key: \"1dhhmo\" }],\n [\n \"path\",\n {\n d: \"M20 12h-4c0-1.5.442-2 1.5-2.5S20 8.334 20 7.002c0-.472-.17-.93-.484-1.29a2.105 2.105 0 0 0-2.617-.436c-.42.239-.738.614-.899 1.06\",\n key: \"1dfcux\"\n }\n ]\n]);\n\nexport { Superscript as default };\n//# sourceMappingURL=superscript.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Text = createLucideIcon(\"Text\", [\n [\"path\", { d: \"M17 6.1H3\", key: \"wptmhv\" }],\n [\"path\", { d: \"M21 12.1H3\", key: \"1j38uz\" }],\n [\"path\", { d: \"M15.1 18H3\", key: \"1nb16a\" }]\n]);\n\nexport { Text as default };\n//# sourceMappingURL=text.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Trash2 = createLucideIcon(\"Trash2\", [\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }],\n [\"line\", { x1: \"10\", x2: \"10\", y1: \"11\", y2: \"17\", key: \"1uufr5\" }],\n [\"line\", { x1: \"14\", x2: \"14\", y1: \"11\", y2: \"17\", key: \"xtxkd\" }]\n]);\n\nexport { Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Trash = createLucideIcon(\"Trash\", [\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }]\n]);\n\nexport { Trash as default };\n//# sourceMappingURL=trash.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Type = createLucideIcon(\"Type\", [\n [\"polyline\", { points: \"4 7 4 4 20 4 20 7\", key: \"1nosan\" }],\n [\"line\", { x1: \"9\", x2: \"15\", y1: \"20\", y2: \"20\", key: \"swin9y\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"4\", y2: \"20\", key: \"1tx1rr\" }]\n]);\n\nexport { Type as default };\n//# sourceMappingURL=type.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst X = createLucideIcon(\"X\", [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n]);\n\nexport { X as default };\n//# sourceMappingURL=x.js.map\n","import React, { createContext, useCallback, useContext, useState } from \"react\";\n\nexport interface Comment {\n id: string;\n text: string;\n author: string;\n timestamp: number;\n status: \"open\" | \"resolved\";\n replies: Reply[];\n selectedText: string; // The text that was selected when the comment was added\n}\n\nexport interface Reply {\n id: string;\n text: string;\n author: string;\n timestamp: number;\n}\n\ninterface CommentContextType {\n comments: Comment[];\n addComment: (\n comment: Omit<Comment, \"id\" | \"timestamp\" | \"status\" | \"replies\">\n ) => string;\n updateComment: (id: string, updates: Partial<Comment>) => void;\n deleteComment: (id: string) => void;\n addReply: (commentId: string, reply: Omit<Reply, \"id\" | \"timestamp\">) => void;\n resolveComment: (id: string) => void;\n getCommentById: (id: string) => Comment | undefined;\n}\n\nconst CommentContext = createContext<CommentContextType | undefined>(undefined);\n\nexport const useComments = () => {\n const context = useContext(CommentContext);\n if (!context) {\n throw new Error(\"useComments must be used within a CommentProvider\");\n }\n return context;\n};\n\ninterface CommentProviderProps {\n children: React.ReactNode;\n}\n\nexport const CommentProvider: React.FC<CommentProviderProps> = ({\n children,\n}) => {\n const [comments, setComments] = useState<Comment[]>([]);\n\n const addComment = useCallback(\n (commentData: Omit<Comment, \"id\" | \"timestamp\" | \"status\" | \"replies\">) => {\n const id = `comment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const newComment: Comment = {\n ...commentData,\n id,\n timestamp: Date.now(),\n status: \"open\",\n replies: [],\n };\n\n setComments((prev) => [...prev, newComment]);\n return id;\n },\n []\n );\n\n const updateComment = useCallback((id: string, updates: Partial<Comment>) => {\n setComments((prev) =>\n prev.map((comment) =>\n comment.id === id ? { ...comment, ...updates } : comment\n )\n );\n }, []);\n\n const deleteComment = useCallback((id: string) => {\n setComments((prev) => prev.filter((comment) => comment.id !== id));\n }, []);\n\n const addReply = useCallback(\n (commentId: string, replyData: Omit<Reply, \"id\" | \"timestamp\">) => {\n const newReply: Reply = {\n ...replyData,\n id: `reply-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n timestamp: Date.now(),\n };\n\n setComments((prev) =>\n prev.map((comment) =>\n comment.id === commentId\n ? { ...comment, replies: [...comment.replies, newReply] }\n : comment\n )\n );\n },\n []\n );\n\n const resolveComment = useCallback((id: string) => {\n setComments((prev) =>\n prev.map((comment) =>\n comment.id === id\n ? {\n ...comment,\n status: comment.status === \"open\" ? \"resolved\" : \"open\",\n }\n : comment\n )\n );\n }, []);\n\n const getCommentById = useCallback(\n (id: string) => {\n return comments.find((comment) => comment.id === id);\n },\n [comments]\n );\n\n const value = {\n comments,\n addComment,\n updateComment,\n deleteComment,\n addReply,\n resolveComment,\n getCommentById,\n };\n\n return (\n <CommentContext.Provider value={value}>{children}</CommentContext.Provider>\n );\n};\n","import type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n SerializedTextNode,\n Spread,\n} from \"lexical\";\nimport { $applyNodeReplacement, TextNode } from \"lexical\";\n\nexport type SerializedCommentedTextNode = Spread<\n {\n commentId: string;\n commentText: string;\n commentAuthor: string;\n commentTimestamp: number;\n },\n SerializedTextNode\n>;\n\nexport class CommentedTextNode extends TextNode {\n __commentId: string;\n __commentText: string;\n __commentAuthor: string;\n __commentTimestamp: number;\n\n static getType(): string {\n return \"commented-text\";\n }\n\n static clone(node: CommentedTextNode): CommentedTextNode {\n return new CommentedTextNode(\n node.__text,\n node.__commentId,\n node.__commentText,\n node.__commentAuthor,\n node.__commentTimestamp,\n node.__key\n );\n }\n\n constructor(\n text: string,\n commentId: string,\n commentText: string,\n commentAuthor: string,\n commentTimestamp: number,\n key?: NodeKey\n ) {\n super(text, key);\n this.__commentId = commentId;\n this.__commentText = commentText;\n this.__commentAuthor = commentAuthor;\n this.__commentTimestamp = commentTimestamp;\n }\n\n static importJSON(\n serializedNode: SerializedCommentedTextNode\n ): CommentedTextNode {\n const { text, commentId, commentText, commentAuthor, commentTimestamp } =\n serializedNode;\n const node = $createCommentedTextNode(\n text,\n commentId,\n commentText,\n commentAuthor,\n commentTimestamp\n );\n node.setFormat(serializedNode.format);\n node.setStyle(serializedNode.style);\n return node;\n }\n\n exportJSON(): SerializedCommentedTextNode {\n return {\n ...super.exportJSON(),\n commentId: this.__commentId,\n commentText: this.__commentText,\n commentAuthor: this.__commentAuthor,\n commentTimestamp: this.__commentTimestamp,\n type: \"commented-text\",\n version: 1,\n };\n }\n\n createDOM(config: EditorConfig): HTMLElement {\n const dom = super.createDOM(config);\n dom.className = \"commented-text\";\n dom.style.backgroundColor = \"#fef3c7\"; // Light amber background\n dom.style.borderRadius = \"2px\";\n dom.style.padding = \"1px 2px\";\n dom.style.cursor = \"pointer\";\n dom.title = `Comment: ${this.__commentText}`;\n dom.setAttribute(\"data-comment-id\", this.__commentId);\n dom.setAttribute(\"data-comment-text\", this.__commentText);\n dom.setAttribute(\"data-comment-author\", this.__commentAuthor);\n dom.setAttribute(\n \"data-comment-timestamp\",\n this.__commentTimestamp.toString()\n );\n return dom;\n }\n\n updateDOM(): false {\n return false;\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n span: (node: Node) => ({\n conversion: $convertCommentedTextElement,\n priority: 1,\n }),\n };\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement(\"span\");\n element.className = \"commented-text\";\n element.style.backgroundColor = \"#fef3c7\";\n element.style.borderRadius = \"2px\";\n element.style.padding = \"1px 2px\";\n element.textContent = this.__text;\n element.setAttribute(\"data-comment-id\", this.__commentId);\n element.setAttribute(\"data-comment-text\", this.__commentText);\n element.setAttribute(\"data-comment-author\", this.__commentAuthor);\n element.setAttribute(\n \"data-comment-timestamp\",\n this.__commentTimestamp.toString()\n );\n return { element };\n }\n\n getCommentId(): string {\n return this.__commentId;\n }\n\n getCommentText(): string {\n return this.__commentText;\n }\n\n getCommentAuthor(): string {\n return this.__commentAuthor;\n }\n\n getCommentTimestamp(): number {\n return this.__commentTimestamp;\n }\n\n setCommentText(text: string): void {\n const writable = this.getWritable();\n writable.__commentText = text;\n }\n}\n\nfunction $convertCommentedTextElement(\n domNode: Node\n): null | DOMConversionOutput {\n const node = domNode as HTMLElement;\n if (node.classList.contains(\"commented-text\")) {\n const text = node.textContent || \"\";\n const commentId = node.getAttribute(\"data-comment-id\") || \"\";\n const commentText = node.getAttribute(\"data-comment-text\") || \"\";\n const commentAuthor = node.getAttribute(\"data-comment-author\") || \"\";\n const commentTimestamp = parseInt(\n node.getAttribute(\"data-comment-timestamp\") || \"0\"\n );\n\n const commentedTextNode = $createCommentedTextNode(\n text,\n commentId,\n commentText,\n commentAuthor,\n commentTimestamp\n );\n return { node: commentedTextNode };\n }\n return null;\n}\n\nexport function $createCommentedTextNode(\n text: string,\n commentId: string,\n commentText: string,\n commentAuthor: string,\n commentTimestamp: number\n): CommentedTextNode {\n return $applyNodeReplacement(\n new CommentedTextNode(\n text,\n commentId,\n commentText,\n commentAuthor,\n commentTimestamp\n )\n );\n}\n\nexport function $isCommentedTextNode(\n node: LexicalNode | null | undefined\n): node is CommentedTextNode {\n return node instanceof CommentedTextNode;\n}\n","// packages/react/context/src/createContext.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/useCallbackRef.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/useLayoutEffect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = Boolean(globalThis?.document) ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/compose-refs/src/composeRefs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/slot/src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar Slot = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n});\nSlot.displayName = \"Slot\";\nvar SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\nSlotClone.displayName = \"SlotClone\";\nvar Slottable = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n};\nfunction isSlottable(child) {\n return React.isValidElement(child) && child.type === Slottable;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n childPropValue(...args);\n slotPropValue(...args);\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Slot;\nexport {\n Root,\n Slot,\n Slottable\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/primitive/src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/avatar/src/avatar.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n onImageLoadingStatusChange: setImageLoadingStatus,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }\n);\nAvatar.displayName = AVATAR_NAME;\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, src, onLoadingStatusChange = () => {\n }, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n const imageLoadingStatus = useImageLoadingStatus(src, imageProps.referrerPolicy);\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange(status);\n context.onImageLoadingStatusChange(status);\n });\n useLayoutEffect(() => {\n if (imageLoadingStatus !== \"idle\") {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }\n);\nAvatarImage.displayName = IMAGE_NAME;\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }\n);\nAvatarFallback.displayName = FALLBACK_NAME;\nfunction useImageLoadingStatus(src, referrerPolicy) {\n const [loadingStatus, setLoadingStatus] = React.useState(\"idle\");\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus(\"error\");\n return;\n }\n let isMounted = true;\n const image = new window.Image();\n const updateStatus = (status) => () => {\n if (!isMounted) return;\n setLoadingStatus(status);\n };\n setLoadingStatus(\"loading\");\n image.onload = updateStatus(\"loaded\");\n image.onerror = updateStatus(\"error\");\n image.src = src;\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n return () => {\n isMounted = false;\n };\n }, [src, referrerPolicy]);\n return loadingStatus;\n}\nvar Root = Avatar;\nvar Image = AvatarImage;\nvar Fallback = AvatarFallback;\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Fallback,\n Image,\n Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId], classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length;\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n } else if (currentCharacter === '(') {\n parenDepth++;\n } else if (currentCharacter === ')') {\n parenDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier);\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.substring(fullPrefix.length)) : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined\n };\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\nconst stripImportantModifier = baseClassName => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1);\n }\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1);\n }\n return baseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n const orderSensitiveModifiers = Object.fromEntries(config.orderSensitiveModifiers.map(modifier => [modifier, true]));\n const sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier];\n if (isPositionSensitive) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n };\n return sortModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isNever, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position';\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isLabelImage = label => imageLabels.has(label);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isLabelSize = label => sizeLabels.has(label);\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleOrigin = () => ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...scalePosition(), isArbitraryValue, isArbitraryVariable]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [themeColor]\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', isArbitraryVariable, isArbitraryValue, themeInsetShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scaleOrigin()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scaleOrigin()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['before', 'after', 'placeholder', 'file', 'marker', 'selection', 'first-line', 'first-letter', 'backdrop', '*', '**']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"cteditor-relative cteditor-flex cteditor-h-10 cteditor-w-10 cteditor-shrink-0 cteditor-overflow-hidden cteditor-rounded-full\",\n className\n )}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\n \"cteditor-aspect-square cteditor-h-full cteditor-w-full\",\n className\n )}\n {...props}\n />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"cteditor-flex cteditor-h-full cteditor-w-full cteditor-items-center cteditor-justify-center cteditor-rounded-full cteditor-bg-muted\",\n className\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarFallback, AvatarImage };\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst badgeVariants = cva(\n \"cteditor-inline-flex cteditor-items-center cteditor-rounded-md cteditor-border cteditor-px-2.5 cteditor-py-0.5 cteditor-text-xs cteditor-font-semibold cteditor-transition-colors focus:cteditor-outline-none focus:cteditor-ring-2 focus:cteditor-ring-ring focus:cteditor-ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"cteditor-border-transparent cteditor-bg-primary cteditor-text-primary-foreground cteditor-shadow hover:cteditor-bg-primary/80\",\n secondary:\n \"cteditor-border-transparent cteditor-bg-secondary cteditor-text-secondary-foreground hover:cteditor-bg-secondary/80\",\n destructive:\n \"cteditor-border-transparent cteditor-bg-destructive cteditor-text-destructive-foreground cteditor-shadow hover:cteditor-bg-destructive/80\",\n outline: \"cteditor-text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/slot.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenRef = React.isValidElement(children) ? getElementRef(children) : void 0;\n const ref = useComposedRefs(childrenRef, forwardedRef);\n if (React.isValidElement(children)) {\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = ref;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst buttonVariants = cva(\n \"cteditor-inline-flex cteditor-items-center cteditor-justify-center cteditor-gap-2 cteditor-whitespace-nowrap cteditor-rounded-md cteditor-text-sm cteditor-font-medium cteditor-transition-colors focus-visible:cteditor-outline-none focus-visible:cteditor-ring-0 focus-visible:cteditor-ring-ring disabled:cteditor-pointer-events-none disabled:cteditor-opacity-50 [&_svg]:cteditor-pointer-events-none [&_svg]:cteditor-size-6 [&_svg]:cteditor-shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"cteditor-bg-primary cteditor-text-primary-foreground cteditor-shadow hover:cteditor-bg-primary/90\",\n destructive:\n \"cteditor-bg-destructive cteditor-text-destructive-foreground cteditor-shadow-sm hover:cteditor-bg-destructive/90\",\n outline:\n \"cteditor-border cteditor-border-input cteditor-bg-background cteditor-shadow-sm hover:cteditor-bg-accent hover:cteditor-text-accent-foreground\",\n secondary:\n \"cteditor-bg-secondary cteditor-text-secondary-foreground cteditor-shadow-sm hover:cteditor-bg-secondary/80\",\n ghost:\n \"hover:cteditor-bg-accent hover:cteditor-text-accent-foreground focus:cteditor-outline-none focus:cteditor-ring-0\",\n link: \"cteditor-text-primary cteditor-underline-offset-4 hover:cteditor-underline\",\n toolbar: \"cteditor-bg-background cteditor-text-foreground\",\n },\n\n size: {\n default: \"cteditor-h-9 cteditor-px-4 cteditor-py-2\",\n sm: \"cteditor-h-7 cteditor-rounded-sm cteditor-px-1 cteditor-text-xs\",\n md: \"cteditor-h-8 cteditor-rounded-md cteditor-px-5 cteditor-text-sm\",\n lg: \"cteditor-h-9 cteditor-text-sm cteditor-rounded-md cteditor-px-8\",\n icon: \"cteditor-h-9 cteditor-w-9\",\n \"icon-sm\":\n \"cteditor-text-xs cteditor-h-6 cteditor-w-6 cteditor-rounded-sm cteditor-p-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n};\n","// packages/react/separator/src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"cteditor-shrink-0 cteditor-bg-border\",\n orientation === \"horizontal\"\n ? \"cteditor-h-[1px] cteditor-w-full\"\n : \"cteditor-h-full cteditor-w-[1px]\",\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","// packages/core/primitive/src/primitive.tsx\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nexport {\n composeEventHandlers\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\"useId\".toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-controllable-state/src/useControllableState.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n }\n}) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({ defaultProp, onChange });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const setter = nextValue;\n const value2 = typeof nextValue === \"function\" ? setter(prop) : nextValue;\n if (value2 !== prop) handleChange(value2);\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, handleChange]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const uncontrolledState = React.useState(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React.useRef(value);\n const handleChange = useCallbackRef(onChange);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n handleChange(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef, handleChange]);\n return uncontrolledState;\n}\nexport {\n useControllableState\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/useEscapeKeydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/dismissable-layer/src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/focus-scope/src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/portal/src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/presence/src/Presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// packages/react/presence/src/useStateMachine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// packages/react/presence/src/Presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef({});\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n if (node2) stylesRef.current = getComputedStyle(node2);\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Presence\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/focus-guards/src/FocusGuards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nvar Root = FocusGuards;\nexport {\n FocusGuards,\n Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n if (target instanceof ShadowRoot) {\n target = target.host;\n }\n else {\n target = target.parentNode;\n }\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","\"use client\";\n\n// packages/react/dialog/src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Sheet = SheetPrimitive.Root;\n\nconst SheetTrigger = SheetPrimitive.Trigger;\n\nconst SheetClose = SheetPrimitive.Close;\n\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"cteditor-fixed cteditor-inset-0 cteditor-z-[9999] cteditor-bg-black/80 data-[state=open]:cteditor-animate-in data-[state=closed]:cteditor-animate-out data-[state=closed]:cteditor-fade-out-0 data-[state=open]:cteditor-fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n \"cteditor-fixed cteditor-z-[9999] cteditor-gap-4 cteditor-bg-background cteditor-p-6 cteditor-shadow-lg cteditor-transition cteditor-ease-in-out data-[state=closed]:cteditor-duration-300 data-[state=open]:cteditor-duration-500 data-[state=open]:cteditor-animate-in data-[state=closed]:cteditor-animate-out\",\n {\n variants: {\n side: {\n top: \"cteditor-inset-x-0 cteditor-top-0 cteditor-border-b data-[state=closed]:cteditor-slide-out-to-top data-[state=open]:cteditor-slide-in-from-top\",\n bottom:\n \"cteditor-inset-x-0 cteditor-bottom-0 cteditor-border-t data-[state=closed]:cteditor-slide-out-to-bottom data-[state=open]:cteditor-slide-in-from-bottom\",\n left: \"cteditor-inset-y-0 cteditor-left-0 cteditor-h-full cteditor-w-3/4 cteditor-border-r data-[state=closed]:cteditor-slide-out-to-left data-[state=open]:cteditor-slide-in-from-left sm:cteditor-max-w-sm\",\n right:\n \"cteditor-inset-y-0 cteditor-right-0 cteditor-h-full cteditor-w-3/4 cteditor-border-l data-[state=closed]:cteditor-slide-out-to-right data-[state=open]:cteditor-slide-in-from-right sm:cteditor-max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n);\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n <SheetPrimitive.Close className=\"cteditor-absolute cteditor-right-4 cteditor-top-4 cteditor-rounded-sm cteditor-opacity-70 cteditor-ring-offset-background cteditor-transition-opacity hover:cteditor-opacity-100 focus:cteditor-outline-none focus:cteditor-ring-2 focus:cteditor-ring-ring focus:cteditor-ring-offset-2 disabled:cteditor-pointer-events-none data-[state=open]:cteditor-bg-secondary cteditor-text-foreground\">\n <X className=\"cteditor-h-4 cteditor-w-4\" />\n <span className=\"!cteditor-sr-only\">Close</span>\n </SheetPrimitive.Close>\n {children}\n </SheetPrimitive.Content>\n </SheetPortal>\n));\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cteditor-flex cteditor-flex-col cteditor-space-y-2 cteditor-text-center sm:cteditor-text-left\",\n className\n )}\n {...props}\n />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cteditor-flex cteditor-flex-col-reverse sm:cteditor-flex-row sm:cteditor-justify-end sm:cteditor-space-x-2\",\n className\n )}\n {...props}\n />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\n \"cteditor-text-lg cteditor-font-semibold cteditor-text-foreground\",\n className\n )}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"cteditor-text-sm cteditor-text-muted-foreground\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetPortal,\n SheetTitle,\n SheetTrigger,\n};\n","\"use client\";\n\n// packages/react/collection/src/collection.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(Slot, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(Slot, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\nexport {\n createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/Direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/roving-focus/src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId = null, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId,\n onChange: onCurrentTabStopIdChange\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n })\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/tabs/src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"cteditor-inline-flex cteditor-h-9 cteditor-items-center cteditor-justify-center cteditor-rounded-lg cteditor-bg-muted cteditor-p-1 cteditor-text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"cteditor-inline-flex cteditor-items-center cteditor-justify-center cteditor-whitespace-nowrap cteditor-rounded-md cteditor-px-3 cteditor-py-1 cteditor-text-sm cteditor-font-medium cteditor-ring-offset-background cteditor-transition-all focus-visible:cteditor-outline-none focus-visible:cteditor-ring-2 focus-visible:cteditor-ring-ring focus-visible:cteditor-ring-offset-2 disabled:cteditor-pointer-events-none disabled:cteditor-opacity-50 data-[state=active]:cteditor-bg-background data-[state=active]:cteditor-text-foreground data-[state=active]:cteditor-shadow\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"cteditor-mt-2 cteditor-ring-offset-background focus-visible:cteditor-outline-none focus-visible:cteditor-ring-2 focus-visible:cteditor-ring-ring focus-visible:cteditor-ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsContent, TabsList, TabsTrigger };\n","import * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createTextNode, $getRoot } from \"lexical\";\nimport {\n Check,\n ChevronDown,\n ChevronRight,\n Clock,\n Edit3,\n LucideCornerDownLeft,\n MessageSquare,\n ReplyIcon,\n Trash2,\n} from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useComments } from \"src/context/CommentContext\";\nimport { $isCommentedTextNode } from \"src/nodes/CommentedTextNode\";\n\nimport { Avatar, AvatarFallback } from \"../ui/avatar\";\nimport { Badge } from \"../ui/badge\";\nimport { Button } from \"../ui/button\";\nimport { Card, CardContent } from \"../ui/card\";\nimport { Separator } from \"../ui/separator\";\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from \"../ui/sheet\";\nimport { Tabs, TabsList, TabsTrigger } from \"../ui/tabs\";\nimport { Textarea } from \"../ui/textarea\";\n\ninterface CommentSidebarProps {\n isOpen: boolean;\n onClose: () => void;\n onCommentCountChange?: (count: number) => void;\n}\n\nconst CommentSidebar: React.FC<CommentSidebarProps> = ({\n isOpen,\n onClose,\n onCommentCountChange,\n}) => {\n const [editor] = useLexicalComposerContext();\n const { comments, updateComment, deleteComment, addReply, resolveComment } =\n useComments();\n const [activeTab, setActiveTab] = useState<\"open\" | \"resolved\">(\"open\");\n const [replyingTo, setReplyingTo] = useState<string | null>(null);\n const [editingComment, setEditingComment] = useState<string | null>(null);\n const [replyText, setReplyText] = useState(\"\");\n const [editText, setEditText] = useState(\"\");\n const [expandedComments, setExpandedComments] = useState<Set<string>>(\n new Set()\n );\n\n // Update comment count when comments change\n useEffect(() => {\n onCommentCountChange?.(comments.length);\n }, [comments.length, onCommentCountChange]);\n\n const handleDeleteComment = useCallback(\n (commentId: string) => {\n // Remove from context\n deleteComment(commentId);\n // Also remove the highlighted text from editor\n editor.update(() => {\n const root = $getRoot();\n function findAndDeleteComment(node: any): boolean {\n if ($isCommentedTextNode(node) && node.getCommentId() === commentId) {\n const textNode = $createTextNode(node.getTextContent());\n node.replace(textNode);\n return true;\n }\n const children = node.getChildren();\n for (const child of children) {\n if (findAndDeleteComment(child)) {\n return true;\n }\n }\n return false;\n }\n findAndDeleteComment(root);\n });\n },\n [editor, deleteComment]\n );\n\n const handleEditComment = useCallback(\n (commentId: string, newText: string) => {\n updateComment(commentId, { text: newText });\n // Also update the node in editor\n editor.update(() => {\n const root = $getRoot();\n function findAndUpdateComment(node: any): boolean {\n if ($isCommentedTextNode(node) && node.getCommentId() === commentId) {\n node.setCommentText(newText);\n return true;\n }\n const children = node.getChildren();\n for (const child of children) {\n if (findAndUpdateComment(child)) {\n return true;\n }\n }\n return false;\n }\n findAndUpdateComment(root);\n });\n setEditingComment(null);\n setEditText(\"\");\n },\n [editor, updateComment]\n );\n\n const handleAddReply = useCallback(\n (commentId: string, replyText: string) => {\n addReply(commentId, {\n text: replyText,\n author: \"Anonymous\",\n });\n setReplyingTo(null);\n setReplyText(\"\");\n },\n [addReply]\n );\n\n const handleJumpToComment = useCallback(\n (commentId: string) => {\n editor.update(() => {\n const root = $getRoot();\n function findCommentNode(node: any): any {\n if ($isCommentedTextNode(node) && node.getCommentId() === commentId) {\n return node;\n }\n const children = node.getChildren();\n for (const child of children) {\n const found = findCommentNode(child);\n if (found) return found;\n }\n return null;\n }\n const commentNode = findCommentNode(root);\n if (commentNode) {\n commentNode.selectStart();\n const domNode = editor.getElementByKey(commentNode.getKey());\n if (domNode) {\n domNode.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n }\n });\n },\n [editor]\n );\n\n const formatTimestamp = (timestamp: number) => {\n const date = new Date(timestamp);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / (1000 * 60));\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffMins < 1) return \"Just now\";\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return date.toLocaleDateString();\n };\n\n const filteredComments = comments.filter(\n (comment) => comment.status === activeTab\n );\n\n const toggleCommentExpansion = (commentId: string) => {\n setExpandedComments((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(commentId)) {\n newSet.delete(commentId);\n } else {\n newSet.add(commentId);\n }\n return newSet;\n });\n };\n\n return (\n <Sheet open={isOpen} onOpenChange={onClose}>\n <SheetContent\n side=\"right\"\n className=\"cteditor-w-[400px] sm:cteditor-w-[400px] cteditor-p-0 cteditor-flex cteditor-flex-col\"\n >\n <SheetHeader className=\"cteditor-px-6 cteditor-py-4 cteditor-border-b\">\n <SheetTitle className=\"cteditor-flex cteditor-items-center cteditor-gap-2\">\n <MessageSquare className=\"cteditor-h-5 cteditor-w-5 cteditor-text-primary\" />\n Comments\n </SheetTitle>\n </SheetHeader>\n\n <div className=\"cteditor-flex-1 cteditor-flex cteditor-flex-col cteditor-overflow-hidden\">\n {/* Tabs */}\n <div className=\"cteditor-px-6 cteditor-pb-4 cteditor-border-b\">\n <Tabs\n value={activeTab}\n onValueChange={(value) =>\n setActiveTab(value as \"open\" | \"resolved\")\n }\n >\n <TabsList className=\"cteditor-grid cteditor-w-full cteditor-grid-cols-2\">\n <TabsTrigger\n value=\"open\"\n className=\"cteditor-flex cteditor-items-center cteditor-gap-2\"\n >\n Open\n <Badge variant=\"secondary\" className=\"cteditor-text-xs\">\n {comments.filter((c) => c.status === \"open\").length}\n </Badge>\n </TabsTrigger>\n <TabsTrigger\n value=\"resolved\"\n className=\"cteditor-flex cteditor-items-center cteditor-gap-2\"\n >\n Resolved\n <Badge variant=\"secondary\" className=\"cteditor-text-xs\">\n {comments.filter((c) => c.status === \"resolved\").length}\n </Badge>\n </TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n\n {/* Comments List */}\n <div className=\"cteditor-flex-1 cteditor-overflow-y-auto\">\n {filteredComments.length === 0 ? (\n <div className=\"cteditor-flex cteditor-flex-col cteditor-items-center cteditor-justify-center cteditor-h-full cteditor-p-6 cteditor-text-center\">\n <MessageSquare className=\"cteditor-h-12 cteditor-w-12 cteditor-text-muted-foreground cteditor-mb-4\" />\n <h3 className=\"cteditor-text-lg cteditor-font-medium cteditor-text-muted-foreground cteditor-mb-2\">\n No {activeTab} comments\n </h3>\n <p className=\"cteditor-text-sm cteditor-text-muted-foreground\">\n {activeTab === \"open\"\n ? \"Start a conversation by adding a comment\"\n : \"No resolved comments yet\"}\n </p>\n </div>\n ) : (\n <div className=\"cteditor-p-4 cteditor-space-y-4\">\n {filteredComments.map((comment) => {\n const isExpanded = expandedComments.has(comment.id);\n return (\n <Card\n key={comment.id}\n className=\"cteditor-transition-all cteditor-duration-200 hover:cteditor-shadow-md\"\n >\n <CardContent className=\"cteditor-p-4\">\n {/* Comment Header */}\n <div className=\"cteditor-flex cteditor-items-start cteditor-justify-between cteditor-mb-3\">\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2\">\n <Avatar className=\"cteditor-h-6 cteditor-w-6\">\n <AvatarFallback className=\"cteditor-text-xs\">\n {comment.author.charAt(0)}\n </AvatarFallback>\n </Avatar>\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-text-sm\">\n <span className=\"cteditor-font-medium\">\n {comment.author}\n </span>\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-1 cteditor-text-muted-foreground\">\n <Clock className=\"cteditor-h-3 cteditor-w-3\" />\n <span className=\"cteditor-text-xs\">\n {formatTimestamp(comment.timestamp)}\n </span>\n </div>\n </div>\n </div>\n <div className=\"cteditor-flex cteditor-items-center\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"cteditor-h-6 cteditor-w-6\"\n onClick={(e) => {\n e.stopPropagation();\n handleJumpToComment(comment.id);\n }}\n title=\"Jump to comment in editor\"\n >\n <MessageSquare className=\"!cteditor-size-5 cteditor-text-primary\" />\n </Button>\n {comment.replies.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"cteditor-h-6 cteditor-w-6\"\n onClick={(e) => {\n e.stopPropagation();\n toggleCommentExpansion(comment.id);\n }}\n >\n {isExpanded ? (\n <ChevronDown className=\"!cteditor-size-5\" />\n ) : (\n <ChevronRight className=\"!cteditor-size-5\" />\n )}\n </Button>\n )}\n </div>\n </div>\n\n {/* Selected Text Preview */}\n {comment.selectedText && (\n <div className=\"cteditor-mb-3 cteditor-p-3 cteditor-bg-primary/5 cteditor-border-l-4 cteditor-border-primary cteditor-rounded-r-md\">\n <p className=\"cteditor-text-xs cteditor-font-medium cteditor-text-primary cteditor-mb-1\">\n Selected text:\n </p>\n <p className=\"cteditor-text-xs cteditor-text-muted-foreground cteditor-italic\">\n &ldquo;{comment.selectedText}&rdquo;\n </p>\n </div>\n )}\n\n {/* Comment Content */}\n <div className=\"cteditor-mb-3\">\n {editingComment === comment.id ? (\n <div className=\"cteditor-space-y-3\">\n <Textarea\n value={editText}\n onChange={(e) => setEditText(e.target.value)}\n className=\"cteditor-min-h-[80px]\"\n autoFocus\n />\n <div className=\"cteditor-flex cteditor-gap-2\">\n <Button\n size=\"sm\"\n onClick={() =>\n handleEditComment(comment.id, editText)\n }\n disabled={!editText.trim()}\n >\n Save\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setEditingComment(null);\n setEditText(\"\");\n }}\n >\n Cancel\n </Button>\n </div>\n </div>\n ) : (\n <p className=\"cteditor-text-sm cteditor-leading-relaxed\">\n {comment.text}\n </p>\n )}\n </div>\n\n {/* Replies Count */}\n {comment.replies.length > 0 && (\n <div className=\"cteditor-text-xs cteditor-text-muted-foreground cteditor-mb-3\">\n {comment.replies.length}{\" \"}\n {comment.replies.length === 1 ? \"reply\" : \"replies\"}\n </div>\n )}\n\n {/* Replies */}\n {isExpanded && comment.replies.length > 0 && (\n <div className=\"cteditor-ml-4 cteditor-space-y-2 cteditor-mb-3\">\n {comment.replies.map((reply) => (\n <div\n key={reply.id}\n className=\"cteditor-p-3 cteditor-bg-muted/50 cteditor-rounded-md\"\n >\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-mb-2\">\n <Avatar className=\"cteditor-h-4 cteditor-w-4\">\n <AvatarFallback className=\"cteditor-text-xs\">\n {reply.author.charAt(0)}\n </AvatarFallback>\n </Avatar>\n <span className=\"cteditor-text-xs cteditor-font-medium\">\n {reply.author}\n </span>\n <span className=\"cteditor-text-xs cteditor-text-muted-foreground\">\n {formatTimestamp(reply.timestamp)}\n </span>\n </div>\n <p className=\"cteditor-text-xs\">{reply.text}</p>\n </div>\n ))}\n </div>\n )}\n\n {/* Reply Input */}\n {replyingTo === comment.id && (\n <div className=\"cteditor-mt-3 cteditor-space-y-3\">\n <Textarea\n value={replyText}\n onChange={(e) => setReplyText(e.target.value)}\n placeholder=\"Write a reply...\"\n className=\"cteditor-min-h-[60px]\"\n autoFocus\n />\n <div className=\"cteditor-flex cteditor-gap-2\">\n <Button\n size=\"sm\"\n onClick={() =>\n handleAddReply(comment.id, replyText)\n }\n disabled={!replyText.trim()}\n >\n Reply\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setReplyingTo(null);\n setReplyText(\"\");\n }}\n >\n Cancel\n </Button>\n </div>\n </div>\n )}\n\n <Separator className=\"cteditor-my-3 cteditor-bg-primary/20\" />\n\n {/* Actions */}\n <div className=\"cteditor-flex cteditor-items-center cteditor-justify-between\">\n <div className=\"cteditor-flex cteditor-gap-1\">\n <Button\n variant=\"secondary\"\n size=\"icon\"\n className=\"cteditor-h-6 cteditor-w-6\"\n onClick={(e) => {\n e.stopPropagation();\n setReplyingTo(\n replyingTo === comment.id ? null : comment.id\n );\n setReplyText(\"\");\n }}\n title=\"Reply\"\n >\n <ReplyIcon className=\"!cteditor-size-4\" />\n </Button>\n <Button\n variant=\"secondary\"\n size=\"icon\"\n className=\"cteditor-h-6 cteditor-w-6\"\n onClick={(e) => {\n e.stopPropagation();\n setEditingComment(comment.id);\n setEditText(comment.text);\n }}\n title=\"Edit\"\n >\n <Edit3 className=\"!cteditor-size-4\" />\n </Button>\n <Button\n variant=\"destructive\"\n size=\"icon\"\n className=\"cteditor-h-6 cteditor-w-6\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteComment(comment.id);\n }}\n title=\"Delete\"\n >\n <Trash2 className=\"!cteditor-size-4\" />\n </Button>\n </div>\n\n <Button\n variant={\n comment.status === \"open\" ? \"default\" : \"outline\"\n }\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n resolveComment(comment.id);\n }}\n className=\"cteditor-h-7 cteditor-px-2 cteditor-text-sm\"\n >\n {comment.status === \"open\" ? (\n <>\n <Check className=\"cteditor-h-3 cteditor-w-3\" />\n Resolve\n </>\n ) : (\n <>\n <LucideCornerDownLeft className=\"!cteditor-size-4\" />\n Reopen\n </>\n )}\n </Button>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default CommentSidebar;\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}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(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}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\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 // 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 // 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\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 = ['left', 'top'].includes(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 = ['top', 'left'].includes(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","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}\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) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n return [':popover-open', ':modal'].some(selector => {\n try {\n return element.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\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 ['transform', 'translate', 'scale', 'rotate', 'perspective'].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) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].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}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(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","import { rectToClientRect, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, 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(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(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, ignoreScrollbarX) {\n if (ignoreScrollbarX === void 0) {\n ignoreScrollbarX = false;\n }\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n // RTL <body> scrollbar.\n 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, true) : 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(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\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 return {\n width,\n height,\n x,\n y\n };\n}\n\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(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(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(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 && ['absolute', 'fixed'].includes(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 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 // 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 offsets.x = getWindowScrollBarX(documentElement);\n }\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(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(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(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, offset as offset$1, shift as shift$1, limitShift as limitShift$1, flip as flip$1, size as size$1, autoPlacement as autoPlacement$1, hide as hide$1, inline as inline$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\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","// packages/react/arrow/src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/useSize.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/popper/src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n context.onAnchorChange(virtualRef?.current || ref.current);\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/visually-hidden/src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...props,\n ref: forwardedRef,\n style: {\n // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n ...props.style\n }\n }\n );\n }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n Root,\n VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/tooltip/src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Slottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const [isOpenDelayed, setIsOpenDelayed] = React.useState(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayed,\n delayDuration,\n onOpen: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n setIsOpenDelayed(false);\n }, []),\n onClose: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => setIsOpenDelayed(true),\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: (open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n }\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayed) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar TooltipContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event) => {\n const target = event.target;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n ]\n }\n )\n }\n );\n }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"cteditor-z-[9999] cteditor-overflow-hidden cteditor-rounded-md cteditor-bg-primary cteditor-px-3 cteditor-py-1.5 cteditor-text-xs cteditor-text-primary-foreground cteditor-animate-in cteditor-fade-in-0 cteditor-zoom-in-95 data-[state=closed]:cteditor-animate-out data-[state=closed]:cteditor-fade-out-0 data-[state=closed]:cteditor-zoom-out-95 data-[side=bottom]:cteditor-slide-in-from-top-2 data-[side=left]:cteditor-slide-in-from-right-2 data-[side=right]:cteditor-slide-in-from-left-2 data-[side=top]:cteditor-slide-in-from-bottom-2 cteditor-origin-[--radix-tooltip-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","\"use client\";\n\nimport { MessageSquare } from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nimport { Badge } from \"../ui/badge\";\nimport { Button } from \"../ui/button\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../ui/tooltip\";\n\ninterface CommentToggleProps {\n isOpen: boolean;\n onClick: () => void;\n commentCount?: number;\n}\n\nconst CommentToggle: React.FC<CommentToggleProps> = ({\n isOpen,\n onClick,\n commentCount = 0,\n}) => {\n return (\n <div\n className=\"cteditor-flex cteditor-bg-background cteditor-text-foreground cteditor-px-2.5 cteditor-py-[7px] cteditor-rounded-lg cteditor-h-11 cteditor-items-center cteditor-justify-center\n\"\n >\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n // variant={isOpen ? \"default\" : \"outline\"}\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={onClick}\n className={cn(\n \"cteditor-relative cteditor-transition-all cteditor-duration-200\",\n isOpen && \"cteditor-bg-primary text-primary-foreground\"\n )}\n title={`${isOpen ? \"Hide\" : \"Show\"} comments`}\n >\n <MessageSquare className=\"!cteditor-size-4\" />\n {/* Comment count badge */}\n {commentCount > 0 && (\n <Badge\n variant=\"destructive\"\n className=\"cteditor-absolute cteditor--top-2 cteditor--right-2 cteditor-h-5 cteditor-w-5 cteditor-p-0 cteditor-flex cteditor-items-center cteditor-justify-center cteditor-text-xs cteditor-font-medium\"\n >\n {commentCount > 99 ? \"99+\" : commentCount}\n </Badge>\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Comments</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n );\n};\n\nexport default CommentToggle;\n","import { $generateNodesFromDOM } from \"@lexical/html\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getRoot } from \"lexical\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { useHtmlView } from \"src/context/HtmlViewContext\";\n\nconst HtmlViewDisplay: React.FC = () => {\n const {\n isHtmlView,\n htmlContent,\n setHtmlContent,\n isUserTyping,\n setIsUserTyping,\n canUpdateFromEditor,\n setCanUpdateFromEditor,\n } = useHtmlView();\n const [editor] = useLexicalComposerContext();\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const lastCursorPosition = useRef({ start: 0, end: 0 });\n const [syncStatus, setSyncStatus] = useState<\n \"idle\" | \"syncing\" | \"success\" | \"error\"\n >(\"idle\");\n\n // Cleanup when HTML view is disabled\n useEffect(() => {\n if (!isHtmlView) {\n setIsUserTyping(false);\n setCanUpdateFromEditor(true);\n }\n }, [isHtmlView, setIsUserTyping, setCanUpdateFromEditor]);\n\n // Preserve cursor position when content updates from editor\n useEffect(() => {\n if (\n isHtmlView &&\n textareaRef.current &&\n canUpdateFromEditor &&\n !isUserTyping\n ) {\n // Store current cursor position\n const currentSelection = {\n start: textareaRef.current.selectionStart,\n end: textareaRef.current.selectionEnd,\n };\n\n // Update the textarea value\n textareaRef.current.value = htmlContent;\n\n // Restore cursor position if it was within the content\n if (\n currentSelection.start <= htmlContent.length &&\n currentSelection.end <= htmlContent.length\n ) {\n textareaRef.current.setSelectionRange(\n currentSelection.start,\n currentSelection.end\n );\n }\n }\n }, [htmlContent, isHtmlView, canUpdateFromEditor, isUserTyping]);\n\n // Sync HTML content to editor\n const syncToEditor = async () => {\n if (textareaRef.current) {\n const htmlContent = textareaRef.current.value;\n\n setSyncStatus(\"syncing\");\n\n try {\n // Mark this update as coming from HTML to prevent sync loop\n if ((editor as any)._markAsHtmlUpdate) {\n (editor as any)._markAsHtmlUpdate();\n }\n\n // Update editor content\n editor.update(() => {\n try {\n const parser = new DOMParser();\n const dom = parser.parseFromString(htmlContent, \"text/html\");\n const nodes = $generateNodesFromDOM(editor, dom);\n\n $getRoot()\n .clear()\n .append(...nodes);\n } catch (error) {\n console.warn(\"Failed to parse HTML:\", error);\n throw new Error(\n \"Failed to parse HTML. Please check your HTML syntax.\"\n );\n }\n });\n\n setSyncStatus(\"success\");\n setTimeout(() => setSyncStatus(\"idle\"), 2000);\n } catch (error) {\n console.error(\"Sync error:\", error);\n setSyncStatus(\"error\");\n setTimeout(() => setSyncStatus(\"idle\"), 3000);\n alert(\n error instanceof Error\n ? error.message\n : \"Failed to sync HTML to editor\"\n );\n }\n }\n };\n\n // Now we can do conditional rendering after all hooks are called\n if (!isHtmlView) {\n return null;\n }\n\n const handleHtmlChange = (newHtmlContent: string) => {\n // Store cursor position before any updates\n if (textareaRef.current) {\n lastCursorPosition.current = {\n start: textareaRef.current.selectionStart,\n end: textareaRef.current.selectionEnd,\n };\n }\n\n setIsUserTyping(true);\n setCanUpdateFromEditor(false);\n\n // Update the HTML content immediately for responsive UI\n setHtmlContent(newHtmlContent);\n };\n\n const handleTextareaFocus = () => {\n setIsUserTyping(true);\n setCanUpdateFromEditor(false);\n };\n\n const handleTextareaBlur = () => {\n // Small delay to allow for any final changes\n setTimeout(() => {\n setIsUserTyping(false);\n setCanUpdateFromEditor(true);\n }, 100);\n };\n\n const handleTextareaClick = () => {\n setIsUserTyping(true);\n setCanUpdateFromEditor(false);\n };\n\n const handleTextareaKeyDown = () => {\n setIsUserTyping(true);\n setCanUpdateFromEditor(false);\n };\n\n const getSyncButtonStyle = () => {\n const baseStyle = {\n border: \"none\",\n borderRadius: \"4px\",\n padding: \"4px 8px\",\n fontSize: \"11px\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n transition: \"all 0.2s ease\",\n };\n\n switch (syncStatus) {\n case \"syncing\":\n return {\n ...baseStyle,\n background: \"hsl(var(--muted))\",\n color: \"hsl(var(--muted-foreground))\",\n cursor: \"not-allowed\",\n };\n case \"success\":\n return {\n ...baseStyle,\n background: \"hsl(var(--chart-2))\",\n color: \"white\",\n };\n case \"error\":\n return {\n ...baseStyle,\n background: \"hsl(var(--destructive))\",\n color: \"hsl(var(--destructive-foreground))\",\n };\n default:\n return {\n ...baseStyle,\n background: \"hsl(var(--primary))\",\n color: \"hsl(var(--primary-foreground))\",\n };\n }\n };\n\n const getSyncButtonText = () => {\n switch (syncStatus) {\n case \"syncing\":\n return \"Syncing...\";\n case \"success\":\n return \"Synced!\";\n case \"error\":\n return \"Error!\";\n default:\n return \"Sync to Editor\";\n }\n };\n\n return (\n <div className=\"htmlView\" style={{ marginTop: \"16px\" }}>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginBottom: \"8px\",\n padding: \"8px 12px\",\n background: isUserTyping ? \"hsl(var(--accent))\" : \"hsl(var(--muted))\",\n borderRadius: \"6px\",\n fontSize: \"12px\",\n color: isUserTyping\n ? \"hsl(var(--accent-foreground))\"\n : \"hsl(var(--muted-foreground))\",\n }}\n >\n <span>HTML View</span>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n {isUserTyping && (\n <span\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n fontWeight: \"500\",\n }}\n >\n <div\n style={{\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n background: \"currentColor\",\n animation: \"pulse 1.5s ease-in-out infinite\",\n }}\n />\n Editing...\n </span>\n )}\n <button\n onClick={syncToEditor}\n disabled={syncStatus === \"syncing\"}\n style={getSyncButtonStyle()}\n onMouseEnter={(e) => {\n if (syncStatus === \"idle\") {\n e.currentTarget.style.opacity = \"0.8\";\n }\n }}\n onMouseLeave={(e) => {\n if (syncStatus === \"idle\") {\n e.currentTarget.style.opacity = \"1\";\n }\n }}\n title=\"Sync HTML to Editor\"\n >\n {syncStatus === \"syncing\" ? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n style={{ animation: \"spin 1s linear infinite\" }}\n >\n <path d=\"M21 12a9 9 0 11-6.219-8.56\" />\n </svg>\n ) : (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M21 2v6h-6\" />\n <path d=\"M3 12a9 9 0 0 1 15-6.7L21 8\" />\n <path d=\"M3 22v-6h6\" />\n <path d=\"M21 12a9 9 0 0 1-15 6.7L3 16\" />\n </svg>\n )}\n {getSyncButtonText()}\n </button>\n </div>\n </div>\n <textarea\n ref={textareaRef}\n value={htmlContent}\n onChange={(e) => handleHtmlChange(e.target.value)}\n onFocus={handleTextareaFocus}\n onBlur={handleTextareaBlur}\n onClick={handleTextareaClick}\n onKeyDown={handleTextareaKeyDown}\n style={{\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n width: \"100%\",\n height: \"400px\",\n fontFamily: \"monospace\",\n fontSize: \"13px\",\n padding: \"12px\",\n border: `1px solid ${isUserTyping ? \"hsl(var(--accent))\" : \"hsl(var(--border))\"}`,\n borderRadius: \"8px\",\n resize: \"vertical\",\n lineHeight: \"1.4\",\n outline: \"none\",\n transition: \"border-color 0.2s ease\",\n whiteSpace: \"pre-wrap\",\n wordWrap: \"break-word\",\n }}\n placeholder=\"HTML content will appear here... Edit and click 'Sync to Editor' to apply changes.\"\n />\n </div>\n );\n};\n\nexport default HtmlViewDisplay;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getNodeByKey } from \"lexical\";\nimport React, { useCallback, useState } from \"react\";\nimport { CommentNode } from \"src/nodes/CommentNode\";\n\ninterface CommentViewProps {\n text: string;\n author: string;\n timestamp: number;\n nodeKey: string;\n}\n\nconst CommentView: React.FC<CommentViewProps> = ({\n text,\n author,\n timestamp,\n nodeKey,\n}) => {\n const [editor] = useLexicalComposerContext();\n const [isHovered, setIsHovered] = useState(false);\n const [isEditing, setIsEditing] = useState(false);\n const [editText, setEditText] = useState(text);\n\n const handleDeleteComment = useCallback(() => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if (node) {\n node.remove();\n }\n });\n }, [editor, nodeKey]);\n\n const handleEditComment = useCallback(() => {\n setIsEditing(true);\n setEditText(text);\n }, [text]);\n\n const handleSaveEdit = useCallback(() => {\n if (editText.trim()) {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if (node instanceof CommentNode) {\n node.setText(editText.trim());\n }\n });\n setIsEditing(false);\n }\n }, [editor, nodeKey, editText]);\n\n const handleCancelEdit = useCallback(() => {\n setIsEditing(false);\n setEditText(text);\n }, [text]);\n\n const formatTimestamp = (timestamp: number) => {\n const date = new Date(timestamp);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) {\n return date.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n } else if (diffDays === 1) {\n return \"Yesterday\";\n } else if (diffDays < 7) {\n return `${diffDays} days ago`;\n } else {\n return date.toLocaleDateString([], { month: \"short\", day: \"numeric\" });\n }\n };\n\n // Don't render anything visible in the editor - comments only show in sidebar\n return null;\n};\n\nexport default CommentView;\n","import type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from \"lexical\";\nimport { $applyNodeReplacement, DecoratorNode } from \"lexical\";\nimport React from \"react\";\nimport CommentView from \"src/components/CommentView\";\n\nexport interface CommentPayload {\n text: string;\n author?: string;\n timestamp?: number;\n key?: NodeKey;\n}\n\nfunction $convertCommentElement(domNode: Node): null | DOMConversionOutput {\n const div = domNode as HTMLElement;\n if (div.classList.contains(\"comment-node\")) {\n const text = div.getAttribute(\"data-comment-text\") || \"\";\n const author = div.getAttribute(\"data-comment-author\") || \"\";\n const timestamp = parseInt(\n div.getAttribute(\"data-comment-timestamp\") || \"0\"\n );\n const node = $createCommentNode({ text, author, timestamp });\n return { node };\n }\n return null;\n}\n\nexport type SerializedCommentNode = Spread<\n {\n text: string;\n author: string;\n timestamp: number;\n },\n SerializedLexicalNode\n>;\n\nexport class CommentNode extends DecoratorNode<JSX.Element> {\n __text: string;\n __author: string;\n __timestamp: number;\n\n static getType(): string {\n return \"comment\";\n }\n\n static clone(node: CommentNode): CommentNode {\n return new CommentNode(\n node.__text,\n node.__author,\n node.__timestamp,\n node.__key\n );\n }\n\n static importJSON(serializedNode: SerializedCommentNode): CommentNode {\n const { text, author, timestamp } = serializedNode;\n const node = $createCommentNode({ text, author, timestamp });\n return node;\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement(\"div\");\n element.className = \"comment-node\";\n element.setAttribute(\"data-comment-text\", this.__text);\n element.setAttribute(\"data-comment-author\", this.__author);\n element.setAttribute(\"data-comment-timestamp\", this.__timestamp.toString());\n return { element };\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div: (node: Node) => ({\n conversion: $convertCommentElement,\n priority: 1,\n }),\n };\n }\n\n constructor(\n text: string,\n author = \"\",\n timestamp: number = Date.now(),\n key?: NodeKey\n ) {\n super(key);\n this.__text = text;\n this.__author = author;\n this.__timestamp = timestamp;\n }\n\n exportJSON(): SerializedCommentNode {\n return {\n text: this.__text,\n author: this.__author,\n timestamp: this.__timestamp,\n type: \"comment\",\n version: 1,\n };\n }\n\n setText(text: string): void {\n const writable = this.getWritable();\n writable.__text = text;\n }\n\n setAuthor(author: string): void {\n const writable = this.getWritable();\n writable.__author = author;\n }\n\n createDOM(config: EditorConfig): HTMLElement {\n const div = document.createElement(\"div\");\n const theme = config.theme;\n const className = theme.comment;\n if (className !== undefined) {\n div.className = className;\n }\n return div;\n }\n\n updateDOM(): false {\n return false;\n }\n\n getText(): string {\n return this.__text;\n }\n\n getAuthor(): string {\n return this.__author;\n }\n\n getTimestamp(): number {\n return this.__timestamp;\n }\n\n decorate(): JSX.Element {\n return (\n <CommentView\n text={this.__text}\n author={this.__author}\n timestamp={this.__timestamp}\n nodeKey={this.getKey()}\n />\n );\n }\n}\n\nexport function $createCommentNode({\n text,\n author,\n timestamp,\n key,\n}: CommentPayload): CommentNode {\n return $applyNodeReplacement(\n new CommentNode(text, author || \"\", timestamp || Date.now(), key)\n );\n}\n\nexport function $isCommentNode(\n node: LexicalNode | null | undefined\n): node is CommentNode {\n return node instanceof CommentNode;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport DescriptionIcon from \"@mui/icons-material/Description\";\nimport FolderZipIcon from \"@mui/icons-material/FolderZip\";\nimport InsertChartIcon from \"@mui/icons-material/InsertChart\";\nimport InsertDriveFileIcon from \"@mui/icons-material/InsertDriveFile\";\nimport PictureAsPdfIcon from \"@mui/icons-material/PictureAsPdf\";\nimport { $getNodeByKey, DecoratorNode, NodeKey } from \"lexical\";\nimport React, { useEffect, useRef, useState } from \"react\";\n/**\n * A custom Lexical node that embeds and renders various types of content\n * such as videos, PDFs, documents, and other media files.\n */\n\nexport type DisplayType = \"url\" | \"card\" | \"embed\";\nexport type Alignment = \"left\" | \"center\" | \"right\";\n\nexport class EmbedNode extends DecoratorNode<JSX.Element> {\n __url: string;\n __displayType: DisplayType;\n __alignment: Alignment;\n\n constructor(\n url: string,\n displayType: DisplayType = \"embed\",\n alignment: Alignment = \"left\",\n key?: NodeKey\n ) {\n super(key);\n this.__url = url;\n this.__displayType = displayType;\n this.__alignment = alignment;\n }\n\n static getType(): string {\n return \"embed\";\n } // Returns the type of the node\n\n // Clones the node with the same URL and key\n static clone(node: EmbedNode): EmbedNode {\n return new EmbedNode(\n node.__url,\n node.__displayType,\n node.__alignment,\n node.getKey()\n );\n }\n\n // Creates the DOM structure for this node (a simple div container)\n createDOM(): HTMLElement {\n const div = document.createElement(\"div\");\n div.className = \"embed-node\";\n return div;\n }\n\n // Lexical calls this to determine if the DOM needs an update\n updateDOM(): boolean {\n return false;\n }\n\n // Imports the node from a serialized JSON format\n static importJSON(serializedNode: any): EmbedNode {\n return new EmbedNode(\n serializedNode.url,\n serializedNode.displayType || \"embed\",\n serializedNode.alignment || \"left\"\n );\n }\n\n // Exports the node to JSON format\n exportJSON(): any {\n return {\n type: \"embed\",\n url: this.__url,\n displayType: this.__displayType,\n alignment: this.__alignment,\n version: 1,\n };\n }\n\n // Getters and setters for properties\n getURL(): string {\n return this.__url;\n }\n\n getDisplayType(): DisplayType {\n return this.__displayType;\n }\n\n getAlignment(): Alignment {\n return this.__alignment;\n }\n\n setDisplayType(displayType: DisplayType): void {\n const self = this.getWritable();\n self.__displayType = displayType;\n }\n\n setAlignment(alignment: Alignment): void {\n const self = this.getWritable();\n self.__alignment = alignment;\n }\n\n // Returns the JSX component that should be rendered inside this node\n decorate(): JSX.Element {\n return (\n <EmbedComponent\n url={this.__url}\n displayType={this.__displayType}\n alignment={this.__alignment}\n nodeKey={this.getKey()}\n />\n );\n }\n}\n\n// Factory function to create an EmbedNode\nexport function $createEmbedNode(\n url: string,\n displayType: DisplayType = \"embed\",\n alignment: Alignment = \"left\"\n): EmbedNode {\n return new EmbedNode(url, displayType, alignment);\n}\n\n// Function to return an appropriate file icon based on the file type\nconst getFileIcon = (url: string) => {\n const lower = url.toLowerCase();\n const baseStyle = { fontSize: \"48px\" } as const;\n if (lower.endsWith(\".pdf\"))\n return <PictureAsPdfIcon style={{ ...baseStyle, color: \"#d32f2f\" }} />;\n if (lower.endsWith(\".doc\") || lower.endsWith(\".docx\"))\n return <DescriptionIcon style={{ ...baseStyle, color: \"#1976d2\" }} />;\n if (lower.endsWith(\".xls\") || lower.endsWith(\".xlsx\") || lower.endsWith(\".csv\"))\n return <InsertChartIcon style={{ ...baseStyle, color: \"#388e3c\" }} />;\n if (lower.endsWith(\".json\"))\n return <InsertDriveFileIcon style={{ ...baseStyle, color: \"#6a5acd\" }} />;\n if (lower.endsWith(\".zip\") || lower.endsWith(\".rar\"))\n return <FolderZipIcon style={{ ...baseStyle, color: \"#f57c00\" }} />;\n return <InsertDriveFileIcon style={{ ...baseStyle, color: \"#616161\" }} />;\n};\n\n/**\n * Component to render different types of embedded content based on the URL.\n * Supports YouTube, Vimeo, Loom, Figma, video files, and document previews.\n */\nconst EmbedComponent: React.FC<{\n url: string;\n displayType: DisplayType;\n alignment: Alignment;\n nodeKey: string;\n}> = ({ url, displayType, alignment, nodeKey }) => {\n const [dimensions, setDimensions] = useState({ width: 200, height: 200 });\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [editor] = useLexicalComposerContext();\n const [videoTitle, setVideoTitle] = useState<string>(\"\");\n const [thumbnailUrl, setThumbnailUrl] = useState<string>(\"\");\n\n // Fetch video title and thumbnail when component mounts or URL changes\n useEffect(() => {\n const fetchVideoInfo = async () => {\n try {\n // For YouTube videos\n if (url.includes(\"youtube.com\") || url.includes(\"youtu.be\")) {\n const videoId = getYouTubeVideoId(url);\n if (videoId) {\n // Set a default thumbnail URL using the video ID\n setThumbnailUrl(\n `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`\n );\n setVideoTitle(\"YouTube Video\");\n\n // Try to fetch the actual title using noembed\n try {\n const response = await fetch(\n `https://noembed.com/embed?url=${encodeURIComponent(url)}`\n );\n const data = await response.json();\n if (data.title) {\n setVideoTitle(data.title);\n }\n\n // Check if maxresdefault.jpg exists, if not fall back to hqdefault.jpg\n const imgTest = new Image();\n imgTest.onload = () => {\n // Image loaded successfully, keep using maxresdefault\n console.log(\"Using maxresdefault thumbnail for YouTube\");\n };\n imgTest.onerror = () => {\n // maxresdefault not available, use hqdefault instead\n setThumbnailUrl(\n `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`\n );\n console.log(\"Falling back to hqdefault thumbnail for YouTube\");\n };\n imgTest.src = `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`;\n } catch (error) {\n console.error(\"Error fetching YouTube title:\", error);\n // Ensure we at least have a thumbnail\n setThumbnailUrl(\n `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`\n );\n }\n }\n }\n // For Vimeo videos\n else if (url.includes(\"vimeo.com\")) {\n const vimeoId = url.split(\"/\").pop();\n if (vimeoId) {\n setThumbnailUrl(`https://vumbnail.com/${vimeoId}.jpg`);\n setVideoTitle(\"Vimeo Video\");\n\n // Try to fetch the actual title and better thumbnail\n try {\n const response = await fetch(\n `https://noembed.com/embed?url=${encodeURIComponent(url)}`\n );\n const data = await response.json();\n if (data.title) {\n setVideoTitle(data.title);\n }\n if (data.thumbnail_url) {\n setThumbnailUrl(data.thumbnail_url);\n }\n } catch (error) {\n console.error(\"Error fetching Vimeo title:\", error);\n }\n }\n }\n // For Loom videos\n else if (url.includes(\"loom.com\")) {\n // Extract the Loom ID from the URL\n let loomId = \"\";\n if (url.includes(\"/share/\")) {\n loomId = url.split(\"/share/\").pop() || \"\";\n } else {\n loomId = url.split(\"/\").pop() || \"\";\n }\n\n // Clean up the ID (remove any query parameters)\n loomId = loomId.split(\"?\")[0];\n\n console.log(\"Extracted Loom ID:\", loomId);\n\n if (loomId) {\n // Set default values\n setVideoTitle(\"Loom Recording\");\n\n // Try multiple thumbnail URL patterns for Loom\n const thumbnailOptions = [\n `https://cdn.loom.com/sessions/thumbnails/${loomId}-with-play.jpg`,\n `https://cdn.loom.com/sessions/thumbnails/${loomId}.jpg`,\n `https://cdn.loom.com/sessions/thumbnails/${loomId}-00001.jpg`,\n `https://www.loom.com/embed/${loomId}/thumbnail`,\n ];\n\n // Try each thumbnail option\n let thumbnailFound = false;\n\n for (const thumbnailUrl of thumbnailOptions) {\n if (thumbnailFound) break;\n\n const imgTest = new Image();\n imgTest.onload = () => {\n // This thumbnail works\n setThumbnailUrl(thumbnailUrl);\n console.log(\"Found working Loom thumbnail:\", thumbnailUrl);\n thumbnailFound = true;\n };\n imgTest.src = thumbnailUrl;\n }\n\n // If none of the direct thumbnail URLs work, try the oembed API\n try {\n const response = await fetch(\n `https://noembed.com/embed?url=${encodeURIComponent(url)}`\n );\n const data = await response.json();\n\n if (data.title) {\n setVideoTitle(data.title);\n }\n\n if (!thumbnailFound && data.thumbnail_url) {\n setThumbnailUrl(data.thumbnail_url);\n console.log(\n \"Using Loom thumbnail from oembed:\",\n data.thumbnail_url\n );\n }\n } catch (error) {\n console.error(\"Error fetching Loom metadata:\", error);\n\n // If all else fails, use a direct iframe approach to get the thumbnail\n if (!thumbnailFound) {\n setThumbnailUrl(\n `https://www.loom.com/embed/${loomId}/thumbnail`\n );\n console.log(\"Using Loom embed thumbnail as fallback\");\n }\n }\n } else {\n // Fallback to the Loom logo if we can't extract an ID\n setThumbnailUrl(\n \"https://cdn.loom.com/assets/marketing-pages/favicon-loom.png\"\n );\n setVideoTitle(\"Loom Video\");\n }\n }\n } catch (error) {\n console.error(\"Error fetching video info:\", error);\n }\n };\n\n fetchVideoInfo();\n }, [url]);\n\n // Handle click on the embed container to select the node\n const handleContainerClick = (e: React.MouseEvent<HTMLDivElement>) => {\n console.log(\"Embed container clicked, nodeKey:\", nodeKey);\n\n // Check if the click was on a link with target=\"_blank\" or download attribute\n const target = e.target as HTMLElement;\n const closestLink = target.closest('a[target=\"_blank\"], a[download]');\n\n if (closestLink) {\n // Allow the default behavior for links that should open in a new tab or download\n console.log(\"Allowing link to open in new tab or download\");\n return; // Don't prevent default, don't stop propagation\n } else {\n // Prevent default behavior for other elements\n e.preventDefault();\n e.stopPropagation();\n }\n\n // Select the node when clicking anywhere on the container or its children\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n console.log(\"Found node in click handler:\", node);\n\n if (node) {\n console.log(\"Selecting node\");\n node.selectNext();\n\n // Dispatch a custom event to notify the FloatingEmbedMenuPlugin\n const isVideoEmbed =\n url.includes(\"youtube.com\") ||\n url.includes(\"youtu.be\") ||\n url.includes(\"loom.com\") ||\n url.includes(\"vimeo.com\") ||\n url.includes(\"supercut.video\");\n\n if (isVideoEmbed) {\n const event = new CustomEvent(\"embedNodeSelected\", {\n detail: {\n nodeKey,\n url,\n rect: containerRef.current?.getBoundingClientRect(),\n },\n bubbles: true,\n });\n containerRef.current?.dispatchEvent(event);\n document.dispatchEvent(event);\n console.log(\"Dispatched embedNodeSelected event\");\n }\n }\n });\n };\n\n const handleMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n const startX = e.clientX;\n const startY = e.clientY;\n const startWidth = dimensions.width;\n const startHeight = dimensions.height;\n\n const handleMouseMove = (event: MouseEvent) => {\n requestAnimationFrame(() => {\n const newWidth = Math.max(50, startWidth + (event.clientX - startX));\n const newHeight = Math.max(50, startHeight + (event.clientY - startY));\n\n setDimensions({ width: newWidth, height: newHeight });\n });\n };\n\n const handleMouseUp = () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n };\n\n function getYouTubeVideoId(url: string) {\n try {\n return new URL(url).searchParams.get(\"v\") || url.split(\"/\").pop();\n } catch (error) {\n console.error(\"Invalid URL:\", error);\n return null;\n }\n }\n\n // Get alignment style\n const _getAlignmentStyle = () => {\n switch (alignment) {\n case \"left\":\n return {\n margin: \"0 auto 0 0\",\n textAlign: \"left\" as const,\n alignSelf: \"flex-start\",\n };\n case \"center\":\n return {\n margin: \"0 auto\",\n textAlign: \"center\" as const,\n alignSelf: \"center\",\n };\n case \"right\":\n return {\n margin: \"0 0 0 auto\",\n textAlign: \"right\" as const,\n alignSelf: \"flex-end\",\n };\n default:\n return {\n margin: \"0 auto 0 0\",\n textAlign: \"left\" as const,\n alignSelf: \"flex-start\",\n };\n }\n };\n\n // Render content based on display type\n const renderContent = () => {\n // URL display type\n if (displayType === \"url\") {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n style={{\n color: \"#1976d2\",\n textDecoration: \"none\",\n padding: \"8px 12px\",\n display: \"block\",\n width: \"100%\",\n }}\n >\n {url}\n </a>\n );\n }\n\n // Card display type\n if (displayType === \"card\") {\n // For video embeds (YouTube, Vimeo, Loom)\n if (\n url.includes(\"youtube.com\") ||\n url.includes(\"youtu.be\") ||\n url.includes(\"vimeo.com\") ||\n url.includes(\"loom.com\") ||\n url.includes(\"supercut.video\")\n ) {\n // Determine the appropriate placeholder based on the video type\n let placeholderImage =\n \"https://placehold.co/300x150/f0f0f0/666666?text=Video\";\n let videoType = \"\";\n\n if (url.includes(\"youtube.com\") || url.includes(\"youtu.be\")) {\n placeholderImage =\n \"https://placehold.co/300x150/ff0000/ffffff?text=YouTube\";\n videoType = \"YouTube\";\n } else if (url.includes(\"vimeo.com\")) {\n placeholderImage =\n \"https://placehold.co/300x150/1ab7ea/ffffff?text=Vimeo\";\n videoType = \"Vimeo\";\n } else if (url.includes(\"loom.com\")) {\n placeholderImage =\n \"https://placehold.co/300x150/625df5/ffffff?text=Loom\";\n videoType = \"Loom\";\n } else if (url.includes(\"supercut.video\")) {\n placeholderImage =\n \"https://placehold.co/300x150/00a8ff/ffffff?text=Supercut\";\n videoType = \"Supercut\";\n }\n\n // If we don't have a title yet, use the video type\n const displayTitle = videoTitle || `${videoType} Video`;\n\n // For debugging\n console.log(\"Rendering card with:\", {\n url,\n thumbnailUrl,\n displayTitle,\n videoType,\n });\n\n return (\n <div\n style={{ width: \"100%\", height: \"100%\", cursor: \"pointer\" }}\n onClick={handleContainerClick}\n >\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"150px\",\n overflow: \"hidden\",\n }}\n >\n <img\n src={thumbnailUrl || placeholderImage}\n alt={displayTitle}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n borderTopLeftRadius: \"4px\",\n borderTopRightRadius: \"4px\",\n }}\n onError={(e) => {\n // Fallback if thumbnail fails to load\n console.log(\n \"Thumbnail failed to load, using placeholder:\",\n placeholderImage\n );\n const target = e.target as HTMLImageElement;\n target.src = placeholderImage;\n }}\n />\n <div\n style={{\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n background: \"rgba(0,0,0,0.7)\",\n color: \"white\",\n padding: \"4px 8px\",\n fontSize: \"12px\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {displayTitle}\n </div>\n </div>\n <div style={{ padding: \"8px 12px\" }}>\n <div\n style={{\n fontWeight: \"bold\",\n marginBottom: \"4px\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {displayTitle}\n </div>\n <div\n style={{\n fontSize: \"12px\",\n color: \"#666\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {url}\n </div>\n </div>\n </div>\n );\n }\n // For other types of content\n else {\n return (\n <div style={{ width: \"100%\", height: \"100%\", cursor: \"pointer\" }}>\n <div\n style={{\n width: \"100%\",\n height: \"120px\",\n backgroundColor: \"#f0f0f0\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderTopLeftRadius: \"4px\",\n borderTopRightRadius: \"4px\",\n }}\n >\n {getFileIcon(url)}\n </div>\n <div style={{ padding: \"8px 12px\" }}>\n <div\n style={{\n fontWeight: \"bold\",\n marginBottom: \"4px\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {url.split(\"/\").pop() || \"File\"}\n </div>\n <div\n style={{\n fontSize: \"12px\",\n color: \"#666\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {url}\n </div>\n </div>\n </div>\n );\n }\n }\n\n // Embed display type (default)\n if (url.includes(\"youtube.com\") || url.includes(\"youtu.be\")) {\n const videoId = getYouTubeVideoId(url);\n return (\n <iframe\n width=\"100%\"\n height=\"100%\"\n src={`https://www.youtube.com/embed/${videoId}`}\n title=\"YouTube video player\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n ></iframe>\n );\n } else if (url.includes(\"vimeo.com\")) {\n const vimeoId = url.split(\"/\").pop();\n return (\n <iframe\n width=\"100%\"\n height=\"100%\"\n src={`https://player.vimeo.com/video/${vimeoId}`}\n title=\"Vimeo video player\"\n frameBorder=\"0\"\n allow=\"autoplay; fullscreen; picture-in-picture\"\n allowFullScreen\n ></iframe>\n );\n } else if (url.includes(\"loom.com\")) {\n return (\n <iframe\n width=\"100%\"\n height=\"100%\"\n src={url.replace(\"/share/\", \"/embed/\")}\n title=\"Loom video player\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n ></iframe>\n );\n } else if (url.includes(\"supercut.video\")) {\n // Extract the Supercut ID from the URL\n console.log(\"Processing Supercut URL:\", url);\n const urlParts = url.split(\"/\");\n const username = urlParts[urlParts.length - 2];\n const supercutId = urlParts[urlParts.length - 1];\n console.log(\"Extracted Supercut details:\", { username, supercutId });\n\n // Construct the embed URL using the correct embed format\n const embedUrl = `https://supercut.video/embed/${username}/${supercutId}`;\n console.log(\"Generated embed URL:\", embedUrl);\n\n return (\n <iframe\n width=\"100%\"\n height=\"100%\"\n src={embedUrl}\n title=\"Supercut video player\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n ></iframe>\n );\n } else if (url.includes(\"figma.com\")) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => {\n // Allow the default behavior (opening in new tab)\n // but also trigger the menu\n handleContainerClick(\n e as unknown as React.MouseEvent<HTMLDivElement>\n );\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n height: \"100%\",\n textDecoration: \"none\",\n }}\n >\n <img\n src=\"https://static.figma.com/app/icon/1/favicon.png\"\n alt=\"Open in Figma\"\n style={{\n width: \"48px\",\n height: \"48px\",\n objectFit: \"contain\",\n cursor: \"pointer\",\n }}\n />\n </a>\n );\n } else if (url.match(/\\.(mp4|webm|ogg)$/i)) {\n return (\n <video\n width=\"100%\"\n height=\"100%\"\n controls\n src={url}\n style={{ maxWidth: \"100%\" }}\n ></video>\n );\n } else if (url.endsWith(\".pdf\")) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n download\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n height: \"100%\",\n textDecoration: \"none\",\n color: \"black\",\n }}\n >\n <PictureAsPdfIcon style={{ fontSize: \"48px\", color: \"#d32f2f\" }} />\n </a>\n );\n } else if (url.match(/\\.(png|jpe?g|gif|webp|svg)$/i)) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n style={{ display: \"block\", borderRadius: \"8px\", overflow: \"hidden\", border: \"1px solid #e0e0e0\" }}\n >\n <img\n src={url}\n alt={url.split(\"/\").pop() || \"Image\"}\n style={{ maxWidth: \"100%\", height: \"auto\", display: \"block\" }}\n />\n </a>\n );\n } else if (url.match(/\\.(csv|json)$/i)) {\n // Render a simple card with appropriate icon for CSV/JSON\n return (\n <a\n style={{\n width: \"100%\",\n height: \"140px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexDirection: \"column\",\n padding: \"16px\",\n textDecoration: \"none\",\n color: \"black\",\n border: \"1px solid #e0e0e0\",\n borderRadius: \"8px\",\n background: \"#fafafa\",\n }}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n download\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {getFileIcon(url)}\n <span style={{ marginTop: \"8px\", fontSize: \"12px\", color: \"#666\", textAlign: \"center\", maxWidth: \"100%\", padding: \"0 8px\" }}>\n {url.split(\"/\").pop() || \"File\"}\n </span>\n </a>\n );\n } else if (url.match(/\\.(docx?|xlsx?|pptx?|zip|rar|txt)$/i)) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n download\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n height: \"140px\",\n textDecoration: \"none\",\n color: \"black\",\n border: \"1px solid #e0e0e0\",\n borderRadius: \"8px\",\n background: \"#fafafa\",\n }}\n >\n {getFileIcon(url)}\n <span style={{ marginLeft: \"8px\", fontSize: \"12px\", color: \"#666\" }}>\n {url.split(\"/\").pop() || \"File\"}\n </span>\n </a>\n );\n } else {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"20px\",\n color: \"#666\",\n textDecoration: \"none\",\n }}\n >\n {getFileIcon(url)}\n <span style={{ marginLeft: \"8px\" }}>{url}</span>\n </a>\n );\n }\n };\n\n // Set container width based on display type\n const getContainerWidth = () => {\n if (displayType === \"url\") {\n return { width: \"auto\", minWidth: \"200px\", maxWidth: \"100%\" };\n }\n if (displayType === \"card\") {\n return { width: \"300px\", height: \"auto\" };\n }\n return { width: dimensions.width, height: dimensions.height };\n };\n\n // Get container class based on display type\n const getContainerClass = () => {\n return `embed-container embed-${displayType} embed-align-${alignment}`;\n };\n\n return (\n <div\n className=\"embed-node-wrapper\"\n style={{\n display: \"flex\",\n width: \"100%\",\n justifyContent:\n alignment === \"left\"\n ? \"flex-start\"\n : alignment === \"center\"\n ? \"center\"\n : \"flex-end\",\n margin: \"8px 0\",\n }}\n >\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n display: \"inline-flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n ...getContainerWidth(),\n border: \"1px solid #ccc\",\n borderRadius: \"4px\",\n overflow: \"hidden\",\n background: \"#f9f9f9\",\n cursor: \"pointer\",\n }}\n className={getContainerClass()}\n data-lexical-node-key={nodeKey}\n data-embed-type={\n url.includes(\"youtube.com\") || url.includes(\"youtu.be\")\n ? \"youtube\"\n : url.includes(\"loom.com\")\n ? \"loom\"\n : url.includes(\"vimeo.com\")\n ? \"vimeo\"\n : \"other\"\n }\n onClick={handleContainerClick}\n >\n {renderContent()}\n\n {/* Resizer Handle - only show for embed display type */}\n {displayType === \"embed\" && (\n <div\n onMouseDown={handleMouseDown}\n style={{\n position: \"absolute\",\n right: 0,\n bottom: 0,\n width: \"15px\",\n height: \"15px\",\n background: \"#ccc\",\n cursor: \"nwse-resize\",\n }}\n ></div>\n )}\n </div>\n </div>\n );\n};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport {\n $applyNodeReplacement, // Utility function to apply node replacement\n type DOMConversionMap, // Type for defining DOM conversion rules\n type DOMConversionOutput, // Type for output of DOM conversion\n type DOMExportOutput, // Type for exported DOM structure\n type EditorConfig, // Type for Lexical editor configuration\n type LexicalNode, // Base type for Lexical nodes\n type NodeKey, // Unique identifier for nodes\n type SerializedTextNode, // Type for serialized text nodes\n type Spread, // Utility type for spreading properties\n TextNode, // Base class for text-based nodes in Lexical\n} from \"lexical\";\n\n/**\n * Type definition for a serialized MentionNode.\n * This extends a standard serialized text node with an additional `mentionName` property.\n */\nexport type SerializedMentionNode = Spread<\n {\n mentionName: string; // Stores the mention name, e.g., \"@username\"\n },\n SerializedTextNode\n>;\n\n/**\n * Function to convert a DOM element into a MentionNode.\n * This is used when pasting or loading HTML content into the editor.\n */\nfunction $convertMentionElement(\n domNode: HTMLElement\n): DOMConversionOutput | null {\n const textContent = domNode.textContent; // Extract the text content from the DOM node\n const mentionName = domNode.getAttribute(\"data-lexical-mention-name\"); // Get the mention name from the attribute\n\n if (textContent !== null) {\n // Create a MentionNode using the extracted mention name or the text content\n const node = $createMentionNode(\n typeof mentionName === \"string\" ? mentionName : textContent,\n textContent\n );\n return {\n node,\n };\n }\n\n return null;\n}\n\n// Define the CSS style for mentions in the editor\nconst mentionStyle = \"background-color: rgba(24, 119, 232, 0.2)\";\n\n/**\n * MentionNode class extends TextNode to represent a mention (e.g., @username).\n */\nexport class MentionNode extends TextNode {\n __mention: string; // Stores the mention name\n\n /**\n * Returns the type identifier for this node.\n */\n static getType(): string {\n return \"mention\";\n }\n\n /**\n * Creates a clone of the MentionNode.\n */\n static clone(node: MentionNode): MentionNode {\n return new MentionNode(node.__mention, node.__text, node.__key);\n }\n\n /**\n * Imports a MentionNode from JSON representation.\n */\n static importJSON(serializedNode: SerializedMentionNode): MentionNode {\n return $createMentionNode(serializedNode.mentionName).updateFromJSON(\n serializedNode\n );\n }\n\n /**\n * Constructor for MentionNode.\n * @param mentionName - The name of the mention (e.g., \"@john\")\n * @param text - Optional text content (defaults to mention name)\n * @param key - Optional unique node key\n */\n constructor(mentionName: string, text?: string, key?: NodeKey) {\n super(text ?? mentionName, key);\n this.__mention = mentionName; // Store the mention name\n }\n\n /**\n * Serializes the MentionNode into JSON format.\n */\n exportJSON(): SerializedMentionNode {\n return {\n ...super.exportJSON(), // Call the base class method\n mentionName: this.__mention, // Include the mention name\n };\n }\n\n /**\n * Creates a DOM representation of the MentionNode.\n * This determines how the mention appears in the editor.\n */\n createDOM(config: EditorConfig): HTMLElement {\n const dom = super.createDOM(config);\n dom.style.cssText = mentionStyle; // Apply mention styling\n dom.className = \"mention\"; // Assign a class for styling\n dom.spellcheck = false; // Disable spellcheck for mentions\n return dom;\n }\n\n /**\n * Exports the MentionNode as a DOM element (for copying/pasting or saving).\n */\n exportDOM(): DOMExportOutput {\n const element = document.createElement(\"span\"); // Use a <span> to represent the mention\n element.setAttribute(\"data-lexical-mention\", \"true\"); // Mark it as a mention\n if (this.__text !== this.__mention) {\n element.setAttribute(\"data-lexical-mention-name\", this.__mention); // Preserve the mention name if different from text\n }\n element.textContent = this.__text; // Set the mention text\n return { element };\n }\n\n /**\n * Defines how to import a MentionNode from a pasted or loaded HTML document.\n */\n static importDOM(): DOMConversionMap | null {\n return {\n span: (domNode: HTMLElement) => {\n if (!domNode.hasAttribute(\"data-lexical-mention\")) {\n return null;\n }\n return {\n conversion: $convertMentionElement, // Use the conversion function defined earlier\n priority: 1, // Higher priority ensures mentions are recognized before plain text\n };\n },\n };\n }\n\n /**\n * Indicates that this node represents a text entity, meaning it behaves as a single unit.\n */\n isTextEntity(): true {\n return true;\n }\n\n /**\n * Prevents inserting text before the mention (e.g., avoids breaking the mention).\n */\n canInsertTextBefore(): boolean {\n return false;\n }\n\n /**\n * Prevents inserting text after the mention (e.g., avoids breaking the mention).\n */\n canInsertTextAfter(): boolean {\n return false;\n }\n}\n\n/**\n * Helper function to create a new MentionNode.\n * @param mentionName - The name of the mention (e.g., \"@john\")\n * @param textContent - Optional text content (defaults to mention name)\n * @returns A newly created MentionNode.\n */\nexport function $createMentionNode(\n mentionName: string,\n textContent?: string\n): MentionNode {\n const mentionNode = new MentionNode(mentionName, (textContent = mentionName));\n mentionNode.setMode(\"segmented\").toggleDirectionless(); // Set the mention to be unbreakable\n return $applyNodeReplacement(mentionNode); // Apply the node replacement utility\n}\n\n/**\n * Type guard function to check if a node is a MentionNode.\n * @param node - The node to check.\n * @returns True if the node is a MentionNode, false otherwise.\n */\nexport function $isMentionNode(\n node: LexicalNode | null | undefined\n): node is MentionNode {\n return node instanceof MentionNode;\n}\n","\"use client\";\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getNodeByKey } from \"lexical\";\nimport {\n AlertCircle,\n AlertTriangle,\n CheckCircle,\n Info,\n StickyNote,\n X,\n} from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { cn } from \"src/lib/utils\";\nimport type { NotePanelType } from \"src/nodes/NotePanelNode\";\n\nimport { Button } from \"../ui/button\";\n\ninterface NotePanelViewProps {\n type: NotePanelType;\n title: string;\n content: any;\n nodeKey: string;\n}\n\nconst PANEL_CONFIGS = {\n info: {\n icon: Info,\n containerClass:\n \"cteditor-bg-blue-50 cteditor-border-blue-200 dark:cteditor-bg-blue-950/50 dark:cteditor-border-blue-800\",\n iconClass: \"cteditor-text-blue-600 dark:cteditor-text-blue-400\",\n titleClass: \"cteditor-text-blue-900 dark:cteditor-text-blue-100\",\n contentClass: \"cteditor-text-blue-800 dark:cteditor-text-blue-200\",\n borderClass: \"cteditor-border-l-blue-500\",\n },\n warning: {\n icon: AlertTriangle,\n containerClass:\n \"cteditor-bg-amber-50 cteditor-border-amber-200 dark:cteditor-bg-amber-950/50 dark:cteditor-border-amber-800\",\n iconClass: \"cteditor-text-amber-600 dark:cteditor-text-amber-400\",\n titleClass: \"cteditor-text-amber-900 dark:cteditor-text-amber-100\",\n contentClass: \"cteditor-text-amber-800 dark:cteditor-text-amber-200\",\n borderClass: \"cteditor-border-l-amber-500\",\n },\n error: {\n icon: AlertCircle,\n containerClass:\n \"cteditor-bg-red-50 cteditor-border-red-200 dark:cteditor-bg-red-950/50 dark:cteditor-border-red-800\",\n iconClass: \"cteditor-text-red-600 dark:cteditor-text-red-400\",\n titleClass: \"cteditor-text-red-900 dark:cteditor-text-red-100\",\n contentClass: \"cteditor-text-red-800 dark:cteditor-text-red-200\",\n borderClass: \"cteditor-border-l-red-500\",\n },\n success: {\n icon: CheckCircle,\n containerClass:\n \"cteditor-bg-green-50 cteditor-border-green-200 dark:cteditor-bg-green-950/50 dark:cteditor-border-green-800\",\n iconClass: \"cteditor-text-green-600 dark:cteditor-text-green-400\",\n titleClass: \"cteditor-text-green-900 dark:cteditor-text-green-100\",\n contentClass: \"cteditor-text-green-800 dark:cteditor-text-green-200\",\n borderClass: \"cteditor-border-l-green-500\",\n },\n note: {\n icon: StickyNote,\n containerClass:\n \"cteditor-bg-muted/50 cteditor-border-border dark:cteditor-bg-muted/30\",\n iconClass: \"cteditor-text-muted-foreground\",\n titleClass: \"cteditor-text-foreground\",\n contentClass: \"cteditor-text-muted-foreground\",\n borderClass: \"cteditor-border-l-muted-foreground\",\n },\n};\n\nconst NotePanelView: React.FC<NotePanelViewProps> = ({\n type,\n title,\n nodeKey,\n}) => {\n const [editor] = useLexicalComposerContext();\n const [isHovered, setIsHovered] = useState(false);\n\n const config = PANEL_CONFIGS[type];\n const IconComponent = config.icon;\n\n const handleDeletePanel = useCallback(() => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if (node) {\n node.remove();\n }\n });\n }, [editor, nodeKey]);\n\n return (\n <div\n className={cn(\n \"cteditor-relative group cteditor-my-4 cteditor-rounded-md cteditor-border cteditor-border-l-4 cteditor-p-4 cteditor-shadow-sm cteditor-transition-all cteditor-duration-200 hover:cteditor-shadow-md\",\n config.containerClass,\n config.borderClass\n )}\n data-panel-type={type}\n data-panel-title={title}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Close button - appears on hover */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleDeletePanel}\n className={cn(\n \"cteditor-absolute cteditor-top-2 cteditor-right-2 cteditor-h-6 cteditor-w-6 cteditor-rounded-full cteditor-transition-all cteditor-duration-200 hover:cteditor-bg-background/80\",\n isHovered ? \"cteditor-opacity-100\" : \"cteditor-opacity-0\",\n config.iconClass\n )}\n title=\"Remove panel\"\n >\n <X className=\"!cteditor-size-4\" />\n </Button>\n\n <div className=\"cteditor-flex cteditor-items-start cteditor-gap-3 cteditor-pr-8\">\n {/* Icon */}\n <div\n className={cn(\n \"cteditor-flex-shrink-0 cteditor-mt-0.5\",\n config.iconClass\n )}\n >\n <IconComponent className=\"cteditor-h-4 cteditor-w-4\" />\n </div>\n\n {/* Content */}\n <div className=\"cteditor-flex-1 cteditor-min-w-0 cteditor-space-y-2\">\n {title && (\n <div\n className={cn(\n \"cteditor-font-semibold cteditor-text-sm cteditor-leading-none\",\n config.titleClass\n )}\n >\n {title}\n </div>\n )}\n\n <div\n contentEditable\n className={cn(\n \"cteditor-min-h-[1.25rem] cteditor-text-sm cteditor-leading-relaxed cteditor-outline-none focus:cteditor-outline-none\",\n config.contentClass,\n \"empty:before:cteditor-content-[attr(data-placeholder)] empty:before:cteditor-text-muted-foreground/60\"\n )}\n data-placeholder={`Enter your ${type} content...`}\n suppressContentEditableWarning={true}\n onFocus={(e) => {\n if (\n e.target.textContent ===\n `Click here to edit this ${type} panel content...`\n ) {\n e.target.textContent = \"\";\n }\n }}\n >\n Click here to edit this {type} panel content...\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default NotePanelView;\n","import type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from \"lexical\";\nimport { $applyNodeReplacement, DecoratorNode } from \"lexical\";\nimport React from \"react\";\nimport NotePanelView from \"src/components/NotePanelView\";\n\nexport type NotePanelType = \"info\" | \"warning\" | \"error\" | \"success\" | \"note\";\n\nexport interface NotePanelPayload {\n type: NotePanelType;\n title?: string;\n key?: NodeKey;\n}\n\nfunction $convertNotePanelElement(domNode: Node): null | DOMConversionOutput {\n const div = domNode as HTMLElement;\n if (div.classList.contains(\"note-panel\")) {\n const type =\n (div.getAttribute(\"data-panel-type\") as NotePanelType) || \"info\";\n const title = div.getAttribute(\"data-panel-title\") || \"\";\n const node = $createNotePanelNode({ type, title });\n return { node };\n }\n return null;\n}\n\nexport type SerializedNotePanelNode = Spread<\n {\n panelType: NotePanelType;\n title: string;\n },\n SerializedLexicalNode\n>;\n\nexport class NotePanelNode extends DecoratorNode<JSX.Element> {\n __panelType: NotePanelType;\n __title: string;\n\n static getType(): string {\n return \"note-panel\";\n }\n\n static clone(node: NotePanelNode): NotePanelNode {\n return new NotePanelNode(node.__panelType, node.__title, node.__key);\n }\n\n static importJSON(serializedNode: SerializedNotePanelNode): NotePanelNode {\n const { panelType, title } = serializedNode;\n const node = $createNotePanelNode({ type: panelType, title });\n return node;\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement(\"div\");\n element.className = \"note-panel\";\n element.setAttribute(\"data-panel-type\", this.__panelType);\n element.setAttribute(\"data-panel-title\", this.__title);\n return { element };\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div: (node: Node) => ({\n conversion: $convertNotePanelElement,\n priority: 1,\n }),\n };\n }\n\n constructor(type: NotePanelType, title = \"\", key?: NodeKey) {\n super(key);\n this.__panelType = type;\n this.__title = title;\n }\n\n exportJSON(): SerializedNotePanelNode {\n return {\n panelType: this.__panelType,\n title: this.__title,\n type: \"note-panel\",\n version: 1,\n };\n }\n\n setPanelType(type: NotePanelType): void {\n const writable = this.getWritable();\n writable.__panelType = type;\n }\n\n setTitle(title: string): void {\n const writable = this.getWritable();\n writable.__title = title;\n }\n\n createDOM(config: EditorConfig): HTMLElement {\n const div = document.createElement(\"div\");\n const theme = config.theme;\n const className = theme.notePanel;\n if (className !== undefined) {\n div.className = className;\n }\n return div;\n }\n\n updateDOM(): false {\n return false;\n }\n\n getPanelType(): NotePanelType {\n return this.__panelType;\n }\n\n getTitle(): string {\n return this.__title;\n }\n\n decorate(): JSX.Element {\n return (\n <NotePanelView\n type={this.__panelType}\n title={this.__title}\n content={null}\n nodeKey={this.getKey()}\n />\n );\n }\n}\n\nexport function $createNotePanelNode({\n type,\n title,\n key,\n}: NotePanelPayload): NotePanelNode {\n return $applyNodeReplacement(new NotePanelNode(type, title, key));\n}\n\nexport function $isNotePanelNode(\n node: LexicalNode | null | undefined\n): node is NotePanelNode {\n return node instanceof NotePanelNode;\n}\n","import { HorizontalRuleNode as BaseHorizontalRuleNode } from \"@lexical/react/LexicalHorizontalRuleNode\";\nimport {\n createCommand,\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n LexicalCommand,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from \"lexical\";\n\nexport interface CustomHorizontalRulePayload {\n color?: string;\n strokeWidth?: number;\n}\n\nexport type SerializedCustomHorizontalRuleNode = Spread<\n {\n color?: string;\n strokeWidth?: number;\n },\n SerializedLexicalNode\n>;\n\nexport const INSERT_CUSTOM_HORIZONTAL_RULE_COMMAND: LexicalCommand<CustomHorizontalRulePayload> =\n createCommand(\"INSERT_CUSTOM_HORIZONTAL_RULE_COMMAND\");\n\nexport class CustomHorizontalRuleNode extends BaseHorizontalRuleNode {\n __color?: string;\n __strokeWidth?: number;\n\n static getType(): string {\n return \"custom-horizontal-rule\";\n }\n\n static clone(node: CustomHorizontalRuleNode): CustomHorizontalRuleNode {\n return new CustomHorizontalRuleNode(\n node.__color,\n node.__strokeWidth,\n node.__key\n );\n }\n\n constructor(color?: string, strokeWidth?: number, key?: NodeKey) {\n super(key);\n this.__color = color;\n this.__strokeWidth = strokeWidth;\n }\n\n createDOM(): HTMLElement {\n const dom = document.createElement(\"hr\");\n if (this.__color) {\n dom.style.borderColor = this.__color;\n dom.style.backgroundColor = this.__color;\n }\n if (this.__strokeWidth) {\n dom.style.borderWidth = `${this.__strokeWidth}px`;\n dom.style.height = `${this.__strokeWidth}px`;\n }\n return dom;\n }\n\n updateDOM(): boolean {\n // Return false to indicate that the DOM doesn't need to be updated\n // We handle styling in createDOM and exportDOM\n return false;\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n hr: (node: Node) => ({\n conversion: convertHorizontalRuleElement,\n priority: 1,\n }),\n };\n }\n\n static importJSON(\n serializedNode: SerializedCustomHorizontalRuleNode\n ): CustomHorizontalRuleNode {\n const node = $createCustomHorizontalRuleNode();\n node.setColor(serializedNode.color);\n node.setStrokeWidth(serializedNode.strokeWidth);\n return node;\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement(\"hr\");\n if (this.__color) {\n element.style.borderColor = this.__color;\n element.style.backgroundColor = this.__color;\n }\n if (this.__strokeWidth) {\n element.style.borderWidth = `${this.__strokeWidth}px`;\n element.style.height = `${this.__strokeWidth}px`;\n }\n return { element };\n }\n\n exportJSON(): SerializedCustomHorizontalRuleNode {\n return {\n ...super.exportJSON(),\n color: this.__color,\n strokeWidth: this.__strokeWidth,\n type: \"custom-horizontal-rule\",\n version: 1,\n };\n }\n\n getColor(): string | undefined {\n return this.__color;\n }\n\n setColor(color?: string): void {\n const writable = this.getWritable();\n writable.__color = color;\n }\n\n getStrokeWidth(): number | undefined {\n return this.__strokeWidth;\n }\n\n setStrokeWidth(strokeWidth?: number): void {\n const writable = this.getWritable();\n writable.__strokeWidth = strokeWidth;\n }\n}\n\nfunction convertHorizontalRuleElement(): DOMConversionOutput {\n return { node: $createCustomHorizontalRuleNode() };\n}\n\nexport function $createCustomHorizontalRuleNode(\n color?: string,\n strokeWidth?: number\n): CustomHorizontalRuleNode {\n return new CustomHorizontalRuleNode(color, strokeWidth);\n}\n\nexport function $isCustomHorizontalRuleNode(\n node: LexicalNode | null | undefined\n): node is CustomHorizontalRuleNode {\n return node instanceof CustomHorizontalRuleNode;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $insertNodes, COMMAND_PRIORITY_EDITOR } from \"lexical\";\nimport { useEffect } from \"react\";\n\nimport {\n $createCustomHorizontalRuleNode,\n CustomHorizontalRuleNode,\n CustomHorizontalRulePayload,\n INSERT_CUSTOM_HORIZONTAL_RULE_COMMAND,\n} from \"./CustomHorizontalRuleNode\";\n\nconst CustomHorizontalRulePlugin: React.FC = () => {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n if (!editor.hasNodes([CustomHorizontalRuleNode])) {\n throw new Error(\n \"CustomHorizontalRulePlugin: CustomHorizontalRuleNode not registered on editor\"\n );\n }\n\n return editor.registerCommand<CustomHorizontalRulePayload>(\n INSERT_CUSTOM_HORIZONTAL_RULE_COMMAND,\n (payload) => {\n const horizontalRuleNode = $createCustomHorizontalRuleNode(\n payload.color,\n payload.strokeWidth\n );\n $insertNodes([horizontalRuleNode]);\n return true;\n },\n COMMAND_PRIORITY_EDITOR\n );\n }, [editor]);\n\n return null;\n};\n\nexport default CustomHorizontalRulePlugin;\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"cteditor-fixed cteditor-inset-0 cteditor-z-[9999] cteditor-bg-black/60 data-[state=open]:cteditor-animate-in data-[state=closed]:cteditor-animate-out data-[state=closed]:cteditor-fade-out-0 data-[state=open]:cteditor-fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"cteditor-fixed cteditor-left-[50%] cteditor-top-[50%] cteditor-z-[9999] cteditor-grid cteditor-w-full cteditor-max-w-lg cteditor-translate-x-[-50%] cteditor-translate-y-[-50%] cteditor-gap-4 cteditor-border cteditor-bg-background cteditor-p-6 cteditor-shadow-lg cteditor-duration-200 data-[state=open]:cteditor-animate-in data-[state=closed]:cteditor-animate-out data-[state=closed]:cteditor-fade-out-0 data-[state=open]:cteditor-fade-in-0 data-[state=closed]:cteditor-zoom-out-95 data-[state=open]:cteditor-zoom-in-95 data-[state=closed]:cteditor-slide-out-to-left-1/2 data-[state=closed]:cteditor-slide-out-to-top-[48%] data-[state=open]:cteditor-slide-in-from-left-1/2 data-[state=open]:cteditor-slide-in-from-top-[48%] sm:cteditor-rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"cteditor-absolute cteditor-right-4 cteditor-top-4 cteditor-rounded-full cteditor-bg-secondary cteditor-p-1 cteditor-opacity-70 cteditor-transition-opacity focus:cteditor-outline-none cteditor-disabled:pointer-events-none data-[state=open]:cteditor-bg-accent data-[state=open]:cteditor-text-muted-foreground hover:cteditor-opacity-100\n\"\n >\n <X className=\"cteditor-h-4 cteditor-w-4\" />\n <span className=\"!cteditor-sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cteditor-flex cteditor-flex-col cteditor-space-y-1.5 cteditor-text-center sm:cteditor-text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cteditor-flex cteditor-flex-col-reverse sm:cteditor-flex-row sm:cteditor-justify-end sm:cteditor-space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"cteditor-text-lg cteditor-font-semibold cteditor-leading-none cteditor-tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"cteditor-text-sm cteditor-text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"cteditor-flex cteditor-h-9 cteditor-w-full cteditor-rounded-md cteditor-border cteditor-border-input cteditor-text-foreground dark:cteditor-bg-input/30 cteditor-bg-transparent cteditor-px-3 cteditor-py-1 cteditor-text-xs cteditor-shadow-sm cteditor-transition-all cteditor-duration-200 file:cteditor-border-0 file:cteditor-bg-transparent file:cteditor-text-sm file:cteditor-font-medium file:cteditor-text-foreground placeholder:cteditor-text-muted-foreground focus-visible:cteditor-outline-none focus-visible:cteditor-ring-1 focus-visible:cteditor-ring-ring disabled:cteditor-cursor-not-allowed disabled:cteditor-opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\n// packages/react/label/src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst labelVariants = cva(\n \"cteditor-text-sm cteditor-font-medium cteditor-leading-none peer-disabled:cteditor-cursor-not-allowed peer-disabled:cteditor-opacity-70\"\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import { LexicalEditor } from \"lexical\";\nimport React, { useState } from \"react\";\nimport { Button } from \"src/components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"src/components/ui/dialog\";\nimport { Input } from \"src/components/ui/input\";\nimport { Label } from \"src/components/ui/label\";\nimport { Separator } from \"src/components/ui/separator\";\n\nimport { INSERT_CUSTOM_HORIZONTAL_RULE_COMMAND } from \"./CustomHorizontalRuleNode\";\n\ninterface HorizontalRuleCustomizationDialogProps {\n activeEditor: LexicalEditor;\n onClose: () => void;\n}\n\nconst HorizontalRuleCustomizationDialog: React.FC<\n HorizontalRuleCustomizationDialogProps\n> = ({ activeEditor, onClose }) => {\n const [color, setColor] = useState(\"#000000\");\n const [strokeWidth, setStrokeWidth] = useState(2);\n\n const predefinedColors = [\n \"#000000\", // Black\n \"#666666\", // Gray\n \"#FF0000\", // Red\n \"#00FF00\", // Green\n \"#0000FF\", // Blue\n \"#FFFF00\", // Yellow\n \"#FF00FF\", // Magenta\n \"#00FFFF\", // Cyan\n \"#FFA500\", // Orange\n \"#800080\", // Purple\n ];\n\n const predefinedStrokes = [1, 2, 3, 4, 5, 8, 10];\n\n const handleInsert = () => {\n activeEditor.dispatchCommand(INSERT_CUSTOM_HORIZONTAL_RULE_COMMAND, {\n color,\n strokeWidth,\n });\n onClose();\n };\n\n return (\n <Dialog open onOpenChange={onClose}>\n <DialogContent className=\"sm:cteditor-max-w-md\">\n <DialogHeader>\n <DialogTitle>Customize Horizontal Rule</DialogTitle>\n </DialogHeader>\n\n <div className=\"cteditor-space-y-5\">\n {/* Color Selection */}\n <div className=\"cteditor-space-y-2\">\n <Label\n htmlFor=\"color-picker\"\n className=\"cteditor-text-sm cteditor-font-medium\"\n >\n Line Color\n </Label>\n\n {/* Predefined Colors */}\n <div className=\"cteditor-flex cteditor-flex-wrap cteditor-gap-2\">\n {predefinedColors.map((presetColor) => (\n <button\n key={presetColor}\n type=\"button\"\n className={`cteditor-w-8 cteditor-h-8 cteditor-rounded cteditor-border-2 ${\n color === presetColor\n ? \"cteditor-border-gray-400\"\n : \"cteditor-border-gray-200\"\n }`}\n style={{ backgroundColor: presetColor }}\n onClick={() => setColor(presetColor)}\n title={presetColor}\n />\n ))}\n </div>\n\n {/* Custom Color Picker */}\n <div className=\"cteditor-flex cteditor-items-center cteditor-space-x-2\">\n <Input\n id=\"color-picker\"\n type=\"color\"\n value={color}\n onChange={(e) => setColor(e.target.value)}\n className=\"cteditor-w-16 cteditor-h-10 cteditor-p-1 cteditor-border cteditor-rounded\"\n />\n <Input\n type=\"text\"\n value={color}\n onChange={(e) => setColor(e.target.value)}\n placeholder=\"#000000\"\n className=\"cteditor-flex-1\"\n />\n </div>\n </div>\n\n <Separator />\n\n {/* Stroke Width Selection */}\n <div className=\"cteditor-space-y-2\">\n <Label\n htmlFor=\"stroke-width\"\n className=\"cteditor-text-sm cteditor-font-medium\"\n >\n Line Thickness (px)\n </Label>\n\n {/* Predefined Stroke Widths */}\n <div className=\"cteditor-flex cteditor-flex-wrap cteditor-gap-2 cteditor-mb-3\">\n {predefinedStrokes.map((width) => (\n <button\n key={width}\n type=\"button\"\n className={`cteditor-px-3 cteditor-py-2 cteditor-text-sm cteditor-font-medium cteditor-text-black cteditor-border cteditor-rounded ${\n strokeWidth === width\n ? \"cteditor-bg-blue-100 cteditor-border-blue-300\"\n : \"cteditor-bg-white cteditor-border-gray-200 hover:cteditor-bg-gray-50\"\n }`}\n onClick={() => setStrokeWidth(width)}\n >\n {width}px\n </button>\n ))}\n </div>\n\n {/* Custom Stroke Width */}\n <Input\n id=\"stroke-width\"\n type=\"number\"\n min=\"1\"\n max=\"20\"\n placeholder=\"Enter stroke width\"\n value={strokeWidth}\n onChange={(e) => setStrokeWidth(parseInt(e.target.value) || 1)}\n className=\"cteditor-w-24\"\n />\n </div>\n\n <Separator />\n\n {/* Preview */}\n <div className=\"cteditor-space-y-2\">\n <Label className=\"cteditor-text-sm cteditor-font-medium\">\n Preview\n </Label>\n <div className=\"cteditor-p-4 cteditor-border cteditor-rounded cteditor-bg-gray-50\">\n <hr\n style={{\n borderColor: color,\n backgroundColor: color,\n borderWidth: `${strokeWidth}px`,\n height: `${strokeWidth}px`,\n borderStyle: \"solid\",\n margin: 0,\n }}\n />\n </div>\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={handleInsert}>Insert Horizontal Rule</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default HorizontalRuleCustomizationDialog;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport \"./PlaygroundEditorTheme.css\";\n\nimport type { EditorThemeClasses } from \"lexical\";\n\nconst theme: EditorThemeClasses = {\n autocomplete: \"PlaygroundEditorTheme__autocomplete\",\n blockCursor: \"PlaygroundEditorTheme__blockCursor\",\n characterLimit: \"PlaygroundEditorTheme__characterLimit\",\n code: \"PlaygroundEditorTheme__code\",\n codeHighlight: {\n atrule: \"PlaygroundEditorTheme__tokenAttr\",\n attr: \"PlaygroundEditorTheme__tokenAttr\",\n boolean: \"PlaygroundEditorTheme__tokenProperty\",\n builtin: \"PlaygroundEditorTheme__tokenSelector\",\n cdata: \"PlaygroundEditorTheme__tokenComment\",\n char: \"PlaygroundEditorTheme__tokenSelector\",\n class: \"PlaygroundEditorTheme__tokenFunction\",\n \"class-name\": \"PlaygroundEditorTheme__tokenFunction\",\n comment: \"PlaygroundEditorTheme__tokenComment\",\n constant: \"PlaygroundEditorTheme__tokenProperty\",\n deleted: \"PlaygroundEditorTheme__tokenProperty\",\n doctype: \"PlaygroundEditorTheme__tokenComment\",\n entity: \"PlaygroundEditorTheme__tokenOperator\",\n function: \"PlaygroundEditorTheme__tokenFunction\",\n important: \"PlaygroundEditorTheme__tokenVariable\",\n inserted: \"PlaygroundEditorTheme__tokenSelector\",\n keyword: \"PlaygroundEditorTheme__tokenAttr\",\n namespace: \"PlaygroundEditorTheme__tokenVariable\",\n number: \"PlaygroundEditorTheme__tokenProperty\",\n operator: \"PlaygroundEditorTheme__tokenOperator\",\n prolog: \"PlaygroundEditorTheme__tokenComment\",\n property: \"PlaygroundEditorTheme__tokenProperty\",\n punctuation: \"PlaygroundEditorTheme__tokenPunctuation\",\n regex: \"PlaygroundEditorTheme__tokenVariable\",\n selector: \"PlaygroundEditorTheme__tokenSelector\",\n string: \"PlaygroundEditorTheme__tokenSelector\",\n symbol: \"PlaygroundEditorTheme__tokenProperty\",\n tag: \"PlaygroundEditorTheme__tokenProperty\",\n url: \"PlaygroundEditorTheme__tokenOperator\",\n variable: \"PlaygroundEditorTheme__tokenVariable\",\n },\n embedBlock: {\n base: \"PlaygroundEditorTheme__embedBlock\",\n focus: \"PlaygroundEditorTheme__embedBlockFocus\",\n },\n hashtag: \"PlaygroundEditorTheme__hashtag\",\n heading: {\n h1: \"PlaygroundEditorTheme__h1\",\n h2: \"PlaygroundEditorTheme__h2\",\n h3: \"PlaygroundEditorTheme__h3\",\n h4: \"PlaygroundEditorTheme__h4\",\n h5: \"PlaygroundEditorTheme__h5\",\n h6: \"PlaygroundEditorTheme__h6\",\n },\n hr: \"PlaygroundEditorTheme__hr\",\n image: \"editor-image\",\n indent: \"PlaygroundEditorTheme__indent\",\n inlineImage: \"inline-editor-image\",\n layoutContainer: \"PlaygroundEditorTheme__layoutContainer\",\n layoutItem: \"PlaygroundEditorTheme__layoutItem\",\n link: \"PlaygroundEditorTheme__link\",\n list: {\n checklist: \"PlaygroundEditorTheme__checklist\",\n listitem: \"PlaygroundEditorTheme__listItem\",\n listitemChecked: \"PlaygroundEditorTheme__listItemChecked\",\n listitemUnchecked: \"PlaygroundEditorTheme__listItemUnchecked\",\n nested: {\n listitem: \"PlaygroundEditorTheme__nestedListItem\",\n },\n olDepth: [\n \"PlaygroundEditorTheme__ol1\",\n \"PlaygroundEditorTheme__ol2\",\n \"PlaygroundEditorTheme__ol3\",\n \"PlaygroundEditorTheme__ol4\",\n \"PlaygroundEditorTheme__ol5\",\n ],\n ul: \"PlaygroundEditorTheme__ul\",\n },\n ltr: \"PlaygroundEditorTheme__ltr\",\n mark: \"PlaygroundEditorTheme__mark\",\n markOverlap: \"PlaygroundEditorTheme__markOverlap\",\n paragraph: \"PlaygroundEditorTheme__paragraph\",\n quote: \"PlaygroundEditorTheme__quote text-foreground/60 border-foreground/60\",\n rtl: \"PlaygroundEditorTheme__rtl\",\n specialText: \"PlaygroundEditorTheme__specialText\",\n tab: \"PlaygroundEditorTheme__tabNode\",\n table: \"PlaygroundEditorTheme__table\",\n tableAlignment: {\n center: \"PlaygroundEditorTheme__tableAlignmentCenter\",\n right: \"PlaygroundEditorTheme__tableAlignmentRight\",\n },\n tableCell: \"PlaygroundEditorTheme__tableCell\",\n tableCellActionButton: \"PlaygroundEditorTheme__tableCellActionButton\",\n tableCellActionButtonContainer:\n \"PlaygroundEditorTheme__tableCellActionButtonContainer\",\n tableCellHeader: \"PlaygroundEditorTheme__tableCellHeader\",\n tableCellResizer: \"PlaygroundEditorTheme__tableCellResizer\",\n tableCellSelected: \"PlaygroundEditorTheme__tableCellSelected\",\n tableRowStriping: \"PlaygroundEditorTheme__tableRowStriping\",\n tableScrollableWrapper: \"PlaygroundEditorTheme__tableScrollableWrapper\",\n tableSelected: \"PlaygroundEditorTheme__tableSelected\",\n tableSelection: \"PlaygroundEditorTheme__tableSelection\",\n text: {\n bold: \"PlaygroundEditorTheme__textBold\",\n capitalize: \"PlaygroundEditorTheme__textCapitalize\",\n code: \"PlaygroundEditorTheme__textCode bg-foreground/15\",\n italic: \"PlaygroundEditorTheme__textItalic\",\n lowercase: \"PlaygroundEditorTheme__textLowercase\",\n strikethrough: \"PlaygroundEditorTheme__textStrikethrough\",\n subscript: \"PlaygroundEditorTheme__textSubscript\",\n superscript: \"PlaygroundEditorTheme__textSuperscript\",\n underline: \"PlaygroundEditorTheme__textUnderline\",\n underlineStrikethrough: \"PlaygroundEditorTheme__textUnderlineStrikethrough\",\n uppercase: \"PlaygroundEditorTheme__textUppercase\",\n },\n};\n\nexport default theme;\n","const UnderlineIcon = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 6V11.3333C8 13.5425 9.79086 15.3333 12 15.3333C14.2091 15.3333 16 13.5425 16 11.3333V6M6 18H18\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\nconst ItalicIcon = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14 6H16.6666M14 6H11.3333M14 6L9.99998 18M9.99998 18H12.6666M9.99998 18H7.33331\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\nconst StrikethroughIcon = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.1828 12.4156H13.1708C12.9051 12.3442 12.6381 12.2773 12.37 12.2151C10.6892 11.8177 9.73872 11.5268 9.73872 10.1662C9.72514 9.93138 9.75995 9.69624 9.84098 9.47539C9.92201 9.25454 10.0475 9.05268 10.2098 8.88233C10.7185 8.46472 11.3551 8.2344 12.0132 8.22991C13.7072 8.18801 14.4883 8.76262 15.1269 9.63652L16.0936 8.93022C15.6412 8.28026 15.0244 7.7621 14.3061 7.42873C13.5878 7.09535 12.7939 6.95871 12.0055 7.03279C11.037 7.03882 10.1027 7.39152 9.3718 8.027C9.09485 8.30808 8.87837 8.64288 8.73569 9.01079C8.59302 9.3787 8.52717 9.77192 8.5422 10.1662C8.51585 10.5977 8.59686 11.0291 8.77798 11.4216C8.9591 11.8141 9.23469 12.1557 9.5801 12.4156H4.81738V13.6127H12.9889C14.1662 13.9539 14.8701 14.398 14.8881 15.6227C14.9075 15.8843 14.8716 16.147 14.7827 16.3938C14.6938 16.6406 14.5539 16.8659 14.3721 17.055C13.7389 17.5545 12.9519 17.8187 12.1455 17.8026C11.5436 17.7854 10.9536 17.6314 10.42 17.3523C9.88648 17.0733 9.42343 16.6764 9.06594 16.1919L8.14835 16.9605C8.61339 17.5799 9.21328 18.0854 9.90258 18.4387C10.5919 18.792 11.3525 18.9839 12.127 18.9997H12.1868C13.2922 19.0124 14.3651 18.6258 15.2083 17.911C15.5075 17.6092 15.7402 17.248 15.8912 16.8508C16.0422 16.4536 16.1083 16.0291 16.0852 15.6047C16.1077 14.8788 15.8627 14.1699 15.3969 13.6127H19.1828V12.4156Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst CodeIcon = () => (\n <svg\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14.4333 6.85056C14.5614 6.88479 14.6707 6.96849 14.7371 7.08325C14.8034 7.19802 14.8215 7.33446 14.7873 7.46256L12.1387 17.3492C12.1043 17.4774 12.0204 17.5867 11.9054 17.653C11.7904 17.7193 11.6538 17.7373 11.5257 17.7029C11.3975 17.6685 11.2882 17.5846 11.2219 17.4696C11.1555 17.3547 11.1376 17.2181 11.172 17.0899L13.8213 7.20322C13.8383 7.13979 13.8677 7.08033 13.9077 7.02823C13.9477 6.97614 13.9976 6.93244 14.0545 6.89963C14.1114 6.86682 14.1742 6.84554 14.2393 6.837C14.3044 6.82847 14.3706 6.83285 14.434 6.84989M15.942 8.88522C16.0307 8.78667 16.1549 8.72737 16.2873 8.72037C16.4197 8.71337 16.5494 8.75924 16.648 8.84789L17.806 9.89056C18.2973 10.3319 18.704 10.6986 18.984 11.0306C19.2773 11.3806 19.4867 11.7559 19.4867 12.2199C19.4867 12.6832 19.278 13.0586 18.984 13.4079C18.704 13.7406 18.2973 14.1072 17.806 14.5486L16.648 15.5912C16.5494 15.68 16.4196 15.7259 16.2872 15.719C16.1547 15.7121 16.0304 15.6528 15.9417 15.5542C15.8529 15.4557 15.8069 15.3259 15.8139 15.1934C15.8208 15.0609 15.8801 14.9366 15.9787 14.8479L17.11 13.8299C17.6353 13.3572 17.9893 13.0366 18.2187 12.7646C18.4387 12.5026 18.4867 12.3499 18.4867 12.2192C18.4867 12.0886 18.4387 11.9366 18.2187 11.6746C17.9893 11.4019 17.6353 11.0812 17.11 10.6092L15.9787 9.59122C15.9298 9.5473 15.89 9.49417 15.8617 9.43487C15.8333 9.37557 15.8169 9.31126 15.8135 9.24563C15.81 9.18 15.8195 9.11432 15.8415 9.05236C15.8634 8.99041 15.8973 8.93338 15.9413 8.88456M9.98133 9.59122C10.0799 9.50246 10.1392 9.37818 10.1461 9.24572C10.1531 9.11326 10.1071 8.98346 10.0183 8.88489C9.92957 8.78632 9.80529 8.72704 9.67282 8.7201C9.54036 8.71316 9.41057 8.75913 9.31199 8.84789L8.15399 9.89056C7.66266 10.3319 7.25599 10.6986 6.97599 11.0306C6.68266 11.3806 6.47333 11.7559 6.47333 12.2199C6.47333 12.6832 6.68199 13.0586 6.97599 13.4079C7.25599 13.7406 7.66266 14.1072 8.15399 14.5486L9.31199 15.5912C9.41057 15.68 9.54036 15.7259 9.67282 15.719C9.80529 15.7121 9.92957 15.6528 10.0183 15.5542C10.1071 15.4557 10.1531 15.3259 10.1461 15.1934C10.1392 15.0609 10.0799 14.9366 9.98133 14.8479L8.84999 13.8299C8.32466 13.3572 7.97066 13.0366 7.74133 12.7646C7.52133 12.5026 7.47333 12.3499 7.47333 12.2192C7.47333 12.0886 7.52133 11.9366 7.74133 11.6746C7.97066 11.4019 8.32466 11.0812 8.84999 10.6092L9.98133 9.59122Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst LinkIcon = () => (\n <svg\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.0708 7.90929C16.0388 6.87724 14.3655 6.87724 13.3335 7.90929L12.2223 9.0204C12.0271 9.21567 11.7105 9.21567 11.5152 9.0204C11.32 8.82514 11.32 8.50856 11.5152 8.3133L12.6264 7.20218C14.0489 5.77961 16.3554 5.77961 17.7779 7.20218C19.2005 8.62475 19.2005 10.9312 17.7779 12.3538L16.6668 13.4649C16.4716 13.6601 16.155 13.6601 15.9597 13.4649C15.7644 13.2696 15.7644 12.953 15.9597 12.7578L17.0708 11.6467C18.1029 10.6146 18.1029 8.94133 17.0708 7.90929ZM14.7478 10.2324C14.943 10.4276 14.943 10.7442 14.7478 10.9395L11.9193 13.7679C11.7241 13.9632 11.4075 13.9632 11.2122 13.7679C11.017 13.5727 11.017 13.2561 11.2122 13.0608L14.0406 10.2324C14.2359 10.0371 14.5525 10.0371 14.7478 10.2324ZM12.6263 16.0911C11.5943 17.1231 9.92101 17.1231 8.88896 16.0911C7.85692 15.059 7.85692 13.3857 8.88896 12.3537L10.0001 11.2426C10.1953 11.0473 10.1953 10.7307 10.0001 10.5355C9.80482 10.3402 9.48824 10.3402 9.29297 10.5355L8.18186 11.6466C6.75929 13.0692 6.75929 15.3756 8.18186 16.7982C9.60443 18.2207 11.9109 18.2207 13.3334 16.7982L14.4446 15.687C14.6398 15.4918 14.6398 15.1752 14.4446 14.9799C14.2493 14.7847 13.9327 14.7847 13.7374 14.9799L12.6263 16.0911Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst TodoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M11.25 12H21\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n />\n <path\n d=\"M3.75 12L5.25 13.5L8.25 10.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n />\n <path\n d=\"M11.25 6H21\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n />\n <path\n d=\"M3.75 6L5.25 7.5L8.25 4.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n />\n <path\n d=\"M11.25 18H21\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n />\n <path\n d=\"M3.75 18L5.25 19.5L8.25 16.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n />\n </svg>\n);\nconst NoteIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M15.459 5.48027L18.5413 8.56569L19.6025 7.50557L16.5202 4.42015L15.459 5.48027ZM9.2693 18.8989L5.15261 14.7781L4.09141 15.8382L8.2081 19.9591L9.2693 18.8989ZM17.3034 14.2922L15.3863 15.0125L15.9139 16.4167L17.831 15.6964L17.3034 14.2922ZM9.03674 8.6398L9.7312 6.74439L8.32276 6.22835L7.6283 8.12376L9.03674 8.6398ZM6.0447 11.3965C6.75616 11.2003 7.29751 11.0625 7.7402 10.7438L6.86379 9.52647C6.69085 9.65098 6.46633 9.72429 5.64603 9.95045L6.0447 11.3965ZM7.6283 8.12376C7.33535 8.92333 7.2437 9.14154 7.10532 9.30392L8.24698 10.2768C8.60073 9.86176 8.78262 9.33338 9.03674 8.6398L7.6283 8.12376ZM7.7402 10.7438C7.92729 10.6091 8.09744 10.4523 8.24698 10.2768L7.10532 9.30392C7.03402 9.38758 6.95293 9.4623 6.86379 9.52647L7.7402 10.7438ZM15.3863 15.0125C14.6972 15.2714 14.1719 15.4571 13.7603 15.8135L14.7423 16.9475C14.9031 16.8082 15.1195 16.7152 15.9139 16.4167L15.3863 15.0125ZM14.104 18.4001C14.3293 17.5813 14.4024 17.3569 14.5265 17.1838L13.3078 16.3094C12.9905 16.7517 12.8532 17.2919 12.6577 18.0022L14.104 18.4001ZM13.7603 15.8135C13.5906 15.9605 13.4387 16.1269 13.3078 16.3094L14.5265 17.1838C14.589 17.0968 14.6614 17.0175 14.7423 16.9475L13.7603 15.8135ZM5.15261 14.7781C4.50648 14.1313 4.06831 13.691 3.78399 13.3338C3.49867 12.9753 3.46921 12.8201 3.46877 12.7505L1.9688 12.76C1.97248 13.3422 2.2616 13.8297 2.61035 14.2679C2.96009 14.7073 3.47148 15.2176 4.09141 15.8382L5.15261 14.7781ZM5.64603 9.95045C4.80081 10.1835 4.10428 10.3743 3.58329 10.5835C3.06374 10.792 2.57149 11.0732 2.28086 11.5778L3.5807 12.3264C3.61532 12.2663 3.71725 12.146 4.14212 11.9755C4.56556 11.8055 5.1637 11.6394 6.0447 11.3965L5.64603 9.95045ZM3.46877 12.7505C3.46783 12.6016 3.50648 12.4553 3.5807 12.3264L2.28086 11.5778C2.07387 11.9372 1.96618 12.3452 1.9688 12.76L3.46877 12.7505ZM8.2081 19.9591C8.83197 20.5836 9.34497 21.0987 9.78679 21.4506C10.2273 21.8015 10.7182 22.0922 11.3044 22.0931L11.3066 20.5931C11.2372 20.593 11.0817 20.5644 10.7213 20.2773C10.3621 19.9912 9.91956 19.5499 9.2693 18.8989L8.2081 19.9591ZM12.6577 18.0022C12.4135 18.8897 12.2465 19.4924 12.0754 19.9188C11.9036 20.3467 11.7824 20.4487 11.7218 20.4833L12.4653 21.7861C12.9743 21.4956 13.2575 21.0004 13.4674 20.4775C13.6779 19.9532 13.8697 19.2516 14.104 18.4001L12.6577 18.0022ZM11.3044 22.0931C11.7115 22.0937 12.1117 21.9879 12.4653 21.7861L11.7218 20.4833C11.5953 20.5555 11.4522 20.5933 11.3066 20.5931L11.3044 22.0931ZM18.5413 8.56569C19.6048 9.63023 20.3405 10.3695 20.792 10.9788C21.2355 11.5774 21.2866 11.8959 21.2324 12.1464L22.6985 12.4634C22.8884 11.5854 22.5385 10.8162 21.9972 10.0857C21.4638 9.36593 20.6308 8.53487 19.6025 7.50557L18.5413 8.56569ZM17.831 15.6964C19.1924 15.1849 20.2943 14.773 21.0773 14.3384C21.8721 13.8973 22.5086 13.3416 22.6985 12.4634L21.2324 12.1464C21.1782 12.3968 21.0004 12.6655 20.3494 13.0268C19.6867 13.3946 18.7115 13.7632 17.3034 14.2922L17.831 15.6964ZM16.5202 4.42015C15.4843 3.38321 14.6483 2.54354 13.9248 2.00639C13.1911 1.46166 12.4177 1.10913 11.5359 1.30368L11.8591 2.76846C12.1088 2.71336 12.428 2.76331 13.0307 3.21076C13.6436 3.6658 14.3879 4.40802 15.459 5.48027L16.5202 4.42015ZM9.7312 6.74439C10.2528 5.32076 10.6164 4.33404 10.9815 3.66316C11.3405 3.00339 11.6093 2.82358 11.8591 2.76846L11.5359 1.30368C10.6543 1.4982 10.1008 2.14333 9.66395 2.94619C9.23311 3.73794 8.8272 4.85155 8.32276 6.22835L9.7312 6.74439Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M1.4694 21.4697C1.17666 21.7627 1.1769 22.2376 1.46994 22.5304C1.76298 22.8231 2.23786 22.8229 2.5306 22.5298L1.4694 21.4697ZM7.18383 17.8719C7.47657 17.5788 7.47633 17.1039 7.18329 16.8112C6.89024 16.5185 6.41537 16.5187 6.12263 16.8117L7.18383 17.8719ZM2.5306 22.5298L7.18383 17.8719L6.12263 16.8117L1.4694 21.4697L2.5306 22.5298Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst FaceSmileIcon = () => (\n <svg\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.98 19.1666C9.02663 19.1666 5.81329 15.9533 5.81329 11.9999C5.81329 8.04659 9.02663 4.83325 12.98 4.83325C16.9333 4.83325 20.1466 8.04659 20.1466 11.9999C20.1466 15.9533 16.9333 19.1666 12.98 19.1666ZM12.98 5.83325C9.57996 5.83325 6.81329 8.59992 6.81329 11.9999C6.81329 15.3999 9.57996 18.1666 12.98 18.1666C16.38 18.1666 19.1466 15.3999 19.1466 11.9999C19.1466 8.59992 16.38 5.83325 12.98 5.83325ZM15.8133 10.6666C15.8133 9.99325 15.46 9.49992 14.98 9.49992C14.5 9.49992 14.1466 9.99325 14.1466 10.6666C14.1466 11.3399 14.5 11.8333 14.98 11.8333C15.46 11.8333 15.8133 11.3399 15.8133 10.6666ZM11.8133 10.6666C11.8133 9.99325 11.46 9.49992 10.98 9.49992C10.5 9.49992 10.1466 9.99325 10.1466 10.6666C10.1466 11.3399 10.5 11.8333 10.98 11.8333C11.46 11.8333 11.8133 11.3399 11.8133 10.6666ZM16.0466 14.2999C16.2133 14.0799 16.1733 13.7666 15.9533 13.5999C15.7333 13.4332 15.42 13.4732 15.2533 13.6932C14.7066 14.4132 13.88 14.8266 12.9866 14.8266C12.0933 14.8266 11.26 14.3999 10.7266 13.6932C10.56 13.4732 10.2466 13.4266 10.0266 13.5933C9.80663 13.7599 9.75996 14.0733 9.92663 14.2933C10.6466 15.2533 11.7933 15.8266 12.9866 15.8266C14.18 15.8266 15.3133 15.2666 16.0533 14.2933L16.0466 14.2999Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst MagicoonIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n >\n <path\n d=\"M15.4155 7.68006C15.3289 7.47339 15.1689 7.32006 14.9155 7.21339L13.1889 6.72006C11.7889 6.32672 10.6689 5.21339 10.2755 3.81339L9.78221 2.09339C9.70221 1.82005 9.49552 1.61339 9.22219 1.53339C9.00886 1.47339 8.78886 1.50006 8.60219 1.60672C8.40886 1.71339 8.27552 1.88672 8.21552 2.09339L7.72219 3.81339C7.32886 5.21339 6.20885 6.32672 4.80219 6.72006L3.07554 7.21339C2.80221 7.28673 2.58886 7.50672 2.51552 7.77339C2.39552 8.20672 2.64221 8.66005 3.07554 8.78005L4.80219 9.27339C6.20218 9.66672 7.32218 10.7801 7.71552 12.1801L8.20888 13.9001C8.30888 14.2467 8.62887 14.4934 8.98887 14.4934C9.34887 14.4934 9.66887 14.2534 9.77553 13.9001L10.2689 12.1734C10.6622 10.7734 11.7822 9.66005 13.1889 9.26005L14.9622 8.75339C15.1688 8.67339 15.3355 8.50672 15.4155 8.30005C15.5022 8.09338 15.4955 7.86672 15.4155 7.66672V7.68006ZM12.9155 8.31339C11.1822 8.80005 9.80219 10.1801 9.30886 11.9134L8.99554 13.0201L8.67552 11.9134C8.18218 10.1801 6.8022 8.80005 5.06887 8.31339L3.96218 8.00005L5.06887 7.68672C6.8022 7.20005 8.18218 5.82006 8.67552 4.08672L8.99554 2.98005L9.30886 4.08672C9.80219 5.82006 11.1822 7.20005 12.9155 7.68672L14.0222 8.00005L12.9155 8.31339ZM6.57554 12.1601C6.59554 12.2134 6.57553 12.2667 6.5222 12.2867L6.00222 12.4334C5.52888 12.5667 5.15553 12.9334 5.0222 13.4067L4.87555 13.9267C4.87555 13.9267 4.84219 13.98 4.80886 13.9934C4.75552 14.0067 4.7022 13.9801 4.68886 13.9267L4.54222 13.4067C4.40888 12.9334 4.03553 12.5667 3.56219 12.4334L3.04222 12.2867C3.04222 12.2867 2.98886 12.2534 2.97552 12.2201C2.96219 12.1667 2.98888 12.12 3.04222 12.1L3.56219 11.9534C4.03553 11.82 4.40888 11.4534 4.54222 10.9801L4.68886 10.4601C4.68886 10.4601 4.72218 10.4067 4.75551 10.3934C4.80885 10.3801 4.86222 10.4067 4.87555 10.4601L5.0222 10.9801C5.15553 11.4534 5.52888 11.82 6.00222 11.9534L6.5222 12.1C6.5222 12.1 6.56221 12.1267 6.57554 12.1534V12.1601ZM12.6288 3.25339C12.6288 3.25339 12.5955 3.23339 12.5888 3.21339C12.5822 3.18006 12.5955 3.14672 12.6288 3.13339L12.9755 3.03339C13.2889 2.94672 13.5355 2.70005 13.6288 2.38672L13.7289 2.04005C13.7289 2.04005 13.7489 2.00672 13.7689 2.00005C13.8022 1.99339 13.8355 2.00672 13.8489 2.04005L13.9489 2.38672C14.0355 2.70005 14.2822 2.94672 14.6022 3.03339L14.9489 3.13339C14.9489 3.13339 14.9755 3.15339 14.9822 3.16672C14.9955 3.20005 14.9822 3.24006 14.9489 3.25339L14.6022 3.35339C14.2889 3.44005 14.0422 3.68672 13.9489 4.00005L13.8489 4.34672C13.8489 4.34672 13.8289 4.38005 13.8089 4.38672C13.7755 4.39339 13.7422 4.38006 13.7289 4.34672L13.6288 4.00005C13.5422 3.68672 13.2955 3.44005 12.9755 3.35339L12.6288 3.25339Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst PerspectiveIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M3 8.85106V5.09998C3 3.7798 4.14713 2.78729 5.38174 3.03927L9 3.77776M3 8.85106V15.1489M3 8.85106L9 9.20094M3 15.1489V18.9C3 20.2202 4.14713 21.2127 5.38174 20.9607L9 20.2222M3 15.1489L9 14.7991M21 9.9007V14.0993M21 9.9007V7.95735C21 6.95244 20.3215 6.08846 19.3817 5.89665L15 5.00234M21 9.9007L15 9.55082M21 14.0993V16.0426C21 17.0476 20.3215 17.9115 19.3817 18.1034L15 18.9977M21 14.0993L15 14.4492M9 9.20094L15 9.55082M9 9.20094V14.7991M9 9.20094V3.77776M15 9.55082V5.00234M15 9.55082V14.4492M15 14.4492L9 14.7991M15 14.4492V18.9977M9 14.7991V20.2222M15 5.00234L9 3.77776M15 18.9977L9 20.2222\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\nconst BoldIcon = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.0215 17C7.90417 17 7.80817 16.9627 7.7335 16.888C7.65883 16.8133 7.6215 16.7173 7.6215 16.6V6.2C7.6215 6.08267 7.65883 5.98667 7.7335 5.912C7.80817 5.83733 7.90417 5.8 8.0215 5.8H12.7735C13.6588 5.8 14.3842 5.928 14.9495 6.184C15.5148 6.44 15.9308 6.80267 16.1975 7.272C16.4748 7.74133 16.6135 8.29067 16.6135 8.92C16.6135 9.31467 16.5388 9.66133 16.3895 9.96C16.2508 10.2587 16.0748 10.504 15.8615 10.696C15.6588 10.888 15.4615 11.032 15.2695 11.128C15.6855 11.32 16.0482 11.64 16.3575 12.088C16.6775 12.5253 16.8375 13.048 16.8375 13.656C16.8375 14.328 16.6882 14.9147 16.3895 15.416C16.0908 15.9173 15.6482 16.3067 15.0615 16.584C14.4748 16.8613 13.7602 17 12.9175 17H8.0215ZM10.1655 15.128H12.6135C13.1362 15.128 13.5308 14.984 13.7975 14.696C14.0642 14.3973 14.1975 14.0453 14.1975 13.64C14.1975 13.224 14.0588 12.8773 13.7815 12.6C13.5148 12.312 13.1255 12.168 12.6135 12.168H10.1655V15.128ZM10.1655 10.328H12.4695C12.9708 10.328 13.3442 10.2053 13.5895 9.96C13.8455 9.704 13.9735 9.37867 13.9735 8.984C13.9735 8.58933 13.8455 8.27467 13.5895 8.04C13.3442 7.79467 12.9708 7.672 12.4695 7.672H10.1655V10.328Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst PlusIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n);\nconst ChevronDownIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\nconst SubscriptIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M12.3158 18H8.52632M14.8421 8C14.8421 7.58133 14.8421 7.372 14.7916 7.18867C14.7364 6.9969 14.6418 6.82037 14.5145 6.6717C14.3872 6.52302 14.2304 6.40589 14.0552 6.32867C13.8878 6.256 13.6977 6.23533 13.3187 6.19533C12.4232 6.09733 11.2977 6 10.4211 6C9.54442 6 8.41895 6.098 7.52337 6.19467C7.14442 6.23533 6.95495 6.256 6.78695 6.328C6.61187 6.4053 6.45513 6.52247 6.32794 6.67114C6.20074 6.81981 6.10623 6.9963 6.05116 7.188C6 7.37267 6 7.582 6 8M10.4211 6.23267V17.8993M18 18H16.7368C16.4394 18 16.2903 18 16.1975 17.9047C16.1053 17.8087 16.1053 17.6553 16.1053 17.3473V16.718C16.1053 16.1873 16.2164 16.0833 16.7368 16.0727C17.2276 16.0627 17.52 16.026 17.7221 15.8887C18 15.7013 18 15.3987 18 14.7947C18 13.6393 16.1053 14.084 16.1053 14.084\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\nconst SuperscriptIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M11.667 18.5H7.66699\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.167 6.5C10.167 6.36739 10.1143 6.24021 10.0205 6.14645C9.92678 6.05268 9.7996 6 9.66699 6C9.53438 6 9.40721 6.05268 9.31344 6.14645C9.21967 6.24021 9.16699 6.36739 9.16699 6.5H10.167ZM9.16699 18.5C9.16699 18.6326 9.21967 18.7598 9.31344 18.8536C9.40721 18.9473 9.53438 19 9.66699 19C9.7996 19 9.92678 18.9473 10.0205 18.8536C10.1143 18.7598 10.167 18.6326 10.167 18.5H9.16699ZM9.16699 6.5V18.5H10.167V6.5H9.16699Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14.3333 8.5C14.3333 8.08133 14.3333 7.872 14.28 7.68867C14.2218 7.4969 14.1219 7.32037 13.9876 7.1717C13.8532 7.02302 13.6876 6.90589 13.5027 6.82867C13.326 6.756 13.1253 6.73533 12.7253 6.69533C11.78 6.59733 10.592 6.5 9.66667 6.5C8.74133 6.5 7.55333 6.598 6.608 6.69467C6.208 6.73533 6.008 6.756 5.83067 6.828C5.64586 6.9053 5.48042 7.02247 5.34615 7.17114C5.21189 7.31981 5.11213 7.4963 5.054 7.688C5 7.87267 5 8.082 5 8.5M18.3333 12.5H17C16.686 12.5 16.5287 12.5 16.4307 12.4047C16.3333 12.3087 16.3333 12.1553 16.3333 11.8467V11.2173C16.3333 10.6867 16.4507 10.5827 17 10.572C17.518 10.562 17.8267 10.5253 18.04 10.388C18.3333 10.2007 18.3333 9.898 18.3333 9.294C18.3333 8.13867 16.3333 8.58333 16.3333 8.58333\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\nconst MessageEditIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n >\n <path\n d=\"M18.9824 2.25H6.98242C4.56442 2.25 3.23242 3.582 3.23242 6V21C3.23242 21.303 3.41531 21.577 3.69531 21.693C3.78831 21.732 3.88542 21.75 3.98242 21.75C4.17742 21.75 4.36945 21.674 4.51245 21.53L7.29248 18.75H18.9824C21.4004 18.75 22.7324 17.418 22.7324 15V6C22.7324 3.582 21.4004 2.25 18.9824 2.25ZM21.2324 15C21.2324 16.577 20.5594 17.25 18.9824 17.25H6.98242C6.78342 17.25 6.59239 17.329 6.45239 17.47L4.73242 19.1899V6C4.73242 4.423 5.40542 3.75 6.98242 3.75H18.9824C20.5594 3.75 21.2324 4.423 21.2324 6V15ZM16.2615 6.22998C15.9515 5.91998 15.5405 5.75 15.1035 5.75C15.1025 5.75 15.1013 5.75 15.1003 5.75C14.6623 5.75 14.2504 5.92206 13.9424 6.23206L8.45142 11.748C8.31042 11.889 8.23242 12.079 8.23242 12.277V14.499C8.23242 14.913 8.56842 15.249 8.98242 15.249H11.2053C11.4033 15.249 11.5944 15.17 11.7344 15.031L17.2505 9.54004C17.5615 9.23104 17.7314 8.81998 17.7324 8.38098C17.7334 7.94198 17.5624 7.52899 17.2524 7.21899L16.2615 6.22998ZM15.1025 7.25C15.1285 7.25 15.1664 7.25702 15.2014 7.29102L16.1914 8.28101C16.2254 8.31501 16.2324 8.354 16.2324 8.38C16.2324 8.406 16.2254 8.44405 16.1914 8.47705L15.5554 9.11096L14.3723 7.92798L15.0063 7.29102C15.0393 7.25702 15.0775 7.25 15.1025 7.25ZM10.8955 13.75H9.73242V12.587L13.3135 8.98999L14.4915 10.1689L10.8955 13.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst TypeUppercaseIcon = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.19584 6.59991C9.31906 6.60165 9.43875 6.64127 9.53866 6.71341C9.63856 6.78555 9.71383 6.8867 9.75424 7.00311L12.6758 15.4031C12.7021 15.4776 12.7134 15.5566 12.709 15.6355C12.7047 15.7144 12.6848 15.7917 12.6505 15.8629C12.6162 15.9341 12.5682 15.9978 12.5092 16.0504C12.4502 16.103 12.3814 16.1434 12.3067 16.1693C12.2321 16.1952 12.1531 16.2061 12.0742 16.2014C11.9953 16.1967 11.9181 16.1765 11.8471 16.1419C11.776 16.1072 11.7125 16.0589 11.6602 15.9997C11.6079 15.9405 11.5678 15.8715 11.5422 15.7967L10.9174 13.9999H7.24784L6.55984 15.8127C6.5007 15.9577 6.38723 16.0738 6.24367 16.1362C6.10011 16.1987 5.93781 16.2026 5.79143 16.147C5.64505 16.0915 5.52618 15.9809 5.46019 15.8389C5.39421 15.697 5.38633 15.5348 5.43824 15.3871L8.62544 6.98711C8.66913 6.87189 8.74724 6.77292 8.84915 6.70365C8.95106 6.63437 9.07263 6.59815 9.19584 6.59991ZM7.70384 12.7999H10.4998L9.16304 8.95591L7.70384 12.7999ZM13.5998 6.79991C13.4407 6.79991 13.2881 6.86313 13.1756 6.97565C13.0631 7.08817 12.9998 7.24079 12.9998 7.39991V15.5999C12.9998 15.9311 13.2686 16.1999 13.5998 16.1999H15.7998C16.4192 16.2 17.021 15.9948 17.5113 15.6164C18.0016 15.238 18.3525 14.7077 18.5093 14.1085C18.666 13.5094 18.6197 12.8752 18.3775 12.3052C18.1354 11.7351 17.7111 11.2615 17.171 10.9583C17.4906 10.5979 17.6992 10.1528 17.7718 9.67655C17.8443 9.20035 17.7778 8.71332 17.5801 8.27404C17.3824 7.83476 17.0621 7.46194 16.6575 7.20043C16.253 6.93891 15.7815 6.79983 15.2998 6.79991H13.5998ZM16.5998 9.29991C16.5998 10.0175 16.0182 10.5999 15.2998 10.5999H14.1998V7.99991H15.2998C16.0182 7.99991 16.5998 8.58231 16.5998 9.29991ZM15.7998 14.9999H14.1998V11.7999H15.7998C16.2242 11.7999 16.6312 11.9685 16.9312 12.2685C17.2313 12.5686 17.3998 12.9756 17.3998 13.3999C17.3998 13.8243 17.2313 14.2312 16.9312 14.5313C16.6312 14.8313 16.2242 14.9999 15.7998 14.9999Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst TypeLowercaseIcon = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.1663 5C13.2989 5 13.4261 5.05268 13.5199 5.14645C13.6137 5.24021 13.6663 5.36739 13.6663 5.5V10.9913C14.123 10.5793 14.7023 10.3333 15.333 10.3333C16.8063 10.3333 17.9997 11.6767 17.9997 13.3333C17.9997 14.99 16.8063 16.3333 15.333 16.3333C14.7023 16.3333 14.123 16.0867 13.6663 15.6753V15.8333C13.6663 15.9659 13.6137 16.0931 13.5199 16.1869C13.4261 16.2807 13.2989 16.3333 13.1663 16.3333C13.0337 16.3333 12.9066 16.2807 12.8128 16.1869C12.719 16.0931 12.6663 15.9659 12.6663 15.8333V5.5C12.6663 5.36739 12.719 5.24021 12.8128 5.14645C12.9066 5.05268 13.0337 5 13.1663 5ZM13.6663 13.3333C13.6663 14.552 14.5197 15.3333 15.333 15.3333C16.1463 15.3333 16.9997 14.552 16.9997 13.3333C16.9997 12.1147 16.1463 11.3333 15.333 11.3333C14.5197 11.3333 13.6663 12.1147 13.6663 13.3333ZM8.99967 10.0007L9.19101 10.0073C10.4977 10.0727 11.2763 10.8247 11.3303 12.0373L11.333 12.1733V15.84C11.333 15.9608 11.2892 16.0776 11.2098 16.1686C11.1304 16.2597 11.0207 16.3189 10.901 16.3353L10.833 16.34C10.7122 16.34 10.5954 16.2962 10.5044 16.2168C10.4133 16.1374 10.3541 16.0277 10.3377 15.908L10.333 15.84L10.3323 15.7707C9.67367 16.1473 9.06501 16.34 8.49967 16.34C7.27434 16.34 6.33301 15.4773 6.33301 14.1733C6.33301 13.024 7.12501 12.17 8.43967 12.0107C9.07372 11.9361 9.71618 11.9836 10.3323 12.1507C10.3257 11.412 9.96167 11.0473 9.14167 11.006C8.50034 10.9747 8.04901 11.0647 7.78501 11.2493C7.73132 11.2884 7.67038 11.3164 7.60576 11.3317C7.54114 11.3469 7.47412 11.3492 7.40863 11.3382C7.34313 11.3273 7.28046 11.3035 7.22428 11.2681C7.1681 11.2327 7.11954 11.1865 7.08142 11.1321C7.0433 11.0777 7.01639 11.0163 7.00226 10.9514C6.98813 10.8865 6.98707 10.8195 6.99913 10.7542C7.0112 10.6889 7.03615 10.6267 7.07252 10.5711C7.1089 10.5156 7.15598 10.4678 7.21101 10.4307C7.64967 10.1233 8.24701 9.98733 8.99967 10.0007ZM10.333 13.216L10.131 13.156C9.62085 13.0111 9.08728 12.9674 8.56034 13.0273C7.73901 13.1273 7.33367 13.564 7.33367 14.198C7.33367 14.9287 7.80834 15.3647 8.50034 15.3647C8.95367 15.3647 9.51234 15.1547 10.1677 14.722L10.333 14.6093V13.216Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst TypeCapitalizeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M8.6 17.75V8.6h-3V7h7.7v1.6h-3v9.15zm8.6.25q-1.1 0-1.725-.638T14.85 15.6v-4.05H13.5V10.1h1.35V7.925h1.65V10.1h1.85v1.45H16.5v3.7q0 .575.263.9t.712.325q.225 0 .462-.088t.463-.237v1.625q-.25.125-.55.175t-.65.05\"\n />\n </svg>\n);\nconst UndoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M18.6154 14.6533C18.5761 14.6627 18.538 14.6667 18.4993 14.6667C18.2727 14.6667 18.068 14.5121 18.0133 14.2821C17.416 11.7607 15.1827 10 12.5801 10C10.4887 10 8.58994 11.1827 7.64128 13H9.16992C9.44592 13 9.66992 13.224 9.66992 13.5C9.66992 13.776 9.44592 14 9.16992 14H6.5C6.224 14 6 13.776 6 13.5V10.8333C6 10.5573 6.224 10.3333 6.5 10.3333C6.776 10.3333 7 10.5573 7 10.8333V12.0999C8.18333 10.2053 10.2847 9 12.5801 9C15.6487 9 18.2827 11.0773 18.986 14.0513C19.05 14.3199 18.8841 14.5893 18.6154 14.6533Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst RedoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M18.0001 10.8333V13.5C18.0001 13.776 17.7761 14 17.5001 14H14.8302C14.5542 14 14.3302 13.776 14.3302 13.5C14.3302 13.224 14.5542 13 14.8302 13H16.3589C15.4102 11.1827 13.5114 10 11.4201 10C8.81738 10 6.58345 11.7607 5.98678 14.2821C5.93278 14.5121 5.72745 14.6667 5.50078 14.6667C5.46211 14.6667 5.42407 14.6627 5.38473 14.6533C5.11607 14.5893 4.95014 14.3199 5.01348 14.0513C5.71748 11.0773 8.3514 9 11.4194 9C13.7147 9 15.8161 10.2053 16.9995 12.0999V10.8333C16.9995 10.5573 17.2235 10.3333 17.4995 10.3333C17.7755 10.3333 18.0001 10.5573 18.0001 10.8333Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst UploadIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M19 14.3333V17.4444C19 17.8569 18.8361 18.2526 18.5444 18.5443C18.2527 18.836 17.857 18.9999 17.4444 18.9999H6.55556C6.143 18.9999 5.74733 18.836 5.45561 18.5443C5.16389 18.2526 5 17.8569 5 17.4444V14.3333\"\n stroke=\"currentColor\"\n strokeWidth=\"1.55556\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.8891 8.88889L12.0002 5L8.11133 8.88889\"\n stroke=\"currentColor\"\n strokeWidth=\"1.55556\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 5V14.3333\"\n stroke=\"currentColor\"\n strokeWidth=\"1.55556\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\nconst AddImageIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n >\n <path\n d=\"M24.333 4.12248V6.6488H20.5435V10.4383H18.0172V6.6488H14.2277V4.12248H18.0172V0.333008H20.5435V4.12248H24.333ZM13.5962 12.9646C14.6421 12.9646 15.4909 12.1157 15.4909 11.0698C15.4909 10.024 14.6421 9.17511 13.5962 9.17511C12.5503 9.17511 11.7014 10.024 11.7014 11.0698C11.7014 12.1157 12.5503 12.9646 13.5962 12.9646ZM18.0172 17.0496L17.3692 16.3296C16.3663 15.2117 14.6155 15.2117 13.6101 16.3296L12.7827 17.2517L6.6488 10.4383L2.85932 14.6484V6.6488H11.7014V4.12248H2.85932C1.46353 4.12248 0.333008 5.25301 0.333008 6.6488V21.8067C0.333008 23.2025 1.46353 24.333 2.85932 24.333H18.0172C19.413 24.333 20.5435 23.2025 20.5435 21.8067V12.9646H18.0172V17.0496Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst HorizontalRuleIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"6\"\n viewBox=\"0 0 30 6\"\n fill=\"none\"\n >\n <path\n d=\"M3 3H27\"\n stroke=\"currentColor\"\n strokeWidth=\"5.33333\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\nconst SignatureIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M14.1257 18.0013L14.3572 17.9996C15.4031 17.9996 15.9526 18.4331 16.6304 19.4603L16.9679 19.9817C17.2311 20.3713 17.3953 20.5345 17.6022 20.6197C17.9731 20.7726 18.2804 20.6974 19.4093 20.1539L19.7549 19.9856C20.4609 19.639 20.9427 19.4406 21.487 19.3045C21.8315 19.2184 22.1805 19.4278 22.2666 19.7723C22.3527 20.1167 22.1433 20.4657 21.7988 20.5518C21.4605 20.6364 21.1363 20.7578 20.7122 20.9532L19.7191 21.431C18.3752 22.0656 17.9194 22.1411 17.1123 21.8084C16.5765 21.5876 16.2718 21.2681 15.826 20.5865L15.6591 20.326C15.1432 19.513 14.8836 19.2853 14.3572 19.2853L14.2212 19.2885C13.8499 19.311 13.6095 19.4811 12.008 20.6696C10.5147 21.7778 9.37579 22.3072 7.92748 22.3072C6.16184 22.3072 4.49813 21.9828 2.94132 21.3343L5.41188 20.7632C6.22095 20.9354 7.05922 21.0215 7.92748 21.0215C9.03376 21.0215 9.95075 20.5953 11.2418 19.6372L12.2362 18.9035C13.3259 18.1115 13.5683 18.0133 14.1257 18.0013ZM19.5233 2.7614C20.9578 4.19593 20.9579 6.52174 19.5234 7.9563L18.6358 8.84399C19.6232 10.0453 19.5876 11.3185 18.6696 12.2392L16.0973 14.8115C15.8461 15.0625 15.4391 15.0623 15.1881 14.8111C14.9372 14.5599 14.9374 14.1529 15.1886 13.902L17.7591 11.3314C18.1749 10.9144 18.2229 10.3967 17.7249 9.75551L8.64397 18.8363C8.38837 19.0919 8.0661 19.2705 7.71388 19.3518L2.50177 20.5546C2.03886 20.6614 1.624 20.2465 1.73082 19.7836L2.93362 14.5715C3.0149 14.2193 3.1935 13.897 3.44907 13.6415L14.3285 2.76147C15.763 1.32694 18.0887 1.3269 19.5233 2.7614Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst NumberListIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <g clipPath=\"url(#clip0_2262_1319)\">\n <path\n d=\"M3.63922 4.93987V7.70654H4.43255V4.0332H3.79922L2.69922 4.7732L3.01255 5.3332L3.63922 4.93987Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.7125 9.87981C3.7812 9.87341 3.85048 9.88111 3.9161 9.90244C3.98172 9.92377 4.04229 9.95827 4.09409 10.0038C4.1459 10.0494 4.18786 10.1051 4.21739 10.1674C4.24692 10.2298 4.26341 10.2975 4.26583 10.3665C4.26583 10.6198 4.12583 10.8598 3.68583 11.2131L2.3525 12.2598V12.9265H5.1125V12.1865H3.5525L4.21917 11.6731C4.88583 11.2065 5.0725 10.8265 5.0725 10.3398C5.06687 10.1736 5.02729 10.0102 4.95621 9.85982C4.88513 9.70943 4.78404 9.57516 4.65917 9.46526C4.53429 9.35537 4.38826 9.27218 4.23004 9.22079C4.07183 9.16941 3.90478 9.15093 3.73917 9.16647C3.46133 9.16486 3.18708 9.2293 2.93904 9.35449C2.69099 9.47967 2.47624 9.66201 2.3125 9.88647L2.81917 10.3731C2.92096 10.2286 3.05427 10.1091 3.20903 10.0236C3.36379 9.93815 3.53595 9.88898 3.7125 9.87981Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M4.37323 16.4268C4.56247 16.3796 4.73064 16.2707 4.85132 16.1175C4.97199 15.9642 5.03832 15.7752 5.0399 15.5802C5.0399 15.0002 4.5199 14.5735 3.70656 14.5735C3.43755 14.5688 3.17111 14.6266 2.92819 14.7423C2.68527 14.8579 2.47249 15.0284 2.30656 15.2402L2.76656 15.7202C2.87303 15.5923 3.00521 15.4882 3.15452 15.4147C3.30383 15.3412 3.46693 15.2999 3.63323 15.2935C3.99323 15.2935 4.24656 15.4668 4.24656 15.7335C4.24656 16.0002 4.00656 16.1468 3.5799 16.1468H3.19323V16.8135H3.6199C4.11323 16.8135 4.33323 16.9535 4.33323 17.2335C4.33323 17.5135 4.0999 17.6868 3.66656 17.6868C3.48325 17.6854 3.3022 17.6462 3.13473 17.5716C2.96726 17.4971 2.81696 17.3888 2.69323 17.2535L2.22656 17.7735C2.41236 17.9777 2.64041 18.1389 2.89486 18.246C3.1493 18.3531 3.42402 18.4034 3.6999 18.3935C4.5599 18.3935 5.1199 17.9335 5.1199 17.3002C5.11937 17.0897 5.04396 16.8862 4.90717 16.7262C4.77037 16.5662 4.5811 16.4601 4.37323 16.4268Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M21.6127 5.99967C21.6127 5.82286 21.5424 5.65329 21.4174 5.52827C21.2924 5.40325 21.1228 5.33301 20.946 5.33301H6.66602V6.66634H20.946C21.1228 6.66634 21.2924 6.5961 21.4174 6.47108C21.5424 6.34605 21.6127 6.17649 21.6127 5.99967Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M20.946 10.667H6.66602V12.0003H20.946C21.1228 12.0003 21.2924 11.9301 21.4174 11.8051C21.5424 11.68 21.6127 11.5105 21.6127 11.3337C21.6127 11.1568 21.5424 10.9873 21.4174 10.8623C21.2924 10.7372 21.1228 10.667 20.946 10.667Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M20.946 16H6.66602V17.3333H20.946C21.1228 17.3333 21.2924 17.2631 21.4174 17.1381C21.5424 17.013 21.6127 16.8435 21.6127 16.6667C21.6127 16.4899 21.5424 16.3203 21.4174 16.1953C21.2924 16.0702 21.1228 16 20.946 16Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_2262_1319\">\n <rect width=\"24\" height=\"24\" fill=\"currentColor\" />\n </clipPath>\n </defs>\n </svg>\n);\nconst BulletListIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M3.49941 15.5004C4.32752 15.5004 4.99883 16.1717 4.99883 16.9998C4.99883 17.8279 4.32752 18.4992 3.49941 18.4992C2.67131 18.4992 2 17.8279 2 16.9998C2 16.1717 2.67131 15.5004 3.49941 15.5004ZM7.50034 15.9998H21.0035C21.5558 15.9998 22.0035 16.4475 22.0035 16.9998C22.0035 17.5126 21.6174 17.9353 21.1201 17.993L21.0035 17.9998H7.50034C6.94805 17.9998 6.50034 17.5521 6.50034 16.9998C6.50034 16.4869 6.88638 16.0643 7.38371 16.0065L7.50034 15.9998ZM3.49941 10.5004C4.32752 10.5004 4.99883 11.1717 4.99883 11.9998C4.99883 12.8279 4.32752 13.4992 3.49941 13.4992C2.67131 13.4992 2 12.8279 2 11.9998C2 11.1717 2.67131 10.5004 3.49941 10.5004ZM7.50034 10.9998H21.0035C21.5558 10.9998 22.0035 11.4475 22.0035 11.9998C22.0035 12.5126 21.6174 12.9353 21.1201 12.9931L21.0035 12.9998H7.50034C6.94805 12.9998 6.50034 12.5521 6.50034 11.9998C6.50034 11.487 6.88638 11.0643 7.38371 11.0065L7.50034 10.9998ZM3.49941 5.50684C4.32752 5.50684 4.99883 6.17815 4.99883 7.00625C4.99883 7.83435 4.32752 8.50567 3.49941 8.50567C2.67131 8.50567 2 7.83435 2 7.00625C2 6.17815 2.67131 5.50684 3.49941 5.50684ZM7.50034 5.99985H21.0035C21.5558 5.99985 22.0035 6.44756 22.0035 6.99985C22.0035 7.51268 21.6174 7.93535 21.1201 7.99312L21.0035 7.99985H7.50034C6.94805 7.99985 6.50034 7.55213 6.50034 6.99985C6.50034 6.48701 6.88638 6.06434 7.38371 6.00657L7.50034 5.99985Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst CheckBoxIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M19 3H5C3.89543 3 3 3.89543 3 5V19C3 20.1046 3.89543 21 5 21H19C20.1046 21 21 20.1046 21 19V5C21 3.89543 20.1046 3 19 3Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 13L10 16L17 9\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\nconst SearchTextIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M21.72 20.47L17.35 16.1C18.5 14.71 19.19 12.94 19.19 11C19.19 6.58 15.61 3 11.19 3C6.77 3 3.19 6.58 3.19 11C3.19 15.41 6.77 19 11.19 19C13.13 19 14.91 18.31 16.29 17.16L20.66 21.53C20.81 21.68 21 21.75 21.19 21.75C21.38 21.75 21.57 21.68 21.72 21.53C22.01 21.24 22.01 20.76 21.72 20.47ZM12 13.25H8C7.59 13.25 7.25 12.91 7.25 12.5C7.25 12.09 7.59 11.75 8 11.75H12C12.41 11.75 12.75 12.09 12.75 12.5C12.75 12.91 12.41 13.25 12 13.25ZM14 10.25H8C7.59 10.25 7.25 9.91 7.25 9.5C7.25 9.09 7.59 8.75 8 8.75H14C14.41 8.75 14.75 9.09 14.75 9.5C14.75 9.91 14.41 10.25 14 10.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst SearchTextIcon2 = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <g clipPath=\"url(#clip0_2631_2618)\">\n <mask\n id=\"mask0_2631_2618\"\n style={{\n maskType: \"luminance\",\n }}\n maskUnits=\"userSpaceOnUse\"\n x={0}\n y={0}\n width={24}\n height={24}\n >\n <path d=\"M24 0H0V24H24V0Z\" fill=\"white\" />\n </mask>\n <g mask=\"url(#mask0_2631_2618)\">\n <path\n d=\"M16.0748 19.2576L19.7198 22.9011C20.013 23.1943 20.4878 23.1943 20.7803 22.9011L22.902 20.7801C23.1945 20.4876 23.1945 20.0129 22.902 19.7196L17.5005 14.3189C17.5005 14.3189 18.75 11.7418 18.75 9.74985C18.75 4.77957 14.7203 0.749817 9.75001 0.749817C4.77975 0.749817 0.75 4.77957 0.75 9.74985C0.75 14.7201 4.77975 18.7498 9.75001 18.7498C12.2303 18.7498 14.475 17.7471 16.1025 16.1248M5.2503 8.25008H14.2503M5.2503 11.2501H9.00031\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_2631_2618\">\n <rect width={24} height={24} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\nconst PenLineIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M17.0371 12.0019L8 21H3V16L11.998 6.963C12.115 6.845 12.3051 6.845 12.4231 6.963L17.0381 11.578C17.1551 11.695 17.1551 11.8849 17.0371 12.0019ZM18.1079 10.5279C18.2249 10.6449 18.415 10.6449 18.532 10.5279L20.4099 8.65001C21.1939 7.86601 21.1939 6.59405 20.4099 5.81005L18.1899 3.58995C17.4059 2.80595 16.1341 2.80595 15.3501 3.58995L13.4719 5.468C13.3549 5.58501 13.3549 5.77496 13.4719 5.89196L18.1079 10.5279ZM21 20.25H14C13.586 20.25 13.25 20.586 13.25 21C13.25 21.414 13.586 21.75 14 21.75H21C21.414 21.75 21.75 21.414 21.75 21C21.75 20.586 21.414 20.25 21 20.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst MenuAltIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M9 6C9 5.448 9.448 5 10 5H21C21.552 5 22 5.448 22 6C22 6.552 21.552 7 21 7H10C9.448 7 9 6.552 9 6ZM21 11H3C2.448 11 2 11.448 2 12C2 12.552 2.448 13 3 13H21C21.552 13 22 12.552 22 12C22 11.448 21.552 11 21 11ZM14 17H3C2.448 17 2 17.448 2 18C2 18.552 2.448 19 3 19H14C14.552 19 15 18.552 15 18C15 17.448 14.552 17 14 17Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst FaceSmileIcon2 = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM15 8.25C15.72 8.25 16.25 8.99 16.25 10C16.25 11.01 15.72 11.75 15 11.75C14.28 11.75 13.75 11.01 13.75 10C13.75 8.99 14.28 8.25 15 8.25ZM9 8.25C9.72 8.25 10.25 8.99 10.25 10C10.25 11.01 9.72 11.75 9 11.75C8.28 11.75 7.75 11.01 7.75 10C7.75 8.99 8.28 8.25 9 8.25ZM16.6 15.45C15.49 16.91 13.82 17.75 12 17.75C10.18 17.75 8.49 16.89 7.41 15.45C7.16 15.12 7.23 14.65 7.56 14.4C7.89 14.15 8.36 14.22 8.61 14.55C9.41 15.61 10.68 16.25 12 16.25C13.32 16.25 14.58 15.63 15.4 14.55C15.65 14.22 16.12 14.16 16.45 14.41C16.78 14.66 16.84 15.13 16.59 15.46L16.6 15.45Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst TranslateIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M15.075 18.95L14.225 21.375C14.1583 21.5583 14.0417 21.7083 13.875 21.825C13.7083 21.9417 13.525 22 13.325 22C12.9917 22 12.721 21.8623 12.513 21.587C12.305 21.3117 12.2673 21.0077 12.4 20.675L16.2 10.625C16.2833 10.4417 16.4083 10.2917 16.575 10.175C16.7417 10.0583 16.925 10 17.125 10H17.875C18.075 10 18.2583 10.0583 18.425 10.175C18.5917 10.2917 18.7167 10.4417 18.8 10.625L22.6 20.7C22.7333 21.0167 22.7 21.3127 22.5 21.588C22.3 21.8633 22.0333 22.0007 21.7 22C21.4833 22 21.296 21.9417 21.138 21.825C20.98 21.7083 20.859 21.55 20.775 21.35L19.925 18.95H15.075ZM9.05 13.975L4.7 18.3C4.51667 18.4833 4.28767 18.5793 4.013 18.588C3.73834 18.5967 3.50067 18.5007 3.3 18.3C3.11667 18.1167 3.025 17.8833 3.025 17.6C3.025 17.3167 3.11667 17.0833 3.3 16.9L7.65 12.55C7.06667 11.9667 6.53734 11.3 6.062 10.55C5.58667 9.8 5.14934 8.95 4.75 8H6.85C7.18334 8.65 7.51667 9.21667 7.85 9.7C8.18334 10.1833 8.58334 10.6667 9.05 11.15C9.6 10.6 10.171 9.829 10.763 8.837C11.355 7.845 11.8007 6.89934 12.1 6H2C1.71667 6 1.47934 5.904 1.288 5.712C1.09667 5.52 1.00067 5.28267 1 5C0.999337 4.71734 1.09534 4.48 1.288 4.288C1.48067 4.096 1.718 4 2 4H8V3C8 2.71667 8.096 2.47934 8.288 2.288C8.48 2.09667 8.71734 2.00067 9 2C9.28267 1.99934 9.52034 2.09534 9.713 2.288C9.90567 2.48067 10.0013 2.718 10 3V4H16C16.2833 4 16.521 4.096 16.713 4.288C16.905 4.48 17.0007 4.71734 17 5C16.9993 5.28267 16.9033 5.52034 16.712 5.713C16.5207 5.90567 16.2833 6.00134 16 6H14.1C13.75 7.2 13.225 8.43334 12.525 9.7C11.825 10.9667 11.1333 11.9333 10.45 12.6L12.85 15.05L12.1 17.1L9.05 13.975ZM15.7 17.2H19.3L17.5 12.1L15.7 17.2Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst SparkleIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M21.137 11.519L18.41 10.74C15.902 10.023 13.976 8.09802 13.259 5.58902L12.48 2.86203C12.357 2.43303 11.641 2.43303 11.518 2.86203L10.739 5.58902C10.022 8.09802 8.09601 10.024 5.58801 10.74L2.86099 11.519C2.64599 11.58 2.49799 11.777 2.49799 12C2.49799 12.223 2.64599 12.419 2.86099 12.481L5.58801 13.26C8.09601 13.977 10.022 15.902 10.739 18.411L11.518 21.138C11.58 21.353 11.776 21.501 11.999 21.501C12.222 21.501 12.418 21.353 12.48 21.138L13.259 18.411C13.976 15.902 15.902 13.976 18.41 13.26L21.137 12.481C21.352 12.42 21.5 12.223 21.5 12C21.5 11.777 21.352 11.581 21.137 11.519Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst ImageIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M18 3.25H6C3.582 3.25 2.25 4.582 2.25 7V17C2.25 19.418 3.582 20.75 6 20.75H18C20.418 20.75 21.75 19.418 21.75 17V7C21.75 4.582 20.418 3.25 18 3.25ZM6 4.75H18C19.577 4.75 20.25 5.423 20.25 7V14.25L15.71 9.70996C15.32 9.31996 14.68 9.31996 14.29 9.70996L9.34998 14.6499C9.15998 14.8399 8.84002 14.8399 8.65002 14.6499L7.70996 13.71C7.31996 13.32 6.68004 13.32 6.29004 13.71L3.75 16.25V7C3.75 5.423 4.423 4.75 6 4.75ZM6.75 9C6.75 8.31 7.30404 7.75 7.99304 7.75H8.00305C8.69205 7.75 9.25098 8.31 9.25098 9C9.25098 9.69 8.69305 10.25 8.00305 10.25C7.31405 10.25 6.75 9.69 6.75 9Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst SendIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n >\n <path\n d=\"M5.22219 11.46C10.0522 9.34001 13.2722 7.95 14.8922 7.27C19.4922 5.34 20.4522 5.01 21.0722 5C21.2122 5 21.5122 5.03 21.7122 5.19C21.8822 5.33 21.9222 5.51 21.9522 5.64C21.9722 5.77 22.0022 6.07 21.9822 6.3C21.7322 8.94 20.6522 15.33 20.1022 18.28C19.8722 19.53 19.4122 19.95 18.9722 19.99C18.0122 20.08 17.2822 19.35 16.3422 18.74C14.8822 17.78 14.0622 17.18 12.6422 16.24C11.0022 15.16 12.0622 14.56 13.0022 13.59C13.2422 13.34 17.4922 9.46001 17.5722 9.10001C17.5822 9.06001 17.5922 8.89 17.4922 8.81C17.3922 8.72 17.2522 8.75 17.1522 8.78C17.0022 8.81 14.6722 10.36 10.1622 13.43C9.50219 13.89 8.9022 14.11 8.3622 14.1C7.7722 14.09 6.63219 13.76 5.78219 13.49C4.74219 13.15 3.92221 12.97 3.99221 12.39C4.03221 12.09 4.44219 11.78 5.22219 11.47V11.46Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst MicrophoneIcon = () => (\n<svg version=\"1.2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" width=\"512\" height=\"512\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"m256 30c45 0 81.5 36.5 81.5 81.5v154.8c0 45-36.5 81.5-81.5 81.5-45 0-81.5-36.5-81.5-81.5v-154.8c0-45 36.5-81.5 81.5-81.5z\"/><path fill=\"currentColor\" d=\"m271.4 482.3v-62.1c81.8-7.8 146.1-77 146.1-160.9v-81.3c0-4.1-1.7-8-4.5-10.9-2.9-2.9-6.8-4.5-10.9-4.5-4.1 0-8 1.6-10.9 4.5-2.9 2.9-4.5 6.8-4.5 10.9v81.3c0 72.2-58.6 130.9-130.7 130.9-72.1 0-130.7-58.7-130.7-130.9v-81.3c0-4.1-1.6-8-4.5-10.9-2.9-2.9-6.8-4.5-10.9-4.5-4.1 0-8 1.6-10.9 4.5-2.8 2.9-4.5 6.8-4.5 10.9v81.3c0 83.9 64.3 153.1 146.1 160.9v62\"/></svg>\n);\n\nconst RecordingIcon = () => (\n<svg\n width=\"800px\"\n height=\"800px\"\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 1a5 5 0 0 0-5 5 5 5 0 0 0 5 5 5 5 0 0 0 5-5 5 5 0 0 0-5-5z\"\n fill=\"#da1636\"\n ></path>\n</svg>\n);\n;\nexport {\n AddImageIcon,\n BoldIcon,\n BulletListIcon,\n CheckBoxIcon,\n ChevronDownIcon,\n CodeIcon,\n FaceSmileIcon,\n FaceSmileIcon2,\n HorizontalRuleIcon,\n ImageIcon,\n ItalicIcon,\n LinkIcon,\n MagicoonIcon,\n MenuAltIcon,\n MessageEditIcon,\n MicrophoneIcon,\n NoteIcon,\n NumberListIcon,\n PenLineIcon,\n PerspectiveIcon,\n PlusIcon,\n RecordingIcon,\n RedoIcon,\n SearchTextIcon,\n SearchTextIcon2,\n SendIcon,\n SignatureIcon,\n SparkleIcon,\n StrikethroughIcon,\n SubscriptIcon,\n SuperscriptIcon,\n TodoIcon,\n TranslateIcon,\n TypeCapitalizeIcon,\n TypeLowercaseIcon,\n TypeUppercaseIcon,\n UnderlineIcon,\n UndoIcon,\n UploadIcon,\n};\n","import { CodeHighlightNode, CodeNode } from \"@lexical/code\";\nimport { LinkNode } from \"@lexical/link\";\nimport { ListItemNode, ListNode } from \"@lexical/list\";\nimport { InitialConfigType } from \"@lexical/react/LexicalComposer\";\nimport { HorizontalRuleNode } from \"@lexical/react/LexicalHorizontalRuleNode\";\nimport { HeadingNode, QuoteNode } from \"@lexical/rich-text\";\nimport { TableCellNode, TableNode, TableRowNode } from \"@lexical/table\";\nimport { LexicalEditor, TextFormatType } from \"lexical\";\nimport { EditorThemeClasses } from \"lexical/LexicalEditor\";\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Subscript,\n Superscript,\n} from \"lucide-react\";\n\nimport { CommentedTextNode } from \"./nodes/CommentedTextNode\";\nimport { CommentNode } from \"./nodes/CommentNode\";\nimport { EmbedNode } from \"./nodes/EmbedNode\";\nimport { ImageNode } from \"./nodes/ImageNode\";\nimport { MentionNode } from \"./nodes/MentionNode\";\nimport { NotePanelNode } from \"./nodes/NotePanelNode\";\nimport { CustomHorizontalRuleNode } from \"./plugins/CustomHorizontalRulePlugin\";\nimport PlaygroundEditorTheme from \"./styles/PlaygroundEditorTheme\";\nimport { AlignMenuItem, FormatTextMenuItem } from \"./types\";\nimport {\n BoldIcon,\n CodeIcon,\n ItalicIcon,\n StrikethroughIcon,\n UnderlineIcon,\n} from \"./ui/Icons\";\n\nexport const theme: EditorThemeClasses = {\n blockCursor: \"blockCursor\",\n characterLimit: \"characterLimit\",\n code: \"code\",\n codeHighlight: {\n atrule: \"tokenAttr\",\n attr: \"tokenAttr\",\n boolean: \"tokenProperty\",\n builtin: \"tokenSelector\",\n cdata: \"tokenComment\",\n char: \"tokenSelector\",\n class: \"tokenFunction\",\n \"class-name\": \"tokenFunction\",\n comment: \"tokenComment\",\n constant: \"tokenProperty\",\n deleted: \"tokenProperty\",\n doctype: \"tokenComment\",\n entity: \"tokenOperator\",\n function: \"tokenFunction\",\n important: \"tokenVariable\",\n inserted: \"tokenSelector\",\n keyword: \"tokenAttr\",\n namespace: \"tokenVariable\",\n number: \"tokenProperty\",\n operator: \"tokenOperator\",\n prolog: \"tokenComment\",\n property: \"tokenProperty\",\n punctuation: \"tokenPunctuation\",\n regex: \"tokenVariable\",\n selector: \"tokenSelector\",\n string: \"tokenSelector\",\n symbol: \"tokenProperty\",\n tag: \"tokenProperty\",\n url: \"tokenOperator\",\n variable: \"tokenVariable\",\n },\n embedBlock: {\n base: \"embedBlock\",\n focus: \"embedBlockFocus\",\n },\n hashtag: \"hashtag\",\n heading: {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n },\n image: \"editor-image\",\n indent: \"indent\",\n link: \"link\",\n notePanel: \"note-panel\",\n comment: \"comment-node\",\n list: {\n listitem: \"listItem\",\n listitemChecked: \"listItemChecked\",\n listitemUnchecked: \"listItemUnchecked\",\n nested: {\n listitem: \"nestedListItem\",\n },\n olDepth: [\"ol1\", \"ol2\", \"ol3\", \"ol4\", \"ol5\"],\n ul: \"ul\",\n },\n ltr: \"ltr\",\n mark: \"mark\",\n markOverlap: \"markOverlap\",\n paragraph: \"paragraph\",\n quote: \"quote\",\n rtl: \"rtl\",\n table: \"table\",\n tableAddColumns: \"tableAddColumns\",\n tableAddRows: \"tableAddRows\",\n tableCell: \"tableCell\",\n tableCellActionButton: \"tableCellActionButton\",\n tableCellActionButtonContainer: \"tableCellActionButtonContainer\",\n tableCellEditing: \"tableCellEditing\",\n tableCellHeader: \"tableCellHeader\",\n tableCellPrimarySelected: \"tableCellPrimarySelected\",\n tableCellResizer: \"tableCellResizer\",\n tableCellSelected: \"tableCellSelected\",\n tableCellSortedIndicator: \"tableCellSortedIndicator\",\n tableResizeRuler: \"tableCellResizeRuler\",\n tableSelected: \"tableSelected\",\n text: {\n bold: \"textBold\",\n code: \"textCode\",\n italic: \"textItalic\",\n strikethrough: \"textStrikethrough\",\n subscript: \"textSubscript\",\n superscript: \"textSuperscript\",\n underline: \"textUnderline\",\n underlineStrikethrough: \"textUnderlineStrikethrough\",\n },\n};\n\nexport const EDITOR_NODES = [\n CodeNode,\n CodeHighlightNode,\n HeadingNode,\n // AutoLinkNode,\n LinkNode,\n QuoteNode,\n ListNode,\n ListItemNode,\n HorizontalRuleNode,\n CustomHorizontalRuleNode,\n TableNode,\n TableCellNode,\n TableRowNode,\n ImageNode,\n EmbedNode,\n MentionNode,\n NotePanelNode,\n CommentNode,\n CommentedTextNode,\n];\n\n/**\n * Catch any errors that occur during Lexical updates and log them\n * or throw them as needed. If you don't throw them, Lexical will\n * try to recover gracefully without losing user data.\n */\nconst onError = (error: Error, editor: LexicalEditor): void => {\n console.error(error);\n};\n\nexport const initialConfig: InitialConfigType = {\n namespace: \"MyEditor\",\n theme: PlaygroundEditorTheme,\n nodes: EDITOR_NODES,\n onError,\n // editable: false,\n};\n\nexport const blockTypeToBlockName = {\n bullet: \"Bulleted List\",\n check: \"Check List\",\n code: \"Code Block\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n number: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n};\n\nexport const initialHasFormat: Record<TextFormatType, boolean> = {\n bold: false,\n italic: false,\n underline: false,\n strikethrough: false,\n subscript: false,\n superscript: false,\n code: false,\n highlight: false,\n lowercase: false,\n uppercase: false,\n capitalize: false,\n};\n\nexport const alignMenuItems: AlignMenuItem[] = [\n {\n name: \"Left Align\",\n icon: <AlignLeft />,\n payload: \"left\",\n },\n {\n name: \"Center Align\",\n icon: <AlignCenter />,\n payload: \"center\",\n },\n {\n name: \"Right Align\",\n icon: <AlignRight />,\n payload: \"right\",\n },\n {\n name: \"Justify Align\",\n icon: <AlignJustify />,\n payload: \"justify\",\n },\n];\n\nexport const formatMenuItems: FormatTextMenuItem[] = [\n {\n name: \"Bold\",\n icon: <BoldIcon />,\n payload: \"bold\",\n },\n {\n name: \"Italic\",\n icon: <ItalicIcon />,\n payload: \"italic\",\n },\n {\n name: \"Strikethrough\",\n icon: <StrikethroughIcon />,\n payload: \"strikethrough\",\n },\n {\n name: \"Underline\",\n icon: <UnderlineIcon />,\n payload: \"underline\",\n },\n {\n name: \"Code\",\n icon: <CodeIcon />,\n payload: \"code\",\n },\n {\n name: \"Subscript\",\n icon: <Subscript className=\"size-4 mx-1\" />,\n payload: \"subscript\",\n },\n {\n name: \"Superscript\",\n icon: <Superscript className=\"size-4 mx-1\" />,\n payload: \"superscript\",\n },\n];\n\nexport const LOWEST_PRIORITY = 1;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { ElementFormatType } from \"lexical\";\nimport React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nexport const MIN_ALLOWED_FONT_SIZE = 8;\nexport const MAX_ALLOWED_FONT_SIZE = 72;\nexport const DEFAULT_FONT_SIZE = 15;\n\nconst rootTypeToRootName = {\n root: \"Root\",\n table: \"Table\",\n};\n\nexport const blockTypeToBlockName = {\n bullet: \"Bulleted List\",\n check: \"Check List\",\n code: \"Code Block\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n number: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n};\n\nconst INITIAL_TOOLBAR_STATE = {\n bgColor: \"#fff\",\n blockType: \"paragraph\" as keyof typeof blockTypeToBlockName,\n canRedo: false,\n canUndo: false,\n codeLanguage: \"\",\n elementFormat: \"left\" as ElementFormatType,\n fontColor: \"#000\",\n fontFamily: \"Arial\",\n // Current font size in px\n fontSize: `${DEFAULT_FONT_SIZE}px`,\n // Font size input value - for controlled input\n fontSizeInputValue: `${DEFAULT_FONT_SIZE}`,\n isBold: false,\n isCode: false,\n isHighlight: false,\n isImageCaption: false,\n isItalic: false,\n isLink: false,\n isRTL: false,\n isStrikethrough: false,\n isSubscript: false,\n isSuperscript: false,\n isUnderline: false,\n rootType: \"root\" as keyof typeof rootTypeToRootName,\n isAutocompleteEnabled: true,\n};\n\ntype ToolbarState = typeof INITIAL_TOOLBAR_STATE;\n\n// Utility type to get keys and infer value types\ntype ToolbarStateKey = keyof ToolbarState;\ntype ToolbarStateValue<Key extends ToolbarStateKey> = ToolbarState[Key];\n\ntype ContextShape = {\n toolbarState: ToolbarState;\n updateToolbarState<Key extends ToolbarStateKey>(\n key: Key,\n value: ToolbarStateValue<Key>\n ): void;\n};\n\nconst Context = createContext<ContextShape | undefined>(undefined);\n\nexport const ToolbarContext = ({\n children,\n}: {\n children: ReactNode;\n}): JSX.Element => {\n const [toolbarState, setToolbarState] = useState(INITIAL_TOOLBAR_STATE);\n const selectionFontSize = toolbarState.fontSize;\n\n const updateToolbarState = useCallback(\n <Key extends ToolbarStateKey>(key: Key, value: ToolbarStateValue<Key>) => {\n setToolbarState((prev) => ({\n ...prev,\n [key]: value,\n }));\n },\n []\n );\n\n useEffect(() => {\n updateToolbarState(\"fontSizeInputValue\", selectionFontSize.slice(0, -2));\n }, [selectionFontSize, updateToolbarState]);\n\n const contextValue = useMemo(() => {\n return {\n toolbarState,\n updateToolbarState,\n };\n }, [toolbarState, updateToolbarState]);\n\n return <Context.Provider value={contextValue}>{children}</Context.Provider>;\n};\n\nexport const useToolbarState = () => {\n const context = useContext(Context);\n\n if (context === undefined) {\n throw new Error(\"useToolbarState must be used within a ToolbarProvider\");\n }\n\n return context;\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $createParagraphNode,\n $getRoot,\n COMMAND_PRIORITY_LOW,\n createCommand,\n LexicalCommand,\n} from \"lexical\";\n\nimport { UseCustomCommandsReturn } from \"../types\";\n\nconst useCustomCommands = (): UseCustomCommandsReturn => {\n const CLEAR_EDITOR_COMMAND: LexicalCommand<void> = createCommand();\n const [editor] = useLexicalComposerContext();\n\n editor.registerCommand(\n CLEAR_EDITOR_COMMAND,\n () => {\n editor.update(() => {\n const root = $getRoot();\n const paragraph = $createParagraphNode();\n root.clear();\n root.append(paragraph);\n paragraph.select();\n });\n return true;\n /**\n * We clear all content and return true to mark this event as handled. Thus, no other succeeding command handler is called.\n */\n },\n COMMAND_PRIORITY_LOW\n );\n\n const clearEditorContent = () =>\n editor.dispatchCommand(CLEAR_EDITOR_COMMAND, undefined);\n\n return {\n clearEditorContent,\n };\n};\n\nexport default useCustomCommands;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { $isAtNodeEnd } from \"@lexical/selection\";\nimport { ElementNode, RangeSelection, TextNode } from \"lexical\";\n\nconst getSelectedNode = (selection: RangeSelection): TextNode | ElementNode => {\n const anchor = selection.anchor;\n const focus = selection.focus;\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n if (anchorNode === focusNode) {\n return anchorNode;\n }\n const isBackward = selection.isBackward();\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n } else {\n return $isAtNodeEnd(anchor) ? anchorNode : focusNode;\n }\n};\n\nexport default getSelectedNode;\n","import { $isCodeNode, CODE_LANGUAGE_MAP } from \"@lexical/code\";\nimport { $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport { $isListNode, ListNode } from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $isDecoratorBlockNode } from \"@lexical/react/LexicalDecoratorBlockNode\";\nimport { $isHeadingNode } from \"@lexical/rich-text\";\nimport { $selectAll } from \"@lexical/selection\";\nimport {\n $findMatchingParent,\n $getNearestBlockElementAncestorOrThrow,\n $getNearestNodeOfType,\n mergeRegister,\n} from \"@lexical/utils\";\nimport {\n $getRoot,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot,\n $isTextNode,\n NodeKey,\n TextFormatType,\n} from \"lexical\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { blockTypeToBlockName, initialHasFormat } from \"src/constants\";\nimport { INSERT_CUSTOM_HORIZONTAL_RULE_COMMAND } from \"src/plugins/CustomHorizontalRulePlugin\";\n\nimport getSelectedNode from \"../utils/getSelectedNode\";\n\nconst useEditorToolbar = () => {\n const [editor] = useLexicalComposerContext();\n\n const [hasFormat, setHasFormat] =\n useState<Record<TextFormatType, boolean>>(initialHasFormat);\n const [isEditorEmpty, setIsEditorEmpty] = useState(false);\n const [blockType, setBlockType] =\n useState<keyof typeof blockTypeToBlockName>(\"paragraph\");\n const [selectedElementKey, setSelectedElementKey] = useState<NodeKey | null>(\n null\n );\n const [codeLanguage, setCodeLanguage] = useState<string>(\"\");\n const [isLink, setIsLink] = useState(false);\n\n // This function runs every time the editor state changes.\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n let element =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, (e) => {\n const parent = e.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n if (element === null) {\n element = anchorNode.getTopLevelElementOrThrow();\n }\n const elementKey = element.getKey();\n const elementDOM = editor.getElementByKey(elementKey);\n\n // Update text format\n setHasFormat({\n bold: selection.hasFormat(\"bold\"),\n italic: selection.hasFormat(\"italic\"),\n underline: selection.hasFormat(\"underline\"),\n strikethrough: selection.hasFormat(\"strikethrough\"),\n subscript: selection.hasFormat(\"subscript\"),\n superscript: selection.hasFormat(\"superscript\"),\n code: selection.hasFormat(\"code\"),\n highlight: selection.hasFormat(\"highlight\"),\n lowercase: selection.hasFormat(\"lowercase\"),\n uppercase: selection.hasFormat(\"uppercase\"),\n capitalize: selection.hasFormat(\"capitalize\"),\n });\n\n // Update links\n const node = getSelectedNode(selection);\n const parent = node.getParent();\n if ($isLinkNode(parent) || $isLinkNode(node)) {\n setIsLink(true);\n } else {\n setIsLink(false);\n }\n\n if (elementDOM !== null) {\n setSelectedElementKey(elementKey);\n if ($isListNode(element)) {\n const parentList = $getNearestNodeOfType<ListNode>(\n anchorNode,\n ListNode\n );\n const type = parentList\n ? parentList.getListType()\n : element.getListType();\n setBlockType(type);\n } else {\n const type = $isHeadingNode(element)\n ? element.getTag()\n : element.getType();\n if (type in blockTypeToBlockName) {\n setBlockType(type as keyof typeof blockTypeToBlockName);\n }\n if ($isCodeNode(element)) {\n const language =\n element.getLanguage() as keyof typeof CODE_LANGUAGE_MAP;\n setCodeLanguage(\n language ? CODE_LANGUAGE_MAP[language] || language : \"\"\n );\n return;\n }\n }\n }\n }\n // Check if editor is empty\n checkIfEditorIsEmpty();\n }, [editor]);\n\n const checkIfEditorIsEmpty = useCallback(() => {\n const root = $getRoot();\n const children = root.getChildren();\n\n // setIsEditorEmpty(Boolean(children.length));\n\n if (children.length > 1) {\n setIsEditorEmpty(false);\n return;\n }\n\n if ($isParagraphNode(children[0])) {\n setIsEditorEmpty(children[0].getChildren().length === 0);\n } else {\n setIsEditorEmpty(false);\n }\n }, [editor]);\n\n const insertLink = useCallback(() => {\n if (!isLink) {\n console.log(\"TOGGLE_LINK_COMMAND\");\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n } else {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }\n }, [editor, isLink]);\n\n const insertHorizontalRule = () => {\n // Use custom horizontal rule with default values\n editor.dispatchCommand(INSERT_CUSTOM_HORIZONTAL_RULE_COMMAND, {\n color: \"#000000\",\n strokeWidth: 2,\n });\n };\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n // The latest EditorState can be found as `editorState`.\n // To read the contents of the EditorState, use the following API:\n editorState.read(() => {\n // Just like editor.update(), .read() expects a closure where you can use\n // the $ prefixed helper functions.\n updateToolbar();\n });\n })\n );\n }, [updateToolbar, editor]);\n\n const clearFormatting = useCallback(() => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $selectAll(selection);\n selection.getNodes().forEach((node) => {\n if ($isTextNode(node)) {\n node.setFormat(0);\n node.setStyle(\"\");\n $getNearestBlockElementAncestorOrThrow(node).setFormat(\"\");\n }\n if ($isDecoratorBlockNode(node)) {\n node.setFormat(\"\");\n }\n });\n }\n });\n }, [editor]);\n\n return {\n hasFormat,\n isEditorEmpty,\n blockType,\n insertLink,\n insertHorizontalRule,\n clearFormatting,\n };\n};\n\nexport default useEditorToolbar;\n","import \"../styles/AIChatPlugin.css\";\n\nimport { $generateNodesFromDOM } from \"@lexical/html\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $getRoot,\n $insertNodes,\n COMMAND_PRIORITY_LOW,\n createCommand,\n LexicalCommand,\n LexicalEditor,\n} from \"lexical\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { SendIcon } from \"src/ui/Icons\";\n\nimport { AiEditorAction } from \"../api/ai\";\n\n// Define the custom command\nexport const TOGGLE_AI_CHAT_COMMAND: LexicalCommand<void> = createCommand();\n\n// AI Chat Icon component\nfunction AIChatIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M21 11.5a8.38 8.38 0 01-.9 3.8 8.5 8.5 0 01-7.6 4.7 8.38 8.38 0 01-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 01-.9-3.8 8.5 8.5 0 014.7-7.6 8.38 8.38 0 013.8-.9h.5a8.48 8.48 0 018 8v.5z\"></path>\n </svg>\n );\n}\n\n// AI Chat Trigger Button\nfunction AIChatTriggerButton({ onClick }: { onClick: () => void }) {\n return (\n <div className=\"ai-chat-trigger\" onClick={onClick}>\n <AIChatIcon />\n </div>\n );\n}\n\nfunction AIChatFloatingToolbar({\n editor,\n anchorElem,\n onClose,\n}: {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n onClose: () => void;\n}): JSX.Element {\n const popupRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [inputValue, setInputValue] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [isVisible, setIsVisible] = useState(false);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!inputValue.trim() || isLoading) return;\n\n setIsLoading(true);\n setErrorMessage(null);\n try {\n const response = await AiEditorAction({ content: inputValue });\n const htmlString = response.data;\n\n // Process the action based on its type\n editor.update(() => {\n // In the browser you can use the native DOMParser API to parse the HTML string.\n const parser = new DOMParser();\n const dom = parser.parseFromString(htmlString, \"text/html\");\n\n // Once you have the DOM instance it's easy to generate LexicalNodes.\n const nodes = $generateNodesFromDOM(editor, dom);\n\n // Select the root\n $getRoot().select();\n\n // Insert them at a selection.\n $insertNodes(nodes);\n\n handleClose();\n });\n } catch (error) {\n console.error(\"Error processing AI action:\", error);\n setErrorMessage(\"Error processing your request. Please try again.\");\n } finally {\n setIsLoading(false);\n setInputValue(\"\");\n }\n };\n\n const handleClose = useCallback(() => {\n setIsVisible(false);\n setTimeout(onClose, 300);\n }, [onClose]);\n\n useEffect(() => {\n const popup = popupRef.current;\n const input = inputRef.current;\n\n if (popup && input) {\n input.focus();\n }\n\n const handleClickOutside = (e: MouseEvent) => {\n if (popupRef.current && !popupRef.current.contains(e.target as Node)) {\n handleClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [handleClose]);\n\n useEffect(() => {\n const timeout = setTimeout(() => setIsVisible(true), 10);\n return () => clearTimeout(timeout);\n }, []);\n\n return (\n <div id=\"ct-editor-f47ac10b\">\n <div\n className={`ai-chat-popup transition-opacity duration-300 ${isVisible ? \"opacity-100 scale-100\" : \"opacity-0 scale-95\"}`}\n >\n <div className=\"ai-chat-content\" ref={popupRef}>\n {errorMessage && <div className=\"ai-chat-error\">{errorMessage}</div>}\n\n <form onSubmit={handleSubmit} className=\"ai-chat-form relative\">\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n placeholder=\"Ask anything to AI \"\n className={`ai-chat-input min-h-14 !pr-12 ${errorMessage ? \" border-red-500\" : \"border-foreground/15 \"}`}\n disabled={isLoading}\n />\n {/* <div className=\"absolute top-1/2 -translate-y-1/2 right-14\">\n <div className=\"absolute top-1/2 -translate-y-1/2 right-full whitespace-nowrap text-xs mr-3 text-red-500\">\n Error processing your request. Please try again.\n </div>\n <button className=\" text-red-500 block\">\n <Info size={20} />\n </button>\n </div> */}\n <button\n type=\"submit\"\n className=\"ai-chat-submit absolute right-4 top-1/2 -translate-y-1/2 hover:text-foreground/75\"\n disabled={isLoading}\n >\n {/* {isLoading ? \"Processing...\" : \"Send\"} */}\n <SendIcon />\n </button>\n </form>\n </div>\n </div>\n </div>\n );\n}\n\nfunction useAIChatToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement\n): JSX.Element | null {\n const [isVisible, setIsVisible] = useState(false);\n\n const toggleAIChat = useCallback(() => {\n setIsVisible((prevState) => !prevState);\n }, []);\n\n useEffect(() => {\n // Register a custom command to toggle the AI chat\n return editor.registerCommand(\n TOGGLE_AI_CHAT_COMMAND,\n () => {\n toggleAIChat();\n return true;\n },\n COMMAND_PRIORITY_LOW\n );\n }, [editor, toggleAIChat]);\n\n return (\n <>\n {/* <AIChatTriggerButton onClick={toggleAIChat} /> */}\n {isVisible\n ? createPortal(\n <AIChatFloatingToolbar\n editor={editor}\n anchorElem={anchorElem}\n onClose={() => setIsVisible(false)}\n />,\n anchorElem\n )\n : null}\n </>\n );\n}\n\nexport default function AIChatPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n return useAIChatToolbar(editor, anchorElem);\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createTableNodeWithDimensions } from \"@lexical/table\";\nimport { $insertNodeToNearestRoot } from \"@lexical/utils\";\nimport React, { useState } from \"react\";\nimport { $createTextNode } from \"lexical\";\nimport { Button } from \"src/components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"src/components/ui/dialog\";\nimport { Input } from \"src/components/ui/input\";\nimport { Label } from \"src/components/ui/label\";\nimport { PerspectiveIcon } from \"src/ui/Icons\";\n\nexport default function TableOptionPlugin() {\n const [isOpen, setIsOpen] = useState(false);\n const [rows, setRows] = useState(\"\");\n const [columns, setColumns] = useState(\"\");\n const [includeHeaders, setIncludeHeaders] = useState(false);\n const [columnHeadings, setColumnHeadings] = useState<string[]>([]);\n const [editor] = useLexicalComposerContext();\n\n const onAddTable = () => {\n const rowCount = Number(rows);\n const colCount = Number(columns);\n if (!rowCount || !colCount) return;\n\n editor.update(() => {\n const tableNode = $createTableNodeWithDimensions(\n rowCount,\n colCount,\n includeHeaders\n );\n\n if (includeHeaders) {\n const rowsNodes = (tableNode as unknown as { getChildren: () => any[] }).getChildren();\n const headerRow = rowsNodes[0];\n if (headerRow) {\n const cells = (headerRow as { getChildren: () => any[] }).getChildren();\n for (let i = 0; i < cells.length; i++) {\n const headingText = (columnHeadings[i] || \"\").trim();\n if (headingText) {\n (cells[i] as { append: (n: unknown) => void }).append($createTextNode(headingText));\n }\n }\n }\n }\n $insertNodeToNearestRoot(tableNode);\n });\n\n setRows(\"\");\n setColumns(\"\");\n setIncludeHeaders(false);\n setColumnHeadings([]);\n setIsOpen(false);\n };\n\n const insertMenuItems = [\n {\n name: \"Table\",\n icon: <PerspectiveIcon />,\n onClick: () => setIsOpen(true),\n },\n ];\n\n return (\n <>\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Add Table</DialogTitle>\n </DialogHeader>\n\n <div className=\"cteditor-grid cteditor-gap-4 cteditor-py-4\">\n <div className=\"cteditor-grid cteditor-gap-2\">\n <Label htmlFor=\"rows\">Rows</Label>\n <Input\n id=\"rows\"\n type=\"number\"\n value={rows}\n onChange={(e) => setRows(e.target.value)}\n autoFocus\n />\n </div>\n\n <div className=\"cteditor-grid cteditor-gap-2\">\n <Label htmlFor=\"columns\">Columns</Label>\n <Input\n id=\"columns\"\n type=\"number\"\n value={columns}\n onChange={(e) => {\n const value = e.target.value;\n setColumns(value);\n const count = Number(value);\n if (!Number.isNaN(count) && includeHeaders) {\n setColumnHeadings((prev) => {\n const next = [...prev];\n next.length = Math.max(0, count);\n for (let i = 0; i < count; i++) {\n if (typeof next[i] !== \"string\") next[i] = \"\";\n }\n return next;\n });\n }\n }}\n />\n </div>\n\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2\">\n <input\n id=\"include-headers\"\n type=\"checkbox\"\n checked={includeHeaders}\n onChange={(e) => {\n const checked = e.target.checked;\n setIncludeHeaders(checked);\n const count = Number(columns);\n if (checked && count > 0) {\n setColumnHeadings((prev) => {\n const next = [...prev];\n next.length = count;\n for (let i = 0; i < count; i++) {\n if (typeof next[i] !== \"string\") next[i] = \"\";\n }\n return next;\n });\n }\n if (!checked) {\n setColumnHeadings([]);\n }\n }}\n />\n <Label htmlFor=\"include-headers\">Add column headers</Label>\n </div>\n\n {includeHeaders && Number(columns) > 0 && (\n <div className=\"cteditor-grid cteditor-gap-2\">\n <Label>Header titles</Label>\n <div className=\"cteditor-grid cteditor-gap-2\" style={{ gridTemplateColumns: \"repeat(2, minmax(0, 1fr))\" }}>\n {Array.from({ length: Number(columns) }).map((_, i) => (\n <div key={i} className=\"cteditor-grid cteditor-gap-1\">\n <Label htmlFor={`col-heading-${i}`}>Column {i + 1}</Label>\n <Input\n id={`col-heading-${i}`}\n type=\"text\"\n value={columnHeadings[i] ?? \"\"}\n onChange={(e) => {\n const value = e.target.value;\n setColumnHeadings((prev) => {\n const next = [...prev];\n next[i] = value;\n return next;\n });\n }}\n />\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setIsOpen(false)}>\n Cancel\n </Button>\n <Button onClick={onAddTable} disabled={!rows || !columns}>\n Add\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Table button - already using your Button component */}\n <Button variant=\"ghost\" onClick={() => setIsOpen(true)} size=\"icon-sm\">\n <span className=\"[&_svg]:!cteditor-size-4\">\n <PerspectiveIcon />\n </span>\n </Button>\n </>\n );\n}\n","import { backendAPI } from \"../config/axios\";\r\nimport { apiEndpoints } from \"../config/endpoints\";\r\n\r\nexport const getAssemblyAIToken = async () => {\r\n try {\r\n const res = await backendAPI.get(apiEndpoints.transcript.voiceTranscript);\r\n console.log(res,'voice response');\r\n return res.data.data;\r\n } catch (error) {\r\n console.error(\"Error in AiEditorAction:\", error);\r\n throw error;\r\n }\r\n };\r\n ","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createTextNode, $getSelection, $isRangeSelection, COMMAND_PRIORITY_LOW, createCommand } from \"lexical\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { getAssemblyAIToken } from \"src/api/transcript\";\nimport { Button } from \"src/components/ui/button\";\nimport { cn } from \"src/lib/utils\";\nimport { MicrophoneIcon, RecordingIcon } from \"src/ui/Icons\";\n\nexport const TOGGLE_VOICE_TRANSCRIPT_COMMAND = createCommand();\nexport const INSERT_TRANSCRIPT_COMMAND = createCommand<{ text: string }>();\n\n// Editor Plugin - Handles transcript insertion into editor\nconst VoiceTranscriptEditorPlugin = () => {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return editor.registerCommand(\n INSERT_TRANSCRIPT_COMMAND,\n ({ text }) => {\n console.log('Received INSERT_TRANSCRIPT_COMMAND:', text);\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const textNode = $createTextNode(text + \" \");\n selection.insertNodes([textNode]);\n console.log('Successfully inserted transcript into editor');\n } else {\n console.log('No valid range selection found');\n }\n });\n return true;\n },\n COMMAND_PRIORITY_LOW\n );\n }, [editor]);\n\n return null;\n};\n\n// Text Cursor Icon Component\nconst TextCursorIcon = ({ isRecording, editor }: { isRecording: boolean; editor: any }) => {\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isVisible, setIsVisible] = useState(false);\n const updateTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!isRecording || !editor) {\n setIsVisible(false);\n return;\n }\n\n const updateCursorPosition = () => {\n try {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n \n // Check if the cursor is actually visible and within the editor\n if (rect.width > 0 || rect.height > 0) {\n // Get the editor element to check if cursor is within it\n const editorElement = editor.getRootElement();\n if (editorElement) {\n const editorRect = editorElement.getBoundingClientRect();\n \n // Only show icon if cursor is within the editor bounds\n if (rect.left >= editorRect.left && \n rect.right <= editorRect.right && \n rect.top >= editorRect.top && \n rect.bottom <= editorRect.bottom) {\n setPosition({ \n x: rect.right, \n y: rect.top \n });\n setIsVisible(true);\n return;\n }\n }\n }\n }\n setIsVisible(false);\n } catch (error) {\n console.warn('Error updating cursor position:', error);\n setIsVisible(false);\n }\n };\n\n // Debounced update function\n const debouncedUpdate = () => {\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n updateTimeoutRef.current = window.setTimeout(updateCursorPosition, 10);\n };\n\n // Update position on selection change\n const handleSelectionChange = () => {\n debouncedUpdate();\n };\n\n // Update position on key events\n const handleKeyDown = () => {\n debouncedUpdate();\n };\n\n // Update position on mouse events\n const handleMouseUp = () => {\n debouncedUpdate();\n };\n\n // Update position on focus events\n const handleFocus = () => {\n debouncedUpdate();\n };\n\n // Initial position update\n updateCursorPosition();\n\n document.addEventListener('selectionchange', handleSelectionChange);\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('mouseup', handleMouseUp);\n document.addEventListener('focus', handleFocus, true);\n\n return () => {\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n document.removeEventListener('selectionchange', handleSelectionChange);\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('focus', handleFocus, true);\n };\n }, [isRecording, editor]);\n\n if (!isRecording || !isVisible) return null;\n\n return (\n <div\n style={{\n position: 'fixed',\n left: position.x + 5,\n top: position.y - 2,\n zIndex: 9999,\n pointerEvents: 'none',\n fontSize: '14px',\n color: '#ef4444',\n animation: 'cursor-mic-bounce 1s infinite',\n filter: 'drop-shadow(0 1px 2px rgba(0,0,0,0.3))',\n userSelect: 'none',\n }}\n >\n 🎤\n </div>\n );\n};\n\n// Recording State Hook\nexport const useVoiceRecording = () => {\n const [isRecording, setIsRecording] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isConnected, setIsConnected] = useState(false);\n\n const streamRef = useRef<MediaStream | null>(null);\n const wsRef = useRef<WebSocket | null>(null);\n const audioContextRef = useRef<AudioContext | null>(null);\n const processorRef = useRef<AudioWorkletNode | ScriptProcessorNode | null>(null);\n const currentTurnRef = useRef<number>(-1);\n const completeTranscriptRef = useRef<string>(\"\");\n const editorRef = useRef<any>(null);\n\n const setEditor = useCallback((editor: any) => {\n editorRef.current = editor;\n }, []);\n\n // Add cursor styling when recording\n const updateCursorStyle = useCallback((recording: boolean) => {\n if (editorRef.current) {\n const rootElement = editorRef.current.getRootElement();\n if (rootElement) {\n if (recording) {\n rootElement.classList.add('recording-cursor');\n } else {\n rootElement.classList.remove('recording-cursor');\n }\n }\n }\n }, []);\n\n const startRecording = useCallback(async () => {\n try {\n setError(null);\n setIsLoading(true);\n \n // Focus the editor to ensure cursor is visible\n if (editorRef.current) {\n editorRef.current.focus();\n }\n \n // Fetch the token from your backend\n const data = await getAssemblyAIToken();\n console.log(data,'data',data.token);\n if (!data.token) {\n throw new Error(data.error || \"Failed to get token\");\n }\n \n const stream = await navigator.mediaDevices.getUserMedia({\n audio: {\n sampleRate: { ideal: 16000 },\n channelCount: 1,\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n },\n });\n \n streamRef.current = stream;\n const wsUrl = `wss://streaming.assemblyai.com/v3/ws?token=${data.token}`;\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n \n ws.onopen = () => {\n setIsConnected(true);\n setIsLoading(false);\n };\n \n ws.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data);\n if (message.type === \"Turn\") {\n if (message.transcript !== undefined) {\n if (message.turn_order !== currentTurnRef.current) {\n currentTurnRef.current = message.turn_order;\n }\n if (message.end_of_turn) {\n if (message.transcript !== undefined) {\n console.log('message.transcript',message.transcript);\n const finalText = completeTranscriptRef.current + message.transcript + \" \";\n completeTranscriptRef.current = finalText;\n // Insert transcript into the editor using command\n console.log('Dispatching INSERT_TRANSCRIPT_COMMAND:', message.transcript);\n if (editorRef.current) {\n editorRef.current.dispatchCommand(INSERT_TRANSCRIPT_COMMAND, { text: message.transcript });\n }\n }\n }\n }\n } else if (message.type === \"error\") {\n setError(\"Transcription error: \" + (message.message || \"\"));\n }\n } catch (err) {\n // ignore parse errors\n }\n };\n \n ws.onerror = () => {\n setError(\"WebSocket connection error\");\n setIsConnected(false);\n };\n \n ws.onclose = (event) => {\n setIsConnected(false);\n if (event.code !== 1000) {\n setError(\"Connection closed unexpectedly\");\n }\n };\n \n const audioContext = new AudioContext({ sampleRate: 16000 });\n audioContextRef.current = audioContext;\n const source = audioContext.createMediaStreamSource(stream);\n \n if (audioContext.audioWorklet) {\n try {\n await audioContext.audioWorklet.addModule(\"/pcm-processor.js\");\n const pcmWorklet = new window.AudioWorkletNode(\n audioContext,\n \"pcm-processor\"\n );\n processorRef.current = pcmWorklet;\n pcmWorklet.port.onmessage = (event) => {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(event.data);\n }\n };\n source.connect(pcmWorklet);\n } catch {\n fallbackScriptProcessor(audioContext, source, ws);\n }\n } else {\n fallbackScriptProcessor(audioContext, source, ws);\n }\n \n setIsRecording(true);\n updateCursorStyle(true);\n } catch (err: any) {\n setError(\n \"Error starting recording: \" +\n (err && err.message ? err.message : \"Unknown error\")\n );\n setIsLoading(false);\n setIsRecording(false);\n updateCursorStyle(false);\n }\n }, [updateCursorStyle]);\n\n const fallbackScriptProcessor = (\n audioContext: AudioContext,\n source: MediaStreamAudioSourceNode,\n ws: WebSocket\n ) => {\n const processor = audioContext.createScriptProcessor(1024, 1, 1);\n processorRef.current = processor;\n let audioBuffer: Int16Array[] = [];\n let totalSamples = 0;\n const targetChunkSize = 8000;\n \n processor.onaudioprocess = (event) => {\n if (ws.readyState === WebSocket.OPEN) {\n const inputBuffer = event.inputBuffer;\n const inputData = inputBuffer.getChannelData(0);\n const pcmData = new Int16Array(inputData.length);\n for (let i = 0; i < inputData.length; i++) {\n const sample = Math.max(-1, Math.min(1, inputData[i]));\n pcmData[i] = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n }\n audioBuffer.push(pcmData);\n totalSamples += pcmData.length;\n if (totalSamples >= targetChunkSize) {\n const combinedData = new Int16Array(totalSamples);\n let offset = 0;\n for (const buffer of audioBuffer) {\n combinedData.set(buffer, offset);\n offset += buffer.length;\n }\n ws.send(combinedData.buffer);\n audioBuffer = [];\n totalSamples = 0;\n }\n }\n };\n source.connect(processor);\n processor.connect(audioContext.destination);\n };\n\n const stopRecording = useCallback(() => {\n setIsRecording(false);\n updateCursorStyle(false);\n if (processorRef.current) {\n processorRef.current.disconnect();\n processorRef.current = null;\n }\n if (audioContextRef.current) {\n audioContextRef.current.close();\n audioContextRef.current = null;\n }\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n if (wsRef.current) {\n if (wsRef.current.readyState === WebSocket.OPEN) {\n wsRef.current.close(1000, \"Recording stopped\");\n }\n wsRef.current = null;\n }\n setIsConnected(false);\n }, [updateCursorStyle]);\n\n const toggleRecording = useCallback(async () => {\n if (isRecording) {\n stopRecording();\n } else {\n await startRecording();\n }\n }, [isRecording, startRecording, stopRecording]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n stopRecording();\n };\n }, [stopRecording]);\n\n return {\n isRecording,\n isLoading,\n error,\n isConnected,\n toggleRecording,\n setEditor,\n };\n};\n\n// Voice Transcript Button Component\nexport const VoiceTranscriptButton = ({ editor }: { editor: any }) => {\n const { isRecording, isLoading, toggleRecording, setEditor } = useVoiceRecording();\n\n useEffect(() => {\n setEditor(editor);\n }, [editor, setEditor]);\n\n return (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={toggleRecording}\n disabled={isLoading || !editor}\n className={cn(\n isRecording && \"cteditor-bg-foreground/20\",\n \"[&>svg]:!cteditor-size-5\"\n )}\n style={{\n color: isRecording ? '#ef4444' : 'currentColor',\n }}\n >\n {isRecording ? <RecordingIcon /> : <MicrophoneIcon />}\n </Button>\n <TextCursorIcon isRecording={isRecording} editor={editor} />\n </>\n );\n};\n\n// Main Plugin - Renders editor plugin and provides button component\nconst VoiceTranscriptPlugin = () => {\n return <VoiceTranscriptEditorPlugin />;\n};\n\nexport default VoiceTranscriptPlugin;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nconst SUPPORTED_URL_PROTOCOLS = new Set([\n \"http:\",\n \"https:\",\n \"mailto:\",\n \"sms:\",\n \"tel:\",\n]);\n\nexport function sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n // eslint-disable-next-line no-script-url\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return \"about:blank\";\n }\n } catch {\n return url;\n }\n return url;\n}\n\n// Source: https://stackoverflow.com/a/8234912/2013580\nconst urlRegExp = new RegExp(\n /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[\\w]*))?)/\n);\nexport function validateUrl(url: string): boolean {\n // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.\n // Maybe show a dialog where they user can type the URL before inserting it.\n return url === \"https://\" || urlRegExp.test(url);\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $patchStyleText } from \"@lexical/selection\";\nimport { $getSelection, $isRangeSelection, FORMAT_TEXT_COMMAND } from \"lexical\";\nimport { useCallback } from \"react\";\n\nconst useColorPicker = () => {\n const [editor] = useLexicalComposerContext();\n\n const applyStyleText = useCallback(\n (styles: Record<string, string>) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $patchStyleText(selection, styles);\n }\n });\n },\n [editor]\n );\n\n const onFontColorSelect = useCallback(\n (value: string) => {\n applyStyleText({ color: value });\n },\n [applyStyleText]\n );\n\n const onBgColorSelect = useCallback(\n (value: string) => {\n applyStyleText({ \"background-color\": value });\n },\n [applyStyleText]\n );\n\n const onHighlightColorSelect = useCallback(\n (value: string | null) => {\n if (value === null) {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"highlight\");\n applyStyleText({ \"background-color\": \"transparent\" });\n } else {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"highlight\");\n applyStyleText({ \"background-color\": value });\n }\n },\n [editor, applyStyleText]\n );\n\n return {\n onFontColorSelect,\n onBgColorSelect,\n onHighlightColorSelect,\n };\n};\n\nexport default useColorPicker;\n","\"use client\";\n\n// packages/react/menu/src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": subContext.contentId,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align: \"start\",\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/dropdown-menu/src/dropdown-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = (props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n};\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composeRefs(forwardedRef, context.triggerRef),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }\n);\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DropdownMenuPortal\";\nvar DropdownMenuPortal = (props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nDropdownMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nDropdownMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"DropdownMenuGroup\";\nvar DropdownMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nDropdownMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"DropdownMenuLabel\";\nvar DropdownMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nDropdownMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"DropdownMenuItem\";\nvar DropdownMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nDropdownMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"DropdownMenuCheckboxItem\";\nvar DropdownMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"DropdownMenuRadioGroup\";\nvar DropdownMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"DropdownMenuRadioItem\";\nvar DropdownMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"DropdownMenuItemIndicator\";\nvar DropdownMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"DropdownMenuSeparator\";\nvar DropdownMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"DropdownMenuArrow\";\nvar DropdownMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nDropdownMenuArrow.displayName = ARROW_NAME;\nvar DropdownMenuSub = (props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nvar SUB_TRIGGER_NAME = \"DropdownMenuSubTrigger\";\nvar DropdownMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n});\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"DropdownMenuSubContent\";\nvar DropdownMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\nvar Root2 = DropdownMenu;\nvar Trigger = DropdownMenuTrigger;\nvar Portal2 = DropdownMenuPortal;\nvar Content2 = DropdownMenuContent;\nvar Group2 = DropdownMenuGroup;\nvar Label2 = DropdownMenuLabel;\nvar Item2 = DropdownMenuItem;\nvar CheckboxItem2 = DropdownMenuCheckboxItem;\nvar RadioGroup2 = DropdownMenuRadioGroup;\nvar RadioItem2 = DropdownMenuRadioItem;\nvar ItemIndicator2 = DropdownMenuItemIndicator;\nvar Separator2 = DropdownMenuSeparator;\nvar Arrow2 = DropdownMenuArrow;\nvar Sub2 = DropdownMenuSub;\nvar SubTrigger2 = DropdownMenuSubTrigger;\nvar SubContent2 = DropdownMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"cteditor-flex cteditor-cursor-pointer cteditor-select-none cteditor-items-center cteditor-gap-2 cteditor-rounded-sm cteditor-px-2 cteditor-py-1.5 cteditor-text-sm cteditor-outline-none focus:cteditor-bg-secondary data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"cteditor-pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"cteditor-ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"cteditor-z-[9999] cteditor-min-w-[8rem] cteditor-overflow-hidden cteditor-rounded-md cteditor-border cteditor-bg-popover cteditor-p-1 cteditor-text-popover-foreground cteditor-shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 cteditor-origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"cteditor-z-[9999] cteditor-max-h-[var(--radix-dropdown-menu-content-available-height)] cteditor-min-w-[8rem] cteditor-overflow-y-auto cteditor-overflow-x-hidden cteditor-rounded-md cteditor-border cteditor-bg-popover cteditor-p-1 cteditor-text-popover-foreground cteditor-shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 cteditor-origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"cteditor-relative cteditor-flex cteditor-cursor-pointer cteditor-select-none cteditor-items-center cteditor-gap-2 cteditor-rounded-sm cteditor-px-2 cteditor-py-1.5 cteditor-text-[13px] cteditor-outline-none cteditor-transition-colors focus:cteditor-bg-foreground/5 focus:cteditor-text-accent-foreground data-[disabled]:cteditor-pointer-events-none data-[disabled]:cteditor-opacity-50 [&>svg]:cteditor-size-4 [&>svg]:cteditor-shrink-0\",\n inset && \"cteditor-pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"cteditor-relative cteditor-flex cteditor-cursor-pointer cteditor-select-none cteditor-items-center cteditor-rounded-sm cteditor-py-1.5 cteditor-pl-8 cteditor-pr-2 cteditor-text-sm cteditor-outline-none cteditor-transition-colors focus:cteditor-bg-secondary focus:cteditor-text-accent-foreground data-[disabled]:cteditor-pointer-events-none data-[disabled]:cteditor-opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"cteditor-absolute cteditor-left-2 cteditor-flex cteditor-h-3.5 cteditor-w-3.5 cteditor-items-center cteditor-justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"cteditor-h-4 cteditor-w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"cteditor-relative cteditor-flex cteditor-cursor-pointer cteditor-select-none cteditor-items-center cteditor-rounded-sm cteditor-py-1.5 cteditor-pl-8 cteditor-pr-2 cteditor-text-sm cteditor-outline-none cteditor-transition-colors focus:cteditor-bg-secondary focus:cteditor-text-accent-foreground data-[disabled]:cteditor-pointer-events-none data-[disabled]:cteditor-opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"cteditor-absolute cteditor-left-2 cteditor-flex cteditor-h-3.5 cteditor-w-3.5 cteditor-items-center cteditor-justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"cteditor-h-2 cteditor-w-2 cteditor-fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"cteditor-px-2 cteditor-py-1.5 cteditor-text-sm cteditor-font-semibold\",\n inset && \"cteditor-pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\n \"cteditor--mx-1 cteditor-my-1 cteditor-h-px cteditor-bg-muted\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"cteditor-ml-auto cteditor-text-xs cteditor-tracking-widest cteditor-opacity-60\",\n className\n )}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_ELEMENT_COMMAND } from \"lexical\";\nimport { AlignLeft, ChevronDown } from \"lucide-react\";\nimport React, { FC, useState } from \"react\";\n\nimport { alignMenuItems } from \"../../constants\";\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\n\nexport type MenuState = {\n show: () => void;\n hide: () => void;\n isOpen: boolean;\n};\n\nexport const useMenu = (): MenuState => {\n const [isOpen, setIsOpen] = useState(false);\n\n const show = () => setIsOpen(true);\n const hide = () => setIsOpen(false);\n\n return { show, hide, isOpen };\n};\n\nconst AlignMenu: FC = () => {\n const [editor] = useLexicalComposerContext();\n const menu = useMenu();\n\n return (\n <DropdownMenu\n open={menu.isOpen}\n onOpenChange={(open) => (open ? menu.show() : menu.hide())}\n >\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-h-7 cteditor-rounded-sm cteditor-px-2\n\"\n >\n <AlignLeft className=\"!cteditor-size-4\" />\n Align\n <ChevronDown\n className=\"!cteditor-size-4 cteditor-opacity-50\n\"\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {alignMenuItems.map((option, index) => (\n <DropdownMenuItem\n key={index}\n onClick={() => {\n menu.hide();\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, option.payload);\n }}\n className=\"cteditor-flex cteditor-items-center cteditor-gap-2\"\n >\n {option.icon}\n {option.name}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default AlignMenu;\n","import { $createCodeNode } from \"@lexical/code\";\nimport {\n INSERT_CHECK_LIST_COMMAND,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n} from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $createHeadingNode,\n $createQuoteNode,\n HeadingTagType,\n} from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n} from \"lexical\";\nimport {\n Code,\n Heading1,\n Heading2,\n Heading3,\n Heading4,\n Heading5,\n Heading6,\n Quote,\n Text,\n} from \"lucide-react\";\nimport { ReactElement } from \"react\";\nimport { blockTypeToBlockName } from \"src/constants\";\nimport { BulletListIcon, CheckBoxIcon, NumberListIcon } from \"src/ui/Icons\";\n\nimport { UseBlockFormatProps } from \"../types\";\n\n// Export the Block interface so it's publicly accessible\nexport interface Block {\n name: string;\n blockType: keyof typeof blockTypeToBlockName;\n icon: ReactElement<any>;\n onClick: () => void;\n}\n\nconst useBlockFormat = (props: UseBlockFormatProps) => {\n const { blockType } = props;\n const [editor] = useLexicalComposerContext();\n\n const formatParagraph = () => {\n if (blockType !== \"paragraph\") {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection))\n $setBlocksType(selection, () => $createParagraphNode());\n });\n }\n };\n\n const formatHeading = (headingSize: HeadingTagType) => {\n if (blockType !== headingSize) {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n }\n });\n }\n };\n\n const formatBulletList = () => {\n if (blockType !== \"bullet\") {\n console.log(\"formatBulletList\");\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n console.log(\"removeBulletList\");\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const formatCheckList = () => {\n console.log(blockType);\n if (blockType !== \"check\") {\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const formatNumberedList = () => {\n if (blockType !== \"number\") {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const formatQuote = () => {\n if (blockType !== \"quote\") {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $setBlocksType(selection, () => $createQuoteNode());\n }\n });\n }\n };\n\n const formatCode = () => {\n if (blockType !== \"code\") {\n editor.update(() => {\n let selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n if (selection.isCollapsed()) {\n $setBlocksType(selection, () => $createCodeNode());\n } else {\n const textContent = selection.getTextContent();\n const codeNode = $createCodeNode();\n selection.insertNodes([codeNode]);\n selection = $getSelection();\n if ($isRangeSelection(selection))\n selection.insertRawText(textContent);\n }\n }\n });\n }\n };\n\n const blocks: Block[] = [\n {\n name: \"Normal\",\n blockType: \"paragraph\",\n icon: <Text />,\n onClick: formatParagraph,\n },\n {\n name: \"Heading 1\",\n blockType: \"h1\",\n icon: <Heading1 />,\n onClick: () => formatHeading(\"h1\"),\n },\n {\n name: \"Heading 2\",\n blockType: \"h2\",\n icon: <Heading2 />,\n onClick: () => formatHeading(\"h2\"),\n },\n {\n name: \"Heading 3\",\n blockType: \"h3\",\n icon: <Heading3 />,\n onClick: () => formatHeading(\"h3\"),\n },\n {\n name: \"Heading 4\",\n blockType: \"h4\",\n icon: <Heading4 />,\n onClick: () => formatHeading(\"h4\"),\n },\n {\n name: \"Heading 5\",\n blockType: \"h5\",\n icon: <Heading5 />,\n onClick: () => formatHeading(\"h5\"),\n },\n {\n name: \"Heading 6\",\n blockType: \"h6\",\n icon: <Heading6 />,\n onClick: () => formatHeading(\"h6\"),\n },\n {\n name: \"Bulleted List\",\n blockType: \"bullet\",\n icon: <BulletListIcon />,\n onClick: formatBulletList,\n },\n {\n name: \"Numbered List\",\n blockType: \"number\",\n icon: <NumberListIcon />,\n onClick: formatNumberedList,\n },\n {\n name: \"Check List\",\n blockType: \"check\",\n icon: <CheckBoxIcon />,\n onClick: formatCheckList,\n },\n {\n name: \"Quote\",\n blockType: \"quote\",\n icon: <Quote className=\"!cteditor-size-4\" />,\n onClick: formatQuote,\n },\n {\n name: \"Code Block\",\n blockType: \"code\",\n icon: <Code className=\"!cteditor-size-4\" />,\n onClick: formatCode,\n },\n ];\n\n return {\n blocks,\n formatParagraph,\n formatHeading,\n formatBulletList,\n formatCheckList,\n formatNumberedList,\n formatQuote,\n formatCode,\n };\n};\n\nexport default useBlockFormat;\n","import { ChevronDown } from \"lucide-react\";\nimport React, { FC, MouseEvent, useEffect, useState } from \"react\";\nimport { blockTypeToBlockName } from \"src/constants\";\nimport { cn } from \"src/lib/utils\";\n\nimport useBlockFormat from \"../../hooks/useBlockFormat\";\nimport { BlockFormatMenuProps } from \"../../types\";\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\n\n// Custom useMediaQuery hook to replace MUI's useMediaQuery\nconst useMediaQuery = (query: string): boolean => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n const updateMatches = () => setMatches(media.matches);\n\n // Set initial value\n updateMatches();\n\n // Add listener for changes\n media.addEventListener(\"change\", updateMatches);\n\n // Clean up\n return () => {\n media.removeEventListener(\"change\", updateMatches);\n };\n }, [query]);\n\n return matches;\n};\n\nconst BlockFormatMenu: FC<BlockFormatMenuProps> = ({ blockType }) => {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const isMdViewport = useMediaQuery(\"(min-width:960px)\");\n\n const handleClickIconButton = (event: MouseEvent<HTMLElement>) =>\n setAnchorEl(event.currentTarget);\n\n const handleClose = () => setAnchorEl(null);\n\n const { blocks } = useBlockFormat({ blockType });\n\n const getSelectedBlock = () =>\n blocks.find((block) => block.blockType === blockType);\n\n return (\n <>\n <DropdownMenu\n open={open}\n onOpenChange={(isOpen) => {\n if (!isOpen) handleClose();\n }}\n >\n <DropdownMenuTrigger asChild>\n <Button\n aria-haspopup={anchorEl ? \"true\" : undefined}\n aria-controls={anchorEl ? \"block-format-menu\" : undefined}\n onClick={handleClickIconButton}\n variant=\"ghost\"\n className={cn(\n \"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-whitespace-nowrap\",\n open && \"cteditor-bg-slate-100/5\"\n )}\n size=\"sm\"\n >\n <span className=\"cteditor-flex cteditor-items-center cteditor-justify-center [&_svg]:!cteditor-size-5\">\n {getSelectedBlock()?.icon}\n </span>\n\n {isMdViewport ? blockTypeToBlockName[blockType] : null}\n\n <ChevronDown className=\"!cteditor-size-4 cteditor-opacity-70\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n id=\"block-format-menu\"\n className=\"cteditor-w-56\"\n align=\"start\"\n aria-labelledby=\"block-format-button\"\n role=\"listbox\"\n >\n {blocks.map((option, index) => (\n <DropdownMenuItem\n key={index}\n role=\"option\"\n className={cn(\n \"cteditor-flex cteditor-items-center !cteditor-gap-2 cteditor-cursor-pointer\",\n blockType === option.blockType && \"cteditor-bg-slate-100/10\"\n )}\n onClick={() => {\n handleClose();\n option.onClick();\n }}\n >\n <span className=\"cteditor-flex cteditor-w-5 cteditor-h-5 [&>svg]:cteditor-size-5 cteditor-items-center cteditor-justify-center\">\n {option.icon}\n </span>\n <span>{option.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n );\n};\n\nexport default BlockFormatMenu;\n","import e,{useRef as r,useMemo as t,useEffect as n,useState as o,useCallback as a,useLayoutEffect as l}from\"react\";function u(){return(u=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}function c(e,r){if(null==e)return{};var t,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r.indexOf(t=a[n])>=0||(o[t]=e[t]);return o}function i(e){var t=r(e),n=r(function(e){t.current&&t.current(e)});return t.current=e,n.current}var s=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=1),e>t?t:e<r?r:e},f=function(e){return\"touches\"in e},v=function(e){return e&&e.ownerDocument.defaultView||self},d=function(e,r,t){var n=e.getBoundingClientRect(),o=f(r)?function(e,r){for(var t=0;t<e.length;t++)if(e[t].identifier===r)return e[t];return e[0]}(r.touches,t):r;return{left:s((o.pageX-(n.left+v(e).pageXOffset))/n.width),top:s((o.pageY-(n.top+v(e).pageYOffset))/n.height)}},h=function(e){!f(e)&&e.preventDefault()},m=e.memo(function(o){var a=o.onMove,l=o.onKey,s=c(o,[\"onMove\",\"onKey\"]),m=r(null),g=i(a),p=i(l),b=r(null),_=r(!1),x=t(function(){var e=function(e){h(e),(f(e)?e.touches.length>0:e.buttons>0)&&m.current?g(d(m.current,e,b.current)):t(!1)},r=function(){return t(!1)};function t(t){var n=_.current,o=v(m.current),a=t?o.addEventListener:o.removeEventListener;a(n?\"touchmove\":\"mousemove\",e),a(n?\"touchend\":\"mouseup\",r)}return[function(e){var r=e.nativeEvent,n=m.current;if(n&&(h(r),!function(e,r){return r&&!f(e)}(r,_.current)&&n)){if(f(r)){_.current=!0;var o=r.changedTouches||[];o.length&&(b.current=o[0].identifier)}n.focus(),g(d(n,r,b.current)),t(!0)}},function(e){var r=e.which||e.keyCode;r<37||r>40||(e.preventDefault(),p({left:39===r?.05:37===r?-.05:0,top:40===r?.05:38===r?-.05:0}))},t]},[p,g]),C=x[0],E=x[1],H=x[2];return n(function(){return H},[H]),e.createElement(\"div\",u({},s,{onTouchStart:C,onMouseDown:C,className:\"react-colorful__interactive\",ref:m,onKeyDown:E,tabIndex:0,role:\"slider\"}))}),g=function(e){return e.filter(Boolean).join(\" \")},p=function(r){var t=r.color,n=r.left,o=r.top,a=void 0===o?.5:o,l=g([\"react-colorful__pointer\",r.className]);return e.createElement(\"div\",{className:l,style:{top:100*a+\"%\",left:100*n+\"%\"}},e.createElement(\"div\",{className:\"react-colorful__pointer-fill\",style:{backgroundColor:t}}))},b=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=Math.pow(10,r)),Math.round(t*e)/t},_={grad:.9,turn:360,rad:360/(2*Math.PI)},x=function(e){return L(C(e))},C=function(e){return\"#\"===e[0]&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?b(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:8===e.length?b(parseInt(e.substring(6,8),16)/255,2):1}},E=function(e,r){return void 0===r&&(r=\"deg\"),Number(e)*(_[r]||1)},H=function(e){var r=/hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?N({h:E(r[1],r[2]),s:Number(r[3]),l:Number(r[4]),a:void 0===r[5]?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},M=H,N=function(e){var r=e.s,t=e.l;return{h:e.h,s:(r*=(t<50?t:100-t)/100)>0?2*r/(t+r)*100:0,v:t+r,a:e.a}},w=function(e){return K(I(e))},y=function(e){var r=e.s,t=e.v,n=e.a,o=(200-r)*t/100;return{h:b(e.h),s:b(o>0&&o<200?r*t/100/(o<=100?o:200-o)*100:0),l:b(o/2),a:b(n,2)}},q=function(e){var r=y(e);return\"hsl(\"+r.h+\", \"+r.s+\"%, \"+r.l+\"%)\"},k=function(e){var r=y(e);return\"hsla(\"+r.h+\", \"+r.s+\"%, \"+r.l+\"%, \"+r.a+\")\"},I=function(e){var r=e.h,t=e.s,n=e.v,o=e.a;r=r/360*6,t/=100,n/=100;var a=Math.floor(r),l=n*(1-t),u=n*(1-(r-a)*t),c=n*(1-(1-r+a)*t),i=a%6;return{r:b(255*[n,u,l,l,c,n][i]),g:b(255*[c,n,n,u,l,l][i]),b:b(255*[l,l,c,n,n,u][i]),a:b(o,2)}},O=function(e){var r=/hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?A({h:E(r[1],r[2]),s:Number(r[3]),v:Number(r[4]),a:void 0===r[5]?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},j=O,z=function(e){var r=/rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?L({r:Number(r[1])/(r[2]?100/255:1),g:Number(r[3])/(r[4]?100/255:1),b:Number(r[5])/(r[6]?100/255:1),a:void 0===r[7]?1:Number(r[7])/(r[8]?100:1)}):{h:0,s:0,v:0,a:1}},B=z,D=function(e){var r=e.toString(16);return r.length<2?\"0\"+r:r},K=function(e){var r=e.r,t=e.g,n=e.b,o=e.a,a=o<1?D(b(255*o)):\"\";return\"#\"+D(r)+D(t)+D(n)+a},L=function(e){var r=e.r,t=e.g,n=e.b,o=e.a,a=Math.max(r,t,n),l=a-Math.min(r,t,n),u=l?a===r?(t-n)/l:a===t?2+(n-r)/l:4+(r-t)/l:0;return{h:b(60*(u<0?u+6:u)),s:b(a?l/a*100:0),v:b(a/255*100),a:o}},A=function(e){return{h:b(e.h),s:b(e.s),v:b(e.v),a:b(e.a,2)}},S=e.memo(function(r){var t=r.hue,n=r.onChange,o=g([\"react-colorful__hue\",r.className]);return e.createElement(\"div\",{className:o},e.createElement(m,{onMove:function(e){n({h:360*e.left})},onKey:function(e){n({h:s(t+360*e.left,0,360)})},\"aria-label\":\"Hue\",\"aria-valuenow\":b(t),\"aria-valuemax\":\"360\",\"aria-valuemin\":\"0\"},e.createElement(p,{className:\"react-colorful__hue-pointer\",left:t/360,color:q({h:t,s:100,v:100,a:1})})))}),T=e.memo(function(r){var t=r.hsva,n=r.onChange,o={backgroundColor:q({h:t.h,s:100,v:100,a:1})};return e.createElement(\"div\",{className:\"react-colorful__saturation\",style:o},e.createElement(m,{onMove:function(e){n({s:100*e.left,v:100-100*e.top})},onKey:function(e){n({s:s(t.s+100*e.left,0,100),v:s(t.v-100*e.top,0,100)})},\"aria-label\":\"Color\",\"aria-valuetext\":\"Saturation \"+b(t.s)+\"%, Brightness \"+b(t.v)+\"%\"},e.createElement(p,{className:\"react-colorful__saturation-pointer\",top:1-t.v/100,left:t.s/100,color:q(t)})))}),F=function(e,r){if(e===r)return!0;for(var t in e)if(e[t]!==r[t])return!1;return!0},P=function(e,r){return e.replace(/\\s/g,\"\")===r.replace(/\\s/g,\"\")},X=function(e,r){return e.toLowerCase()===r.toLowerCase()||F(C(e),C(r))};function Y(e,t,l){var u=i(l),c=o(function(){return e.toHsva(t)}),s=c[0],f=c[1],v=r({color:t,hsva:s});n(function(){if(!e.equal(t,v.current.color)){var r=e.toHsva(t);v.current={hsva:r,color:t},f(r)}},[t,e]),n(function(){var r;F(s,v.current.hsva)||e.equal(r=e.fromHsva(s),v.current.color)||(v.current={hsva:s,color:r},u(r))},[s,e,u]);var d=a(function(e){f(function(r){return Object.assign({},r,e)})},[]);return[s,d]}var R,V=\"undefined\"!=typeof window?l:n,$=function(){return R||(\"undefined\"!=typeof __webpack_nonce__?__webpack_nonce__:void 0)},G=function(e){R=e},J=new Map,Q=function(e){V(function(){var r=e.current?e.current.ownerDocument:document;if(void 0!==r&&!J.has(r)){var t=r.createElement(\"style\");t.innerHTML='.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:\"\";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\\'data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><path d=\"M8 0h8v8H8zM0 8h8v8H0z\"/></svg>\\')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}',J.set(r,t);var n=$();n&&t.setAttribute(\"nonce\",n),r.head.appendChild(t)}},[])},U=function(t){var n=t.className,o=t.colorModel,a=t.color,l=void 0===a?o.defaultColor:a,i=t.onChange,s=c(t,[\"className\",\"colorModel\",\"color\",\"onChange\"]),f=r(null);Q(f);var v=Y(o,l,i),d=v[0],h=v[1],m=g([\"react-colorful\",n]);return e.createElement(\"div\",u({},s,{ref:f,className:m}),e.createElement(T,{hsva:d,onChange:h}),e.createElement(S,{hue:d.h,onChange:h,className:\"react-colorful__last-control\"}))},W={defaultColor:\"000\",toHsva:x,fromHsva:function(e){return w({h:e.h,s:e.s,v:e.v,a:1})},equal:X},Z=function(r){return e.createElement(U,u({},r,{colorModel:W}))},ee=function(r){var t=r.className,n=r.hsva,o=r.onChange,a={backgroundImage:\"linear-gradient(90deg, \"+k(Object.assign({},n,{a:0}))+\", \"+k(Object.assign({},n,{a:1}))+\")\"},l=g([\"react-colorful__alpha\",t]),u=b(100*n.a);return e.createElement(\"div\",{className:l},e.createElement(\"div\",{className:\"react-colorful__alpha-gradient\",style:a}),e.createElement(m,{onMove:function(e){o({a:e.left})},onKey:function(e){o({a:s(n.a+e.left)})},\"aria-label\":\"Alpha\",\"aria-valuetext\":u+\"%\",\"aria-valuenow\":u,\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\"},e.createElement(p,{className:\"react-colorful__alpha-pointer\",left:n.a,color:k(n)})))},re=function(t){var n=t.className,o=t.colorModel,a=t.color,l=void 0===a?o.defaultColor:a,i=t.onChange,s=c(t,[\"className\",\"colorModel\",\"color\",\"onChange\"]),f=r(null);Q(f);var v=Y(o,l,i),d=v[0],h=v[1],m=g([\"react-colorful\",n]);return e.createElement(\"div\",u({},s,{ref:f,className:m}),e.createElement(T,{hsva:d,onChange:h}),e.createElement(S,{hue:d.h,onChange:h}),e.createElement(ee,{hsva:d,onChange:h,className:\"react-colorful__last-control\"}))},te={defaultColor:\"0001\",toHsva:x,fromHsva:w,equal:X},ne=function(r){return e.createElement(re,u({},r,{colorModel:te}))},oe={defaultColor:{h:0,s:0,l:0,a:1},toHsva:N,fromHsva:y,equal:F},ae=function(r){return e.createElement(re,u({},r,{colorModel:oe}))},le={defaultColor:\"hsla(0, 0%, 0%, 1)\",toHsva:H,fromHsva:k,equal:P},ue=function(r){return e.createElement(re,u({},r,{colorModel:le}))},ce={defaultColor:{h:0,s:0,l:0},toHsva:function(e){return N({h:e.h,s:e.s,l:e.l,a:1})},fromHsva:function(e){return{h:(r=y(e)).h,s:r.s,l:r.l};var r},equal:F},ie=function(r){return e.createElement(U,u({},r,{colorModel:ce}))},se={defaultColor:\"hsl(0, 0%, 0%)\",toHsva:M,fromHsva:q,equal:P},fe=function(r){return e.createElement(U,u({},r,{colorModel:se}))},ve={defaultColor:{h:0,s:0,v:0,a:1},toHsva:function(e){return e},fromHsva:A,equal:F},de=function(r){return e.createElement(re,u({},r,{colorModel:ve}))},he={defaultColor:\"hsva(0, 0%, 0%, 1)\",toHsva:O,fromHsva:function(e){var r=A(e);return\"hsva(\"+r.h+\", \"+r.s+\"%, \"+r.v+\"%, \"+r.a+\")\"},equal:P},me=function(r){return e.createElement(re,u({},r,{colorModel:he}))},ge={defaultColor:{h:0,s:0,v:0},toHsva:function(e){return{h:e.h,s:e.s,v:e.v,a:1}},fromHsva:function(e){var r=A(e);return{h:r.h,s:r.s,v:r.v}},equal:F},pe=function(r){return e.createElement(U,u({},r,{colorModel:ge}))},be={defaultColor:\"hsv(0, 0%, 0%)\",toHsva:j,fromHsva:function(e){var r=A(e);return\"hsv(\"+r.h+\", \"+r.s+\"%, \"+r.v+\"%)\"},equal:P},_e=function(r){return e.createElement(U,u({},r,{colorModel:be}))},xe={defaultColor:{r:0,g:0,b:0,a:1},toHsva:L,fromHsva:I,equal:F},Ce=function(r){return e.createElement(re,u({},r,{colorModel:xe}))},Ee={defaultColor:\"rgba(0, 0, 0, 1)\",toHsva:z,fromHsva:function(e){var r=I(e);return\"rgba(\"+r.r+\", \"+r.g+\", \"+r.b+\", \"+r.a+\")\"},equal:P},He=function(r){return e.createElement(re,u({},r,{colorModel:Ee}))},Me={defaultColor:{r:0,g:0,b:0},toHsva:function(e){return L({r:e.r,g:e.g,b:e.b,a:1})},fromHsva:function(e){return{r:(r=I(e)).r,g:r.g,b:r.b};var r},equal:F},Ne=function(r){return e.createElement(U,u({},r,{colorModel:Me}))},we={defaultColor:\"rgb(0, 0, 0)\",toHsva:B,fromHsva:function(e){var r=I(e);return\"rgb(\"+r.r+\", \"+r.g+\", \"+r.b+\")\"},equal:P},ye=function(r){return e.createElement(U,u({},r,{colorModel:we}))},qe=/^#?([0-9A-F]{3,8})$/i,ke=function(r){var t=r.color,l=void 0===t?\"\":t,s=r.onChange,f=r.onBlur,v=r.escape,d=r.validate,h=r.format,m=r.process,g=c(r,[\"color\",\"onChange\",\"onBlur\",\"escape\",\"validate\",\"format\",\"process\"]),p=o(function(){return v(l)}),b=p[0],_=p[1],x=i(s),C=i(f),E=a(function(e){var r=v(e.target.value);_(r),d(r)&&x(m?m(r):r)},[v,m,d,x]),H=a(function(e){d(e.target.value)||_(v(l)),C(e)},[l,v,d,C]);return n(function(){_(v(l))},[l,v]),e.createElement(\"input\",u({},g,{value:h?h(b):b,spellCheck:\"false\",onChange:E,onBlur:H}))},Ie=function(e){return\"#\"+e},Oe=function(r){var t=r.prefixed,n=r.alpha,o=c(r,[\"prefixed\",\"alpha\"]),l=a(function(e){return e.replace(/([^0-9A-F]+)/gi,\"\").substring(0,n?8:6)},[n]),i=a(function(e){return function(e,r){var t=qe.exec(e),n=t?t[1].length:0;return 3===n||6===n||!!r&&4===n||!!r&&8===n}(e,n)},[n]);return e.createElement(ke,u({},o,{escape:l,format:t?Ie:void 0,process:Ie,validate:i}))};export{ne as HexAlphaColorPicker,Oe as HexColorInput,Z as HexColorPicker,ie as HslColorPicker,fe as HslStringColorPicker,ae as HslaColorPicker,ue as HslaStringColorPicker,pe as HsvColorPicker,_e as HsvStringColorPicker,de as HsvaColorPicker,me as HsvaStringColorPicker,Ne as RgbColorPicker,ye as RgbStringColorPicker,Ce as RgbaColorPicker,He as RgbaStringColorPicker,G as setNonce};\n//# sourceMappingURL=index.module.js.map\n","// packages/core/primitive/src/primitive.tsx\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nexport {\n composeEventHandlers\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/focus-guards/src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nvar Root = FocusGuards;\nexport {\n FocusGuards,\n Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n context.onAnchorChange(virtualRef?.current || ref.current);\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = false\n } = props;\n const popperScope = usePopperScope(__scopePopover);\n const triggerRef = React.useRef(null);\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: POPOVER_NAME\n });\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n PopoverProvider,\n {\n scope: __scopePopover,\n contentId: useId(),\n triggerRef,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n hasCustomAnchor,\n onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n modal,\n children\n }\n ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props;\n const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n React.useEffect(() => {\n onCustomAnchorAdd();\n return () => onCustomAnchorRemove();\n }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props;\n const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n const trigger = /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n const { __scopePopover, forceMount, children, container } = props;\n const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar Slot = createSlot(\"PopoverContent.RemoveScroll\");\nvar PopoverContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const isRightClickOutsideRef = React.useRef(false);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n isRightClickOutsideRef.current = isRightClick;\n },\n { checkForDefaultPrevented: false }\n ),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nvar PopoverContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar PopoverContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props;\n const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n useFocusGuards();\n return /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onInteractOutside,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n \"data-state\": getState(context.open),\n role: \"dialog\",\n id: context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n )\n }\n )\n }\n );\n }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props;\n const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopePopover);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n Close,\n Content2 as Content,\n Popover,\n PopoverAnchor,\n PopoverArrow,\n PopoverClose,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n Portal,\n Root2 as Root,\n Trigger,\n createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"cteditor-z-[9999] cteditor-w-72 cteditor-rounded-md cteditor-border cteditor-bg-popover cteditor-p-4 cteditor-text-popover-foreground cteditor-shadow-md cteditor-outline-none data-[state=open]:cteditor-animate-in data-[state=closed]:cteditor-animate-out data-[state=closed]:cteditor-fade-out-0 data-[state=open]:cteditor-fade-in-0 data-[state=closed]:cteditor-zoom-out-95 data-[state=open]:cteditor-zoom-in-95 data-[state=closed]:cteditor-slide-out-to-top-2 data-[state=left]:cteditor-slide-out-to-right-2 data-[state=right]:cteditor-slide-out-to-left-2 data-[state=top]:cteditor-slide-out-to-bottom-2 cteditor-origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };\n","import \"./ColorPicker.css\";\n\nimport React, { FC, useEffect, useRef, useState } from \"react\";\nimport { HexColorPicker } from \"react-colorful\";\n\nimport { ColorPickerProps } from \"../../types\";\nimport { Button } from \"../ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\n\n// Predefined color palette matching your target design\nconst colorPalette = [\n // Row 1\n \"#FFFFFF\",\n \"#4A90E2\",\n \"#7ED3F7\",\n \"#50E3C2\",\n \"#F5A623\",\n \"#F08A8A\",\n \"#BD10E0\",\n // Row 2\n \"#4A4A4A\",\n \"#357ABD\",\n \"#50B5FF\",\n \"#00D084\",\n \"#D0021B\",\n \"#E25822\",\n \"#9013FE\",\n // Row 3\n \"#000000\",\n \"#1F4E79\",\n \"#2E5984\",\n \"#7ED321\",\n \"#8B572A\",\n \"#7F0000\",\n \"#50327C\",\n];\n\nconst ColorPicker: FC<ColorPickerProps> = ({\n title,\n icon,\n onChange,\n bgClassName = \"\",\n}) => {\n const [selectedColor, setSelectedColor] = useState(\"#FFFFFF\");\n const [open, setOpen] = useState(false);\n const [showAdvanced, setShowAdvanced] = useState(false);\n const [isInteracting, setIsInteracting] = useState(false);\n const colorPickerRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const interactionTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n\n const handleColorSelect = (color: string) => {\n setSelectedColor(color);\n onChange(color);\n };\n\n const handlePresetClick = (color: string) => {\n handleColorSelect(color);\n setOpen(false);\n };\n\n // Comprehensive check for any element that should prevent popover closing\n const isColorPickerElement = (element: HTMLElement | null): boolean => {\n if (!element) return false;\n\n // Check if element is within our popover\n if (popoverRef.current?.contains(element)) return true;\n\n // Check if element is within color picker\n if (colorPickerRef.current?.contains(element)) return true;\n\n const colorfulSelectors = [\n \".react-colorful\",\n \".react-colorful__saturation\",\n \".react-colorful__hue\",\n \".react-colorful__pointer\",\n \".react-colorful__interactive\",\n \".react-colorful__saturation-pointer\",\n \".react-colorful__hue-pointer\",\n \"[data-radix-popper-content-wrapper]\",\n \"[data-radix-popover-content]\",\n ];\n\n return colorfulSelectors.some(\n (selector) => element.matches?.(selector) || element.closest?.(selector)\n );\n };\n\n const startInteraction = () => {\n setIsInteracting(true);\n if (interactionTimeoutRef.current) {\n clearTimeout(interactionTimeoutRef.current);\n }\n };\n\n const endInteraction = () => {\n interactionTimeoutRef.current = setTimeout(() => {\n setIsInteracting(false);\n }, 300);\n };\n\n useEffect(() => {\n const handleStart = (e: Event) => {\n if (isColorPickerElement(e.target as HTMLElement)) {\n startInteraction();\n }\n };\n\n const handleEnd = () => {\n endInteraction();\n };\n\n document.addEventListener(\"mousedown\", handleStart, true);\n document.addEventListener(\"touchstart\", handleStart, true);\n document.addEventListener(\"mouseup\", handleEnd, true);\n document.addEventListener(\"touchend\", handleEnd, true);\n document.addEventListener(\"dragstart\", handleStart, true);\n document.addEventListener(\"dragend\", handleEnd, true);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleStart, true);\n document.removeEventListener(\"touchstart\", handleStart, true);\n document.removeEventListener(\"mouseup\", handleEnd, true);\n document.removeEventListener(\"touchend\", handleEnd, true);\n document.removeEventListener(\"dragstart\", handleStart, true);\n document.removeEventListener(\"dragend\", handleEnd, true);\n\n if (interactionTimeoutRef.current) {\n clearTimeout(interactionTimeoutRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (!open) {\n setShowAdvanced(false);\n setIsInteracting(false);\n if (interactionTimeoutRef.current) {\n clearTimeout(interactionTimeoutRef.current);\n }\n }\n }, [open]);\n\n const isValidHexColor = (hex: string): boolean => {\n return /^#[0-9A-Fa-f]{6}$/.test(hex);\n };\n\n const handleHexInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = (\"#\" + e.target.value.replace(/^#/, \"\")).toUpperCase();\n\n // Allow typing # and valid hex characters\n if (/^#[0-9A-Fa-f]{0,6}$/.test(value)) {\n // Only update color if it's a complete valid hex color\n if (value.length === 7 && isValidHexColor(value)) {\n handleColorSelect(value);\n } else {\n // Just update the input display without triggering onChange\n setSelectedColor(value);\n }\n }\n };\n\n const handleHexInputBlur = () => {\n // Revert to last valid color if input is incomplete\n if (!isValidHexColor(selectedColor)) {\n setSelectedColor(\n selectedColor.length >= 4 ? selectedColor.substring(0, 7) : \"#FFFFFF\"\n );\n }\n };\n\n return (\n <>\n <Popover\n open={open}\n onOpenChange={setOpen}\n modal={false}\n >\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"cteditor-size-[18px]\"\n title={title}\n >\n <span\n className={`cteditor-rounded-[2px] !cteditor-size-[18px] cteditor-flex cteditor-items-center cteditor-justify-center ${bgClassName}`}\n style={\n !bgClassName ? { backgroundColor: selectedColor } : undefined\n }\n >\n {icon}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent\n ref={popoverRef}\n className=\"cteditor-w-auto cteditor-p-0 cteditor-border-none cteditor-shadow-lg cteditor-bg-transparent !cteditor-z-[99999]\"\n sideOffset={5}\n id=\"color-picker\"\n onInteractOutside={(e) => {\n e.preventDefault(); // Always prevent closing\n }}\n >\n <div\n className=\"cteditor-bg-popover cteditor-rounded-lg cteditor-p-3\"\n style={{ width: \"240px\" }}\n >\n {/* Preset Color Grid */}\n <div className=\"cteditor-grid cteditor-grid-cols-7 cteditor-gap-2 cteditor-mb-4\">\n {colorPalette.map((color, index) => (\n <button\n key={index}\n className={`cteditor-w-7 cteditor-h-7 cteditor-rounded cteditor-border-2 hover:cteditor-border-white cteditor-transition-all cteditor-duration-200 cteditor-cursor-pointer hover:cteditor-scale-105 ${\n selectedColor.toUpperCase() === color.toUpperCase()\n ? \"cteditor-border-white cteditor-shadow-lg\"\n : \"cteditor-border-gray-500\"\n }`}\n style={{ backgroundColor: color }}\n onClick={() => handlePresetClick(color)}\n title={color}\n />\n ))}\n </div>\n\n {/* Toggle for Advanced Picker */}\n <div className=\"cteditor-flex cteditor-items-center cteditor-justify-between cteditor-mb-2\">\n <button\n onClick={() => setShowAdvanced(!showAdvanced)}\n className=\"cteditor-text-xs cteditor-text-primary/90 hover:cteditor-text-primary cteditor-transition-colors cteditor-flex cteditor-items-center cteditor-gap-2\n\"\n >\n <span className=\"cteditor-text-xs\">\n {showAdvanced ? \"▼\" : \"▶\"}\n </span>\n {showAdvanced ? \"Hide Advanced\" : \"Show Advanced\"}\n </button>\n </div>\n\n {/* Advanced Color Picker */}\n {showAdvanced && (\n <div\n ref={colorPickerRef}\n className=\"cteditor-mb-2.5 select-none\"\n onMouseDown={(e) => {\n e.stopPropagation();\n startInteraction();\n }}\n onTouchStart={(e) => {\n e.stopPropagation();\n startInteraction();\n }}\n onMouseUp={() => endInteraction()}\n onTouchEnd={() => endInteraction()}\n onMouseLeave={() => endInteraction()}\n style={{\n touchAction: \"none\",\n userSelect: \"none\",\n WebkitUserSelect: \"none\",\n }}\n >\n <div\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n <HexColorPicker\n color={\n isValidHexColor(selectedColor) ? selectedColor : \"#FFFFFF\"\n }\n onChange={handleColorSelect}\n />\n </div>\n </div>\n )}\n\n {/* Bottom section with hex input and preview */}\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-pt-2 cteditor-border-t cteditor-border-gray-600\">\n <div\n className=\"cteditor-w-5 cteditor-h-5 cteditor-rounded cteditor-border-2 cteditor-border-gray-500 cteditor-flex-shrink-0\"\n style={{\n backgroundColor: isValidHexColor(selectedColor)\n ? selectedColor\n : \"#FFFFFF\",\n }}\n title={selectedColor}\n />\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-1 cteditor-flex-1\">\n <span className=\"cteditor-text-gray-400 cteditor-text-sm cteditor-font-mono\">\n #\n </span>\n <input\n type=\"text\"\n value={selectedColor.replace(\"#\", \"\")}\n onChange={handleHexInputChange}\n onBlur={handleHexInputBlur}\n className=\"cteditor-bg-gray-700 cteditor-text-gray-200 cteditor-text-xs cteditor-px-2 cteditor-py-0.5 cteditor-rounded cteditor-border cteditor-border-gray-600 focus:cteditor-border-primary/60 focus:cteditor-outline-none cteditor-flex-1 cteditor-font-mono\"\n maxLength={6}\n placeholder=\"FFFFFF\"\n />\n </div>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </>\n );\n};\n\nexport default ColorPicker;\n","import EmojiPicker, { EmojiClickData } from \"emoji-picker-react\";\nimport React, { forwardRef, useState } from \"react\";\nimport { EmojiPluginProps } from \"src/types\";\n\nimport { Button } from \"../ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\n\nconst EmojiPickerWidget = forwardRef<HTMLDivElement, EmojiPluginProps>(\n ({ title, icon, onChange }, ref) => {\n const [open, setOpen] = useState(false);\n\n const handleEmojiClick = (emoji: EmojiClickData) => {\n if (onChange) {\n onChange(emoji);\n }\n setOpen(false); // Close popover after selection\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen} modal={false}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" title={title}>\n {icon}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n ref={ref}\n className=\"cteditor-w-auto cteditor-p-0 cteditor-border-none !cteditor-z-[99999]\"\n sideOffset={5}\n id=\"emoji-picker\"\n onInteractOutside={(e) => {\n e.preventDefault(); // Always prevent closing\n }}\n >\n <div className=\"cteditor-p-0\">\n <EmojiPicker\n onEmojiClick={handleEmojiClick}\n width={350}\n height={350}\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n }\n);\n\nEmojiPickerWidget.displayName = \"EmojiPickerWidget\";\n\nexport default EmojiPickerWidget;\n","// packages/core/number/src/number.ts\nfunction clamp(value, [min, max]) {\n return Math.min(max, Math.max(min, value));\n}\nexport {\n clamp\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-previous/src/usePrevious.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/select/src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar Select = (props) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n form\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange\n });\n const triggerPointerDownPosRef = React.useRef(null);\n const isFormControl = trigger ? form || !!trigger.closest(\"form\") : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsxs(\n SelectProvider,\n {\n required,\n scope: __scopeSelect,\n trigger,\n onTriggerChange: setTrigger,\n valueNode,\n onValueNodeChange: setValueNode,\n valueNodeHasChildren,\n onValueNodeHasChildrenChange: setValueNodeHasChildren,\n contentId: useId(),\n value,\n onValueChange: setValue,\n open,\n onOpenChange: setOpen,\n dir: direction,\n triggerPointerDownPosRef,\n disabled,\n children: [\n /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n SelectNativeOptionsProvider,\n {\n scope: props.__scopeSelect,\n onNativeOptionAdd: React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, []),\n onNativeOptionRemove: React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, []),\n children\n }\n ) }),\n isFormControl ? /* @__PURE__ */ jsxs(\n BubbleSelect,\n {\n \"aria-hidden\": true,\n required,\n tabIndex: -1,\n name,\n autoComplete,\n value,\n onChange: (event) => setValue(event.target.value),\n disabled,\n form,\n children: [\n value === void 0 ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n Array.from(nativeOptionsSet)\n ]\n },\n nativeSelectKey\n ) : null\n ]\n }\n ) });\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const pointerTypeRef = React.useRef(\"touch\");\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== void 0) {\n context.onValueChange(nextItem.value);\n }\n });\n const handleOpen = (pointerEvent) => {\n if (!isDisabled) {\n context.onOpenChange(true);\n resetTypeahead();\n }\n if (pointerEvent) {\n context.triggerPointerDownPosRef.current = {\n x: Math.round(pointerEvent.pageX),\n y: Math.round(pointerEvent.pageY)\n };\n }\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"combobox\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open,\n \"aria-required\": context.required,\n \"aria-autocomplete\": \"none\",\n dir: context.dir,\n \"data-state\": context.open ? \"open\" : \"closed\",\n disabled: isDisabled,\n \"data-disabled\": isDisabled ? \"\" : void 0,\n \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n ...triggerProps,\n ref: composedRefs,\n onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n event.currentTarget.focus();\n if (pointerTypeRef.current !== \"mouse\") {\n handleOpen(event);\n }\n }),\n onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n handleOpen(event);\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== \"\";\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === \" \") return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== void 0;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...valueProps,\n ref: composedRefs,\n style: { pointerEvents: \"none\" },\n children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children\n }\n );\n }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar SelectPortal = (props) => {\n return /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...props });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n (props, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n if (!context.open) {\n const frag = fragment;\n return frag ? ReactDOM.createPortal(\n /* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { children: props.children }) }) }),\n frag\n ) : null;\n }\n return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });\n }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar SelectContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n position = \"item-aligned\",\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n useFocusGuards();\n const focusFirst = React.useCallback(\n (candidates) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: \"nearest\" });\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n const handlePointerMove = (event) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n };\n };\n const handlePointerUp = (event) => {\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n if (!content.contains(event.target)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener(\"pointermove\", handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n }\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener(\"blur\", close);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"blur\", close);\n window.removeEventListener(\"resize\", close);\n };\n }, [onOpenChange]);\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n setTimeout(() => nextItem.ref.current.focus());\n }\n });\n const itemRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n const popperContentProps = SelectPosition === SelectPopperPosition ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions\n } : {};\n return /* @__PURE__ */ jsx(\n SelectContentProvider,\n {\n scope: __scopeSelect,\n content,\n viewport,\n onViewportChange: setViewport,\n itemRefCallback,\n selectedItem,\n onItemLeave: handleItemLeave,\n itemTextRefCallback,\n focusSelectedItem,\n selectedItemText,\n position,\n isPositioned,\n searchRef,\n children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: context.open,\n onMountAutoFocus: (event) => {\n event.preventDefault();\n },\n onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n }),\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: true,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n SelectPosition,\n {\n role: \"listbox\",\n id: context.contentId,\n \"data-state\": context.open ? \"open\" : \"closed\",\n dir: context.dir,\n onContextMenu: (event) => event.preventDefault(),\n ...contentProps,\n ...popperContentProps,\n onPlaced: () => setIsPositioned(true),\n ref: composedRefs,\n style: {\n // flex layout so we can place the scroll buttons properly\n display: \"flex\",\n flexDirection: \"column\",\n // reset the outline by default as the content MAY get focused\n outline: \"none\",\n ...contentProps.style\n },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current);\n if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n const currentElement = event.target;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n const triggerRect = context.trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n if (context.dir !== \"rtl\") {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [\n CONTENT_MARGIN,\n // Prevents the content from going off the starting edge of the\n // viewport. It may still go off the ending edge, but this can be\n // controlled by the user since they may want to manage overflow in a\n // specific way.\n // https://github.com/radix-ui/primitives/issues/2049\n Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.left = clampedLeft + \"px\";\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.right = clampedRight + \"px\";\n }\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n if (willAlignWithoutTopOverflow) {\n const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = \"0px\";\n const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + \"px\";\n } else {\n const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n contentWrapper.style.top = \"0px\";\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + \"px\";\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + \"px\";\n contentWrapper.style.maxHeight = availableHeight + \"px\";\n onPlaced?.();\n requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced\n ]);\n useLayoutEffect(() => position(), [position]);\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n const handleScrollButtonChange = React.useCallback(\n (node) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n return /* @__PURE__ */ jsx(\n SelectViewportProvider,\n {\n scope: __scopeSelect,\n contentWrapper,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n children: /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: setContentWrapper,\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"fixed\",\n zIndex: contentZIndex\n },\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...popperProps,\n ref: composedRefs,\n style: {\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: \"border-box\",\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: \"100%\",\n ...popperProps.style\n }\n }\n )\n }\n )\n }\n );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeSelect,\n align = \"start\",\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n return /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n ...popperScope,\n ...popperProps,\n ref: forwardedRef,\n align,\n collisionPadding,\n style: {\n // Ensure border-box for floating-ui calculations\n boxSizing: \"border-box\",\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-select-viewport\": \"\",\n role: \"presentation\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: \"relative\",\n flex: 1,\n // Viewport should only be scrollable in the vertical direction.\n // This won't work in vertical writing modes, so we'll need to\n // revisit this if/when that is supported\n // https://developer.chrome.com/blog/vertical-form-controls\n overflow: \"hidden auto\",\n ...viewportProps.style\n },\n onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n contentWrapper.style.height = clampedNextHeight + \"px\";\n if (contentWrapper.style.bottom === \"0px\") {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n contentWrapper.style.justifyContent = \"flex-end\";\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })\n }\n ) })\n ] });\n }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n const pointerTypeRef = React.useRef(\"touch\");\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n if (value === \"\") {\n throw new Error(\n \"A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n );\n }\n return /* @__PURE__ */ jsx(\n SelectItemContextProvider,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n }, []),\n children: /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textValue,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"option\",\n \"aria-labelledby\": textId,\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-selected\": isSelected && isFocused,\n \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n tabIndex: disabled ? void 0 : -1,\n ...itemProps,\n ref: composedRefs,\n onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n onClick: composeEventHandlers(itemProps.onClick, () => {\n if (pointerTypeRef.current !== \"mouse\") handleSelect();\n }),\n onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n if (pointerTypeRef.current === \"mouse\") handleSelect();\n }),\n onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n }),\n onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n pointerTypeRef.current = event.pointerType;\n if (disabled) {\n contentContext.onItemLeave?.();\n } else if (pointerTypeRef.current === \"mouse\") {\n event.currentTarget.focus({ preventScroll: true });\n }\n }),\n onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n }),\n onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== \"\";\n if (isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n if (event.key === \" \") event.preventDefault();\n })\n }\n )\n }\n )\n }\n );\n }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n [itemContext.disabled, itemContext.value, textContent]\n );\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n ] });\n }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const canScrollUp2 = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollUp ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollDown ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n }, [getItems]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-hidden\": true,\n ...scrollIndicatorProps,\n ref: forwardedRef,\n style: { flexShrink: 0, ...scrollIndicatorProps.style },\n onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })\n }\n );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n }\n);\nSelectArrow.displayName = ARROW_NAME;\nfunction shouldShowPlaceholder(value) {\n return value === \"\" || value === void 0;\n}\nvar BubbleSelect = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...selectProps } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const select = ref.current;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n \"value\"\n );\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"change\", { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(VisuallyHidden, { asChild: true, children: /* @__PURE__ */ jsx(\"select\", { ...selectProps, ref: composedRefs, defaultValue: value }) });\n }\n);\nBubbleSelect.displayName = \"BubbleSelect\";\nfunction useTypeaheadSearch(onSearchChange) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef(\"\");\n const timerRef = React.useRef(0);\n const handleTypeaheadSearch = React.useCallback(\n (key) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n },\n [handleSearchChange]\n );\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = \"\";\n window.clearTimeout(timerRef.current);\n }, []);\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find(\n (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root2 = Select;\nvar Trigger = SelectTrigger;\nvar Value = SelectValue;\nvar Icon = SelectIcon;\nvar Portal = SelectPortal;\nvar Content2 = SelectContent;\nvar Viewport = SelectViewport;\nvar Group = SelectGroup;\nvar Label = SelectLabel;\nvar Item = SelectItem;\nvar ItemText = SelectItemText;\nvar ItemIndicator = SelectItemIndicator;\nvar ScrollUpButton = SelectScrollUpButton;\nvar ScrollDownButton = SelectScrollDownButton;\nvar Separator = SelectSeparator;\nvar Arrow2 = SelectArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Group,\n Icon,\n Item,\n ItemIndicator,\n ItemText,\n Label,\n Portal,\n Root2 as Root,\n ScrollDownButton,\n ScrollUpButton,\n Select,\n SelectArrow,\n SelectContent,\n SelectGroup,\n SelectIcon,\n SelectItem,\n SelectItemIndicator,\n SelectItemText,\n SelectLabel,\n SelectPortal,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n Separator,\n Trigger,\n Value,\n Viewport,\n createSelectScope\n};\n//# sourceMappingURL=index.mjs.map\n","// eslint-disable-next-line simple-import-sort/imports\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"src/lib/utils\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"cteditor-flex cteditor-gap-1 cteditor-h-9 cteditor-w-full cteditor-items-center cteditor-justify-between cteditor-whitespace-nowrap cteditor-rounded-sm cteditor-border cteditor-border-input cteditor-bg-transparent cteditor-px-3 cteditor-py-2 cteditor-text-sm cteditor-shadow-sm cteditor-ring-offset-background data-[placeholder]:cteditor-text-muted-foreground focus:cteditor-outline-none focus:cteditor-ring-0 focus:cteditor-ring-ring disabled:cteditor-cursor-not-allowed disabled:cteditor-opacity-50 [&>span]:cteditor-line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"cteditor-h-4 cteditor-w-4 cteditor-shrink-0 cteditor-opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"cteditor-flex cteditor-cursor-pointer cteditor-items-center cteditor-justify-center cteditor-py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"cteditor-h-4 cteditor-w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"cteditor-flex cteditor-cursor-pointer cteditor-items-center cteditor-justify-center cteditor-py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"cteditor-h-4 cteditor-w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"cteditor-relative cteditor-z-[9999] cteditor-max-h-[--radix-select-content-available-height] cteditor-min-w-[8rem] cteditor-overflow-y-auto cteditor-overflow-x-hidden cteditor-rounded-md cteditor-border cteditor-bg-popover cteditor-text-popover-foreground cteditor-shadow-md data-[state=open]:cteditor-animate-in data-[state=closed]:cteditor-animate-out data-[state=closed]:cteditor-fade-out-0 data-[state=open]:cteditor-fade-in-0 data-[state=closed]:cteditor-zoom-out-95 data-[state=open]:cteditor-zoom-in-95 data-[side=bottom]:cteditor-slide-in-from-top-2 data-[side=left]:cteditor-slide-in-from-right-2 data-[side=right]:cteditor-slide-in-from-left-2 data-[side=top]:cteditor-slide-in-from-bottom-2 cteditor-origin-[--radix-select-content-transform-origin]\",\n position === \"popper\" &&\n \"data-[side=bottom]:cteditor-translate-y-1 data-[side=left]:-cteditor-translate-x-1 data-[side=right]:cteditor-translate-x-1 data-[side=top]:-cteditor-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"cteditor-p-1\",\n position === \"popper\" &&\n \"cteditor-h-[var(--radix-select-trigger-height)] cteditor-w-full cteditor-min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"cteditor-px-2 cteditor-py-1.5 cteditor-text-sm cteditor-font-semibold\",\n className\n )}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"cteditor-relative cteditor-flex cteditor-w-full cteditor-cursor-pointer cteditor-select-none cteditor-items-center cteditor-rounded-sm cteditor-py-1.5 cteditor-pl-2 cteditor-pr-8 cteditor-text-[13px] cteditor-outline-none focus:cteditor-bg-secondary focus:cteditor-text-accent-foreground data-[disabled]:cteditor-pointer-events-none data-[disabled]:cteditor-opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"cteditor-absolute cteditor-right-2 cteditor-flex cteditor-h-3.5 cteditor-w-3.5 cteditor-items-center cteditor-justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"cteditor-h-4 cteditor-w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\n \"cteditor--mx-1 cteditor-my-1 cteditor-h-px cteditor-bg-muted\",\n className\n )}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { $patchStyleText } from \"@lexical/selection\";\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n LexicalEditor,\n} from \"lexical\";\nimport React, { FC, useEffect, useState } from \"react\";\n\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\n\nconst DEFAULT_FONTS = [\n \"Arial\",\n \"Courier New\",\n \"Georgia\",\n \"Times New Roman\",\n \"Verdana\",\n \"Comic Sans MS\",\n \"Tahoma\",\n \"Impact\",\n];\n\ninterface FontFamilyMenuProps {\n fonts?: string[]; // Optional: List of fonts to use\n activeEditor: LexicalEditor;\n}\n\nconst FontFamilyMenu: FC<FontFamilyMenuProps> = ({\n fonts = DEFAULT_FONTS,\n activeEditor,\n}) => {\n const [selectedFont, setSelectedFont] = useState<string>(\"Arial\");\n\n // Detect currently selected font\n useEffect(() => {\n return activeEditor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n if ($isTextNode(anchorNode)) {\n const fontFamily = anchorNode\n .getStyle()\n .match(/font-family:\\s*([^;]+)/)?.[1];\n if (fontFamily) {\n setSelectedFont(fontFamily);\n }\n }\n }\n });\n });\n }, [activeEditor]);\n\n const applyFontFamily = (fontFamily: string) => {\n activeEditor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $patchStyleText(selection, { \"font-family\": fontFamily });\n }\n });\n };\n\n const handleFontChange = (value: string) => {\n setSelectedFont(value);\n applyFontFamily(value);\n };\n\n return (\n <>\n {/* <Select\n value={selectedFont}\n onChange={handleFontChange}\n size=\"small\"\n displayEmpty\n className=\"fontFamily\"\n >\n {fonts.map((font) => (\n <MenuItem key={font} value={font} style={{ fontFamily: font }}>\n {font}\n </MenuItem>\n ))}\n </Select> */}\n <Select value={selectedFont} onValueChange={handleFontChange}>\n <SelectTrigger className=\"!cteditor-h-7 !cteditor-bg-secondary cteditor-text-foreground !cteditor-w-[120px] cteditor-text-xs\">\n <SelectValue placeholder=\"Select font\" />\n </SelectTrigger>\n <SelectContent>\n {fonts.map((font) => (\n <SelectItem key={font} value={font} style={{ fontFamily: font }}>\n {font}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </>\n );\n};\n\nexport default FontFamilyMenu;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $patchStyleText } from \"@lexical/selection\";\nimport { $getSelection, $isRangeSelection, $isTextNode } from \"lexical\";\nimport { Minus, Plus } from \"lucide-react\";\nimport React, { FC, useCallback, useEffect, useState } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../ui/tooltip\";\n\nconst MIN_FONT_SIZE = 8;\nconst MAX_FONT_SIZE = 72;\nconst STEP_SIZE = 2;\n\nconst FontSizeControl: FC = () => {\n const [editor] = useLexicalComposerContext();\n const [fontSize, setFontSize] = useState<number>(16);\n const [inputValue, setInputValue] = useState<string>(\"16\");\n\n // Detect current font size of selected text\n useEffect(() => {\n return editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection) && !selection.isCollapsed()) {\n const anchorNode = selection.anchor.getNode();\n if ($isTextNode(anchorNode)) {\n const detectedSize = anchorNode\n .getStyle()\n .match(/font-size:\\s*(\\d+)/)?.[1];\n if (detectedSize) {\n const size = parseInt(detectedSize, 10);\n setFontSize(size);\n setInputValue(size.toString());\n }\n }\n }\n });\n });\n }, [editor]);\n\n const applyFontSize = useCallback(\n (size: number) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $patchStyleText(selection, { \"font-size\": `${size}px` });\n }\n });\n setFontSize(size);\n setInputValue(size.toString());\n },\n [editor]\n );\n\n // Apply font size whenever fontSize changes\n useEffect(() => {\n applyFontSize(fontSize);\n }, [fontSize, applyFontSize]);\n\n const handleFontSizeChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value.replace(/\\D/g, \"\");\n setInputValue(value);\n if (value !== \"\") {\n const newSize = Math.max(\n MIN_FONT_SIZE,\n Math.min(Number(value), MAX_FONT_SIZE)\n );\n setFontSize(newSize);\n }\n };\n\n const handleFontSizeBlur = () => {\n if (inputValue === \"\" || isNaN(Number(inputValue))) {\n setInputValue(fontSize.toString());\n } else {\n const newSize = Math.max(\n MIN_FONT_SIZE,\n Math.min(Number(inputValue), MAX_FONT_SIZE)\n );\n setFontSize(newSize);\n }\n };\n\n const increaseFontSize = () => {\n const newSize = Math.min(fontSize + STEP_SIZE, MAX_FONT_SIZE);\n setFontSize(newSize);\n };\n\n const decreaseFontSize = () => {\n const newSize = Math.max(fontSize - STEP_SIZE, MIN_FONT_SIZE);\n setFontSize(newSize);\n };\n\n return (\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-1\">\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={decreaseFontSize}\n className=\"cteditor-text-foreground/50\"\n >\n <Minus className=\"!cteditor-size-[18px]\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Decrease Font Size</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <Input\n className=\"!cteditor-w-9 !cteditor-h-6 !cteditor-p-0 !cteditor-text-center !cteditor-bg-secondary\"\n value={inputValue}\n onChange={handleFontSizeChange}\n onBlur={handleFontSizeBlur}\n />\n\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={increaseFontSize}\n className=\"cteditor-text-foreground/50\"\n >\n <Plus className=\"!cteditor-size-[18px]\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Increase Font Size</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n );\n};\n\nexport default FontSizeControl;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_TEXT_COMMAND } from \"lexical\";\nimport { ChevronDown } from \"lucide-react\";\nimport React, { FC } from \"react\";\nimport { cn } from \"src/lib/utils\";\n\nimport { formatMenuItems } from \"../../constants\";\nimport { FormatTextMenuProps } from \"../../types\";\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\n\nconst FormatTextMenu: FC<FormatTextMenuProps> = ({ hasFormat }) => {\n const [editor] = useLexicalComposerContext();\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"cteditor-text-foreground/50\"\n >\n <ChevronDown className=\"!cteditor-size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {formatMenuItems.map((option, index) => (\n <DropdownMenuItem\n key={index}\n className={cn(\n hasFormat[option.payload] && \"cteditor-bg-background/50\"\n )}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, option.payload);\n }}\n >\n <span className=\"\">{option.icon}</span>\n <span>{option.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default FormatTextMenu;\n","import { Highlighter, X } from \"lucide-react\";\nimport React, { FC, useState } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../ui/tooltip\";\n\nconst HIGHLIGHT_COLORS = [\n { color: \"#ffeb3b\", label: \"Yellow\" },\n { color: \"#a5d6a7\", label: \"Green\" },\n { color: \"#90caf9\", label: \"Blue\" },\n { color: \"#f48fb1\", label: \"Pink\" },\n { color: \"#ce93d8\", label: \"Purple\" },\n { color: \"#ffcc80\", label: \"Orange\" },\n { color: \"#b2dfdb\", label: \"Teal\" },\n { color: \"#ff8a80\", label: \"Red\" },\n { color: \"#fff59d\", label: \"Light Yellow\" },\n { color: \"#aed581\", label: \"Light Green\" },\n { color: \"#81d4fa\", label: \"Light Blue\" },\n { color: \"#f8bbd0\", label: \"Light Pink\" },\n { color: \"#d1c4e9\", label: \"Light Purple\" },\n { color: \"#ffab40\", label: \"Deep Orange\" },\n { color: \"#8d6e63\", label: \"Brown\" },\n { color: \"#90a4ae\", label: \"Gray\" },\n];\n\n\ninterface HighlightColorPickerProps {\n onChange: (color: string | null) => void;\n isActive?: boolean;\n}\n\nconst HighlightColorPicker: FC<HighlightColorPickerProps> = ({\n onChange,\n isActive = false,\n}) => {\n const [open, setOpen] = useState(false);\n\n return (\n <Popover open={open} onOpenChange={setOpen} modal={false}>\n <PopoverTrigger asChild>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className={`${isActive ? \"cteditor-bg-foreground/20\" : \"\"}`}\n >\n <Highlighter className=\"!cteditor-size-4\" />\n </Button>\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent>Highlight color</TooltipContent>\n </Tooltip>\n\n </TooltipProvider>\n </PopoverTrigger>\n <PopoverContent\n className=\"cteditor-w-auto cteditor-p-2 cteditor-border-none !cteditor-z-[99999]\"\n sideOffset={5}\n id=\"highlight-color-picker\"\n onInteractOutside={(e) => {\n e.preventDefault(); // Always prevent closing\n }}\n >\n <div className=\"cteditor-grid cteditor-grid-cols-3 cteditor-gap-2\">\n {HIGHLIGHT_COLORS.map(({ color, label }) => (\n <button\n key={color}\n className=\"cteditor-w-8 cteditor-h-8 cteditor-rounded cteditor-border cteditor-border-gray-200 hover:cteditor-scale-110 cteditor-transition-transform\"\n style={{ backgroundColor: color }}\n onClick={() => {\n onChange(color);\n // Don't close popover to allow multiple selections\n }}\n title={label}\n />\n ))}\n <button\n className=\"cteditor-w-8 cteditor-h-8 cteditor-rounded cteditor-border cteditor-border-gray-200 hover:cteditor-scale-110 cteditor-transition-transform cteditor-flex cteditor-items-center cteditor-justify-center cteditor-bg-white\"\n onClick={() => {\n onChange(null);\n // Don't close popover to allow multiple selections\n }}\n title=\"Remove highlight\"\n >\n <X className=\"!cteditor-size-4 cteditor-text-gray-500\" />\n </button>\n </div>\n </PopoverContent>\n </Popover>\n );\n};\n\nexport default HighlightColorPicker;\n","import { $createLinkNode } from \"@lexical/link\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $createParagraphNode,\n $createTextNode,\n $getRoot,\n $getSelection,\n $isRangeSelection,\n createCommand,\n LexicalCommand,\n} from \"lexical\";\nimport { useEffect } from \"react\";\nimport { $createEmbedNode } from \"src/nodes/EmbedNode\";\n\n// Command for inserting files as links\nexport const INSERT_FILE_COMMAND: LexicalCommand<{\n src: string;\n linkText: string;\n}> = createCommand();\n\nconst FilePlugin: React.FC = () => {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return editor.registerCommand(\n INSERT_FILE_COMMAND,\n ({ src, linkText }) => {\n console.log(\"Received INSERT_FILE_COMMAND with:\", { src, linkText });\n\n editor.update(() => {\n editor.focus(); // Ensure editor has focus before getting selection\n const selection = $getSelection();\n console.log(\"Current Selection after focus:\", selection);\n\n // Check if the uploaded file is a media, image, or document type that should be embedded\n const isPreviewable = src.match(\n /\\.(mp4|webm|ogg|pdf|docx?|xlsx?|pptx?|zip|rar|txt|csv|json|png|jpe?g|gif|webp|svg)$/i\n );\n\n if (isPreviewable) {\n console.log(\"Embedding file preview using EmbedNode.\");\n if ($isRangeSelection(selection)) {\n selection.insertNodes([$createEmbedNode(src)]);\n } else {\n console.warn(\n \"No valid range selection found. Creating a new paragraph.\"\n );\n const paragraphNode = $createParagraphNode();\n paragraphNode.append($createEmbedNode(src));\n const root = editor.getEditorState().read(() => $getRoot());\n root.append(paragraphNode);\n }\n } else {\n console.log(\"Inserting file as a simple link.\");\n const linkNode = $createLinkNode(src);\n linkNode.setURL(src);\n linkNode.append($createTextNode(linkText || \"Download File\"));\n\n if ($isRangeSelection(selection)) {\n selection.insertNodes([linkNode]);\n } else {\n console.warn(\n \"No valid range selection found. Creating a new paragraph.\"\n );\n const paragraphNode = $createParagraphNode();\n paragraphNode.append(linkNode);\n const root = editor.getEditorState().read(() => $getRoot());\n root.append(paragraphNode);\n }\n }\n });\n\n return true;\n },\n 0\n );\n }, [editor]);\n\n // 🔹 Global Event Listener to Ensure Links Open in a New Tab 🔹\n useEffect(() => {\n const handleLinkClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n // Find the closest `<a>` tag inside the editor\n const linkElement = target.closest(\"a\");\n if (linkElement) {\n const href = linkElement.getAttribute(\"href\");\n if (href) {\n event.preventDefault(); // Prevent Lexical from blocking the default behavior\n window.open(href, \"_blank\"); // Open link in a new tab\n }\n }\n };\n\n // Attach event listener to document\n document.addEventListener(\"click\", handleLinkClick);\n\n return () => {\n document.removeEventListener(\"click\", handleLinkClick);\n };\n }, []);\n\n return null;\n};\n\nexport default FilePlugin;\n","import { useCallback, useState } from \"react\";\nimport { backendAPI } from \"src/api/config/axios\";\nimport { apiEndpoints } from \"src/api/config/endpoints\";\n\ninterface UploadProgress {\n progress: number;\n uploading: boolean;\n uploadedUrl: string | null;\n error: Error | null;\n}\n\nexport const useS3Uploader = (): UploadProgress & {\n uploadFileToS3: (file: File) => Promise<string>;\n resetUpload: () => void;\n} => {\n const [uploadState, setUploadState] = useState<UploadProgress>({\n progress: 0,\n uploading: false,\n uploadedUrl: null,\n error: null,\n });\n\n const uploadFileToS3 = useCallback(async (file: File): Promise<string> => {\n const formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"fileName\", file.name);\n formData.append(\"fileType\", file.type);\n formData.append(\"prefix\", \"uploads\"); // Replace with your desired prefix\n\n try {\n setUploadState({\n progress: 0,\n uploading: true,\n uploadedUrl: null,\n error: null,\n });\n\n const response = await backendAPI.post(\n apiEndpoints.project.fileUpload,\n formData,\n {\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n },\n onUploadProgress: (progressEvent) => {\n if (progressEvent.total) {\n setUploadState((prev) => ({\n ...prev,\n progress: Math.round(\n (progressEvent.loaded / (progressEvent.total ?? 0)) * 100\n ),\n }));\n }\n },\n }\n );\n\n const uploadedUrl = response.data.fileUrl;\n\n setUploadState((prev) => ({\n ...prev,\n uploading: false,\n uploadedUrl,\n }));\n\n return uploadedUrl;\n } catch (error) {\n setUploadState((prev) => ({\n ...prev,\n uploading: false,\n error: error instanceof Error ? error : new Error(\"Upload failed\"),\n }));\n throw error;\n }\n }, []);\n\n const resetUpload = useCallback(() => {\n setUploadState({\n progress: 0,\n uploading: false,\n uploadedUrl: null,\n error: null,\n });\n }, []);\n\n return { ...uploadState, uploadFileToS3, resetUpload };\n};\n","import { ChangeEvent, useState } from \"react\";\nimport { useS3Uploader } from \"src/hooks/useS3Uploader\";\nimport { InsertFilePayload } from \"src/types\";\n\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\n\nconst MAX_FILE_SIZE_MB = 20; // 20MB limit\n\n// Allowed MIME types for document uploads\nconst ALLOWED_MIME_TYPES: string[] = [\n \"application/pdf\",\n \"text/plain\",\n \"text/csv\",\n \"application/json\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n];\n\nconst InsertFileUploadedDialogBody: React.FC<{\n onClick: (payload: InsertFilePayload) => void;\n}> = ({ onClick }) => {\n const [linkText, setLinkText] = useState<string>(\"\");\n const { uploadFileToS3, uploadedUrl: _uploadedUrl, progress, uploading, error } =\n useS3Uploader();\n const [fileToUpload, setFileToUpload] = useState<File | null>(null);\n const [fileError, setFileError] = useState<string | null>(null);\n\n const onChangeFile = async (event: ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (!files || files.length === 0) return;\n const file = files[0];\n // Validate MIME type\n if (!ALLOWED_MIME_TYPES.includes(file.type)) {\n setFileError(\n \"Invalid file type. Only PDF, TXT, CSV, JSON, DOC, DOCX, XLS, XLSX, PPT, PPTX are allowed.\"\n );\n setFileToUpload(null);\n // Reset the input so user can reselect\n event.target.value = \"\";\n return;\n }\n // Check file size limit\n if (file.size > MAX_FILE_SIZE_MB * 1024 * 1024) {\n setFileError(`File size exceeds ${MAX_FILE_SIZE_MB}MB limit.`);\n setFileToUpload(null);\n return;\n }\n setFileError(null);\n setFileToUpload(file);\n };\n\n const handleConfirmUpload = async () => {\n if (!fileToUpload || uploading) return;\n try {\n const url = await uploadFileToS3(fileToUpload);\n if (!url) return;\n console.log(\"Dispatching command with URL:\", url, \"Link text:\", linkText);\n onClick({ linkText: linkText || url, src: url });\n setFileToUpload(null);\n setLinkText(\"\");\n } catch (uploadError) {\n console.error(\"Upload failed:\", uploadError);\n }\n };\n\n return (\n <>\n <div>\n <Input\n type=\"file\"\n className=\"cteditor-w-full\"\n accept={ALLOWED_MIME_TYPES.join(\",\")}\n onChange={onChangeFile}\n />\n </div>\n\n <div className=\"cteditor-mt-2 cteditor-mb-2\">\n {fileError && (\n <p className=\"cteditor-text-sm cteditor-text-destructive\">\n {fileError}\n </p>\n )}\n {error && (\n <p className=\"cteditor-text-sm cteditor-text-destructive\">\n Error: {error.message}\n </p>\n )}\n </div>\n\n <Button\n disabled={!fileToUpload || uploading}\n onClick={handleConfirmUpload}\n className=\"cteditor-mt-2\"\n >\n {uploading ? `Uploading... ${progress}%` : \"Confirm Upload\"}\n </Button>\n </>\n );\n};\n\nexport default InsertFileUploadedDialogBody;\n","import { INSERT_FILE_COMMAND } from \"src/plugins/FilePlugin\";\nimport { InsertFilePayload } from \"src/types\";\n\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../ui/dialog\";\nimport InsertFileUploadedDialogBody from \"./InsertFileUploadedDialogBody\";\n\ninterface InsertFileDialogProps {\n activeEditor: any;\n onClose: () => void;\n}\n\nconst InsertFileDialog: React.FC<InsertFileDialogProps> = ({\n activeEditor,\n onClose,\n}) => {\n const onClick = (payload: InsertFilePayload) => {\n activeEditor.dispatchCommand(INSERT_FILE_COMMAND, payload);\n onClose();\n };\n\n return (\n <Dialog open={true} onOpenChange={(open: unknown) => !open && onClose()}>\n <DialogContent className=\"sm:cteditor-max-w-md\">\n <DialogHeader>\n <DialogTitle>Insert File</DialogTitle>\n </DialogHeader>\n <div className=\"cteditor-py-2\">\n <InsertFileUploadedDialogBody onClick={onClick} />\n </div>\n <DialogFooter>\n <Button onClick={onClose}>Cancel</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default InsertFileDialog;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $wrapNodeInElement, mergeRegister } from \"@lexical/utils\";\nimport {\n $createParagraphNode,\n $insertNodes,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n LexicalCommand,\n} from \"lexical\";\nimport { FC, useEffect } from \"react\";\nimport { $createImageNode, ImageNode } from \"src/nodes/ImageNode\";\nimport { InsertImagePayload } from \"src/types\";\n\ninterface ImagePluginProps {\n captionsEnabled?: boolean;\n}\nexport const INSERT_IMAGE_COMMAND: LexicalCommand<InsertImagePayload> =\n createCommand(\"INSERT_IMAGE_COMMAND\");\n\nconst ImagePlugin: FC<ImagePluginProps> = ({\n captionsEnabled,\n}): JSX.Element | null => {\n const [editor] = useLexicalComposerContext();\n useEffect(() => {\n if (!editor.hasNodes([ImageNode])) {\n throw new Error(\"ImagesPlugin: ImageNode not registered on editor\");\n }\n\n return mergeRegister(\n editor.registerCommand<InsertImagePayload>(\n INSERT_IMAGE_COMMAND,\n (payload) => {\n const imageNode = $createImageNode(payload);\n $insertNodes([imageNode]);\n if ($isRootOrShadowRoot(imageNode.getParentOrThrow())) {\n $wrapNodeInElement(imageNode, $createParagraphNode).selectEnd();\n }\n\n return true;\n },\n COMMAND_PRIORITY_EDITOR\n )\n );\n }, [captionsEnabled, editor]);\n\n return null;\n};\n\nexport default ImagePlugin;\n","import { useState } from \"react\";\nimport { Button } from \"src/components/ui/button\";\nimport { Input } from \"src/components/ui/input\";\nimport { Label } from \"src/components/ui/label\";\nimport { useS3Uploader } from \"src/hooks/useS3Uploader\";\nimport { InsertImagePayload } from \"src/types\";\n\ntype insertImageType = \"test\" | \"s3\";\n\nconst InsertImageUploadedDialogBody = ({\n onClick,\n}: {\n onClick: (payload: InsertImagePayload) => void;\n}) => {\n const [altText, setAltText] = useState(\"\");\n const { uploadFileToS3, uploadedUrl, progress, uploading } = useS3Uploader();\n const [tempSrc, setTempSrc] = useState(\"\"); // for preview\n const [fileToUpload, setFileToUpload] = useState<File | null>(null);\n const type = \"test\" as insertImageType;\n\n const onChangeImage = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (!files || files.length === 0) return;\n const file = files[0];\n setFileToUpload(file); // Store file for later upload\n // Show preview\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n setTempSrc(reader.result);\n }\n };\n reader.readAsDataURL(file);\n };\n\n const handleConfirmUpload = async () => {\n if (!fileToUpload || uploading) return;\n try {\n const uploadedUrl = await uploadFileToS3(fileToUpload);\n onClick({ altText, src: uploadedUrl });\n setTempSrc(\"\");\n setFileToUpload(null);\n } catch (error) {\n console.error(\"Upload failed:\", error);\n //TODO: Show error message\n }\n };\n\n return (\n <div className=\"cteditor-space-y-4\">\n {/* Image Preview */}\n {tempSrc && (\n <div className=\"cteditor-mb-4\">\n <img\n src={tempSrc}\n alt=\"Preview\"\n className=\"cteditor-max-w-full cteditor-max-h-[200px] cteditor-object-contain\"\n />\n </div>\n )}\n\n {/* File Upload */}\n <div className=\"fileUploadBox cteditor-flex cteditor-items-center cteditor-justify-center cteditor-border-2 cteditor-border-dashed cteditor-border-gray-300 cteditor-p-4 cteditor-rounded-lg\">\n <div className=\"fubIcon cteditor-mr-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" x2=\"12\" y1=\"3\" y2=\"15\" />\n </svg>\n </div>\n <div className=\"flex-grow\">\n <Label htmlFor=\"image-upload\" className=\"!cteditor-sr-only\">\n Upload Image\n </Label>\n <Input\n id=\"image-upload\"\n type=\"file\"\n accept=\"image/*\"\n onChange={onChangeImage}\n data-test-id=\"image-modal-file-upload\"\n className=\"cteditor-w-full\"\n />\n </div>\n </div>\n\n {/* Alt Text Input */}\n <div>\n <Label htmlFor=\"alt-text\" className=\"cteditor-mb-2 cteditor-block\">\n Alt Text\n </Label>\n <Input\n id=\"alt-text\"\n placeholder=\"Descriptive alternative text\"\n value={altText}\n onChange={(e) => setAltText(e.target.value)}\n data-test-id=\"image-modal-alt-text-input\"\n className=\"cteditor-w-full\"\n />\n </div>\n\n {/* Upload Button */}\n <Button\n disabled={!fileToUpload || uploading}\n onClick={handleConfirmUpload}\n data-test-id=\"image-modal-file-upload-btn\"\n className=\"cteditor-w-full\"\n >\n {uploading ? `Uploading... ${progress}%` : \"Confirm Upload\"}\n </Button>\n </div>\n );\n};\n\nconst InsertImageUrlDialogBody = ({\n onClick,\n}: {\n onClick: (payload: InsertImagePayload) => void;\n}) => {\n const [imageUrl, setImageUrl] = useState(\"\");\n const [altText, setAltText] = useState(\"\");\n const [isValidUrl, setIsValidUrl] = useState(false);\n const [previewError, setPreviewError] = useState<string | null>(null);\n\n const validateUrl = (url: string) => {\n if (!url.trim()) return false;\n\n try {\n const urlObj = new URL(url);\n\n // Allow data URLs for images\n if (url.startsWith(\"data:image/\")) {\n return true;\n }\n\n // Allow HTTP/HTTPS protocols\n if (![\"http:\", \"https:\"].includes(urlObj.protocol)) {\n return false;\n }\n\n // Check if it's an image URL (improved check)\n const pathname = urlObj.pathname.toLowerCase();\n const hasImageExtension =\n /\\.(jpg|jpeg|png|gif|bmp|webp|svg|avif|tiff|ico)$/i.test(pathname);\n const hasImageInPath = /\\/(image|img|photo|picture)/i.test(pathname);\n const hasImageInQuery =\n /\\.(jpg|jpeg|png|gif|bmp|webp|svg|avif|tiff|ico)/i.test(urlObj.search);\n\n // Be more lenient - allow URLs that might be images\n return (\n hasImageExtension ||\n hasImageInPath ||\n hasImageInQuery ||\n pathname === \"\" || // Allow URLs without specific paths\n urlObj.hostname.includes(\"image\") ||\n urlObj.hostname.includes(\"img\") ||\n urlObj.hostname.includes(\"photo\") ||\n urlObj.hostname.includes(\"cdn\")\n );\n } catch {\n return false;\n }\n };\n\n const handleUrlChange = (url: string) => {\n setImageUrl(url);\n setPreviewError(null);\n\n if (!url.trim()) {\n setIsValidUrl(false);\n return;\n }\n\n const isValid = validateUrl(url);\n setIsValidUrl(isValid);\n\n // If URL is valid, try to load the image preview\n if (isValid) {\n const img = new Image();\n img.onload = () => {\n setPreviewError(null);\n setIsValidUrl(true);\n };\n img.onerror = () => {\n setPreviewError(\n \"Failed to load image preview. The image URL may be invalid or inaccessible. You can still try to insert it.\"\n );\n // Don't set isValidUrl to false if it passed URL validation\n // This allows users to insert images that may be accessible in the editor but not for preview\n };\n img.src = url;\n }\n };\n\n const handleConfirmUrl = () => {\n if (!imageUrl || !isValidUrl) return;\n onClick({ altText, src: imageUrl });\n };\n\n return (\n <div className=\"cteditor-space-y-4\">\n {/* Image Preview */}\n {imageUrl && isValidUrl && !previewError && (\n <div className=\"cteditor-mb-4\">\n <img\n src={imageUrl}\n alt=\"Preview\"\n className=\"cteditor-max-w-full cteditor-max-h-[200px] cteditor-object-contain\"\n onError={() => {\n setPreviewError(\n \"Failed to load image preview. The image URL may be invalid or inaccessible.\"\n );\n setIsValidUrl(false);\n }}\n />\n </div>\n )}\n\n {/* Error Message */}\n {previewError && (\n <div className=\"cteditor-mb-4 cteditor-p-2 cteditor-bg-red-50 cteditor-border cteditor-border-red-200 rcteditor-ounded cteditor-text-red-600 cteditor-text-sm\">\n {previewError}\n </div>\n )}\n\n {/* URL Input */}\n <div>\n <Label htmlFor=\"image-url\" className=\"cteditor-mb-2 cteditor-block\">\n Image URL\n </Label>\n <Input\n id=\"image-url\"\n type=\"url\"\n placeholder=\"https://example.com/image.jpg\"\n value={imageUrl}\n onChange={(e) => handleUrlChange(e.target.value)}\n data-test-id=\"image-modal-url-input\"\n className=\"!cteditor-w-full\"\n />\n {imageUrl && !isValidUrl && !previewError && (\n <p className=\"cteditor-text-sm cteditor-text-red-500 cteditor-mt-1\">\n Please enter a valid image URL\n </p>\n )}\n </div>\n\n {/* Alt Text Input */}\n <div>\n <Label\n htmlFor=\"alt-text-url\"\n className=\"!cteditor-mb-2 !cteditor-block\"\n >\n Alt Text\n </Label>\n <Input\n id=\"alt-text-url\"\n placeholder=\"Descriptive alternative text\"\n value={altText}\n onChange={(e) => setAltText(e.target.value)}\n data-test-id=\"image-modal-url-alt-text-input\"\n className=\"!cteditor-w-full\"\n />\n </div>\n\n {/* Insert Button */}\n <Button\n disabled={!imageUrl || !isValidUrl}\n onClick={handleConfirmUrl}\n data-test-id=\"image-modal-url-insert-btn\"\n className=\"!cteditor-w-full\"\n >\n Insert Image\n </Button>\n </div>\n );\n};\n\nexport default InsertImageUploadedDialogBody;\nexport { InsertImageUrlDialogBody };\n","import { LexicalEditor } from \"lexical\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"src/components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"src/components/ui/dialog\";\nimport { INSERT_IMAGE_COMMAND } from \"src/plugins/ImagePlugin\";\nimport { InsertImagePayload } from \"src/types\";\nimport { LinkIcon, UploadIcon } from \"src/ui/Icons\";\n\nimport InsertImageUploadedDialogBody, {\n InsertImageUrlDialogBody,\n} from \"./ImageUploadDialogBody\";\n\nconst InsertImageDialog: React.FC<{\n activeEditor: LexicalEditor;\n onClose: () => void;\n}> = ({ activeEditor, onClose }) => {\n const [mode, setMode] = useState<null | \"url\" | \"file\">(null);\n const hasModifier = useRef(false);\n\n console.log(\"InsertImageDialog rendered, mode:\", mode);\n\n useEffect(() => {\n hasModifier.current = false;\n const handler = (e: KeyboardEvent) => {\n hasModifier.current = e.altKey;\n };\n document.addEventListener(\"keydown\", handler);\n return () => {\n document.removeEventListener(\"keydown\", handler);\n };\n }, [activeEditor]);\n\n const onClick = (payload: InsertImagePayload) => {\n console.log(\"Dispatching INSERT_IMAGE_COMMAND with payload:\", payload);\n // dispatch the command for uploading the image\n // event is listening and add img\n activeEditor.dispatchCommand(INSERT_IMAGE_COMMAND, payload);\n console.log(\"Image command dispatched, closing dialog\");\n onClose();\n };\n\n return (\n <Dialog open={true} onOpenChange={onClose}>\n <DialogContent className=\"cteditor-w-full sm:cteditor-max-w-md\">\n <DialogHeader>\n <DialogTitle>Insert Image</DialogTitle>\n </DialogHeader>\n\n {!mode ? (\n <div className=\"cteditor-flex cteditor-flex-col cteditor-gap-4 cteditor-mt-3\">\n <Button\n variant=\"outline\"\n className=\"cteditor-w-full\"\n onClick={() => setMode(\"url\")}\n >\n <LinkIcon />\n Insert via URL\n </Button>\n\n <Button\n variant=\"outline\"\n className=\"cteditor-w-full\"\n onClick={() => setMode(\"file\")}\n >\n <UploadIcon />\n Upload File\n </Button>\n </div>\n ) : mode === \"file\" ? (\n <InsertImageUploadedDialogBody onClick={onClick} />\n ) : (\n <InsertImageUrlDialogBody onClick={onClick} />\n )}\n\n <DialogFooter>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default InsertImageDialog;\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as 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}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n })();\n}\nexport { _isNativeReflectConstruct as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n var r = isNativeReflectConstruct();\n return function () {\n var e,\n o = getPrototypeOf(t);\n if (r) {\n var s = getPrototypeOf(this).constructor;\n e = Reflect.construct(o, arguments, s);\n } else e = o.apply(this, arguments);\n return possibleConstructorReturn(this, e);\n };\n}\nexport { _createSuper as default };","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/*!\n * Signature Pad v2.3.2\n * https://github.com/szimek/signature_pad\n *\n * Copyright 2017 Szymon Nowak\n * Released under the MIT license\n *\n * The main idea and some parts of the code (e.g. drawing variable width Bézier curve) are taken from:\n * http://corner.squareup.com/2012/07/smoother-signatures.html\n *\n * Implementation of interpolation using cubic Bézier curves is taken from:\n * http://benknowscode.wordpress.com/2012/09/14/path-interpolation-using-cubic-bezier-and-control-point-estimation-in-javascript\n *\n * Algorithm for approximated length of a Bézier curve is taken from:\n * http://www.lemoda.net/maths/bezier-length/index.html\n *\n */\n\nfunction Point(x, y, time) {\n this.x = x;\n this.y = y;\n this.time = time || new Date().getTime();\n}\n\nPoint.prototype.velocityFrom = function (start) {\n return this.time !== start.time ? this.distanceTo(start) / (this.time - start.time) : 1;\n};\n\nPoint.prototype.distanceTo = function (start) {\n return Math.sqrt(Math.pow(this.x - start.x, 2) + Math.pow(this.y - start.y, 2));\n};\n\nPoint.prototype.equals = function (other) {\n return this.x === other.x && this.y === other.y && this.time === other.time;\n};\n\nfunction Bezier(startPoint, control1, control2, endPoint) {\n this.startPoint = startPoint;\n this.control1 = control1;\n this.control2 = control2;\n this.endPoint = endPoint;\n}\n\n// Returns approximated length.\nBezier.prototype.length = function () {\n var steps = 10;\n var length = 0;\n var px = void 0;\n var py = void 0;\n\n for (var i = 0; i <= steps; i += 1) {\n var t = i / steps;\n var cx = this._point(t, this.startPoint.x, this.control1.x, this.control2.x, this.endPoint.x);\n var cy = this._point(t, this.startPoint.y, this.control1.y, this.control2.y, this.endPoint.y);\n if (i > 0) {\n var xdiff = cx - px;\n var ydiff = cy - py;\n length += Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n }\n px = cx;\n py = cy;\n }\n\n return length;\n};\n\n/* eslint-disable no-multi-spaces, space-in-parens */\nBezier.prototype._point = function (t, start, c1, c2, end) {\n return start * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t + 3.0 * c2 * (1.0 - t) * t * t + end * t * t * t;\n};\n\n/* eslint-disable */\n\n// http://stackoverflow.com/a/27078401/815507\nfunction throttle(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function later() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function () {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n}\n\nfunction SignaturePad(canvas, options) {\n var self = this;\n var opts = options || {};\n\n this.velocityFilterWeight = opts.velocityFilterWeight || 0.7;\n this.minWidth = opts.minWidth || 0.5;\n this.maxWidth = opts.maxWidth || 2.5;\n this.throttle = 'throttle' in opts ? opts.throttle : 16; // in miliseconds\n this.minDistance = 'minDistance' in opts ? opts.minDistance : 5;\n\n if (this.throttle) {\n this._strokeMoveUpdate = throttle(SignaturePad.prototype._strokeUpdate, this.throttle);\n } else {\n this._strokeMoveUpdate = SignaturePad.prototype._strokeUpdate;\n }\n\n this.dotSize = opts.dotSize || function () {\n return (this.minWidth + this.maxWidth) / 2;\n };\n this.penColor = opts.penColor || 'black';\n this.backgroundColor = opts.backgroundColor || 'rgba(0,0,0,0)';\n this.onBegin = opts.onBegin;\n this.onEnd = opts.onEnd;\n\n this._canvas = canvas;\n this._ctx = canvas.getContext('2d');\n this.clear();\n\n // We need add these inline so they are available to unbind while still having\n // access to 'self' we could use _.bind but it's not worth adding a dependency.\n this._handleMouseDown = function (event) {\n if (event.which === 1) {\n self._mouseButtonDown = true;\n self._strokeBegin(event);\n }\n };\n\n this._handleMouseMove = function (event) {\n if (self._mouseButtonDown) {\n self._strokeMoveUpdate(event);\n }\n };\n\n this._handleMouseUp = function (event) {\n if (event.which === 1 && self._mouseButtonDown) {\n self._mouseButtonDown = false;\n self._strokeEnd(event);\n }\n };\n\n this._handleTouchStart = function (event) {\n if (event.targetTouches.length === 1) {\n var touch = event.changedTouches[0];\n self._strokeBegin(touch);\n }\n };\n\n this._handleTouchMove = function (event) {\n // Prevent scrolling.\n event.preventDefault();\n\n var touch = event.targetTouches[0];\n self._strokeMoveUpdate(touch);\n };\n\n this._handleTouchEnd = function (event) {\n var wasCanvasTouched = event.target === self._canvas;\n if (wasCanvasTouched) {\n event.preventDefault();\n self._strokeEnd(event);\n }\n };\n\n // Enable mouse and touch event handlers\n this.on();\n}\n\n// Public methods\nSignaturePad.prototype.clear = function () {\n var ctx = this._ctx;\n var canvas = this._canvas;\n\n ctx.fillStyle = this.backgroundColor;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n this._data = [];\n this._reset();\n this._isEmpty = true;\n};\n\nSignaturePad.prototype.fromDataURL = function (dataUrl) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var image = new Image();\n var ratio = options.ratio || window.devicePixelRatio || 1;\n var width = options.width || this._canvas.width / ratio;\n var height = options.height || this._canvas.height / ratio;\n\n this._reset();\n image.src = dataUrl;\n image.onload = function () {\n _this._ctx.drawImage(image, 0, 0, width, height);\n };\n this._isEmpty = false;\n};\n\nSignaturePad.prototype.toDataURL = function (type) {\n var _canvas;\n\n switch (type) {\n case 'image/svg+xml':\n return this._toSVG();\n default:\n for (var _len = arguments.length, options = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n options[_key - 1] = arguments[_key];\n }\n\n return (_canvas = this._canvas).toDataURL.apply(_canvas, [type].concat(options));\n }\n};\n\nSignaturePad.prototype.on = function () {\n this._handleMouseEvents();\n this._handleTouchEvents();\n};\n\nSignaturePad.prototype.off = function () {\n this._canvas.removeEventListener('mousedown', this._handleMouseDown);\n this._canvas.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n\n this._canvas.removeEventListener('touchstart', this._handleTouchStart);\n this._canvas.removeEventListener('touchmove', this._handleTouchMove);\n this._canvas.removeEventListener('touchend', this._handleTouchEnd);\n};\n\nSignaturePad.prototype.isEmpty = function () {\n return this._isEmpty;\n};\n\n// Private methods\nSignaturePad.prototype._strokeBegin = function (event) {\n this._data.push([]);\n this._reset();\n this._strokeUpdate(event);\n\n if (typeof this.onBegin === 'function') {\n this.onBegin(event);\n }\n};\n\nSignaturePad.prototype._strokeUpdate = function (event) {\n var x = event.clientX;\n var y = event.clientY;\n\n var point = this._createPoint(x, y);\n var lastPointGroup = this._data[this._data.length - 1];\n var lastPoint = lastPointGroup && lastPointGroup[lastPointGroup.length - 1];\n var isLastPointTooClose = lastPoint && point.distanceTo(lastPoint) < this.minDistance;\n\n // Skip this point if it's too close to the previous one\n if (!(lastPoint && isLastPointTooClose)) {\n var _addPoint = this._addPoint(point),\n curve = _addPoint.curve,\n widths = _addPoint.widths;\n\n if (curve && widths) {\n this._drawCurve(curve, widths.start, widths.end);\n }\n\n this._data[this._data.length - 1].push({\n x: point.x,\n y: point.y,\n time: point.time,\n color: this.penColor\n });\n }\n};\n\nSignaturePad.prototype._strokeEnd = function (event) {\n var canDrawCurve = this.points.length > 2;\n var point = this.points[0]; // Point instance\n\n if (!canDrawCurve && point) {\n this._drawDot(point);\n }\n\n if (point) {\n var lastPointGroup = this._data[this._data.length - 1];\n var lastPoint = lastPointGroup[lastPointGroup.length - 1]; // plain object\n\n // When drawing a dot, there's only one point in a group, so without this check\n // such group would end up with exactly the same 2 points.\n if (!point.equals(lastPoint)) {\n lastPointGroup.push({\n x: point.x,\n y: point.y,\n time: point.time,\n color: this.penColor\n });\n }\n }\n\n if (typeof this.onEnd === 'function') {\n this.onEnd(event);\n }\n};\n\nSignaturePad.prototype._handleMouseEvents = function () {\n this._mouseButtonDown = false;\n\n this._canvas.addEventListener('mousedown', this._handleMouseDown);\n this._canvas.addEventListener('mousemove', this._handleMouseMove);\n document.addEventListener('mouseup', this._handleMouseUp);\n};\n\nSignaturePad.prototype._handleTouchEvents = function () {\n // Pass touch events to canvas element on mobile IE11 and Edge.\n this._canvas.style.msTouchAction = 'none';\n this._canvas.style.touchAction = 'none';\n\n this._canvas.addEventListener('touchstart', this._handleTouchStart);\n this._canvas.addEventListener('touchmove', this._handleTouchMove);\n this._canvas.addEventListener('touchend', this._handleTouchEnd);\n};\n\nSignaturePad.prototype._reset = function () {\n this.points = [];\n this._lastVelocity = 0;\n this._lastWidth = (this.minWidth + this.maxWidth) / 2;\n this._ctx.fillStyle = this.penColor;\n};\n\nSignaturePad.prototype._createPoint = function (x, y, time) {\n var rect = this._canvas.getBoundingClientRect();\n\n return new Point(x - rect.left, y - rect.top, time || new Date().getTime());\n};\n\nSignaturePad.prototype._addPoint = function (point) {\n var points = this.points;\n var tmp = void 0;\n\n points.push(point);\n\n if (points.length > 2) {\n // To reduce the initial lag make it work with 3 points\n // by copying the first point to the beginning.\n if (points.length === 3) points.unshift(points[0]);\n\n tmp = this._calculateCurveControlPoints(points[0], points[1], points[2]);\n var c2 = tmp.c2;\n tmp = this._calculateCurveControlPoints(points[1], points[2], points[3]);\n var c3 = tmp.c1;\n var curve = new Bezier(points[1], c2, c3, points[2]);\n var widths = this._calculateCurveWidths(curve);\n\n // Remove the first element from the list,\n // so that we always have no more than 4 points in points array.\n points.shift();\n\n return { curve: curve, widths: widths };\n }\n\n return {};\n};\n\nSignaturePad.prototype._calculateCurveControlPoints = function (s1, s2, s3) {\n var dx1 = s1.x - s2.x;\n var dy1 = s1.y - s2.y;\n var dx2 = s2.x - s3.x;\n var dy2 = s2.y - s3.y;\n\n var m1 = { x: (s1.x + s2.x) / 2.0, y: (s1.y + s2.y) / 2.0 };\n var m2 = { x: (s2.x + s3.x) / 2.0, y: (s2.y + s3.y) / 2.0 };\n\n var l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n var l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n\n var dxm = m1.x - m2.x;\n var dym = m1.y - m2.y;\n\n var k = l2 / (l1 + l2);\n var cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n\n var tx = s2.x - cm.x;\n var ty = s2.y - cm.y;\n\n return {\n c1: new Point(m1.x + tx, m1.y + ty),\n c2: new Point(m2.x + tx, m2.y + ty)\n };\n};\n\nSignaturePad.prototype._calculateCurveWidths = function (curve) {\n var startPoint = curve.startPoint;\n var endPoint = curve.endPoint;\n var widths = { start: null, end: null };\n\n var velocity = this.velocityFilterWeight * endPoint.velocityFrom(startPoint) + (1 - this.velocityFilterWeight) * this._lastVelocity;\n\n var newWidth = this._strokeWidth(velocity);\n\n widths.start = this._lastWidth;\n widths.end = newWidth;\n\n this._lastVelocity = velocity;\n this._lastWidth = newWidth;\n\n return widths;\n};\n\nSignaturePad.prototype._strokeWidth = function (velocity) {\n return Math.max(this.maxWidth / (velocity + 1), this.minWidth);\n};\n\nSignaturePad.prototype._drawPoint = function (x, y, size) {\n var ctx = this._ctx;\n\n ctx.moveTo(x, y);\n ctx.arc(x, y, size, 0, 2 * Math.PI, false);\n this._isEmpty = false;\n};\n\nSignaturePad.prototype._drawCurve = function (curve, startWidth, endWidth) {\n var ctx = this._ctx;\n var widthDelta = endWidth - startWidth;\n var drawSteps = Math.floor(curve.length());\n\n ctx.beginPath();\n\n for (var i = 0; i < drawSteps; i += 1) {\n // Calculate the Bezier (x, y) coordinate for this step.\n var t = i / drawSteps;\n var tt = t * t;\n var ttt = tt * t;\n var u = 1 - t;\n var uu = u * u;\n var uuu = uu * u;\n\n var x = uuu * curve.startPoint.x;\n x += 3 * uu * t * curve.control1.x;\n x += 3 * u * tt * curve.control2.x;\n x += ttt * curve.endPoint.x;\n\n var y = uuu * curve.startPoint.y;\n y += 3 * uu * t * curve.control1.y;\n y += 3 * u * tt * curve.control2.y;\n y += ttt * curve.endPoint.y;\n\n var width = startWidth + ttt * widthDelta;\n this._drawPoint(x, y, width);\n }\n\n ctx.closePath();\n ctx.fill();\n};\n\nSignaturePad.prototype._drawDot = function (point) {\n var ctx = this._ctx;\n var width = typeof this.dotSize === 'function' ? this.dotSize() : this.dotSize;\n\n ctx.beginPath();\n this._drawPoint(point.x, point.y, width);\n ctx.closePath();\n ctx.fill();\n};\n\nSignaturePad.prototype._fromData = function (pointGroups, drawCurve, drawDot) {\n for (var i = 0; i < pointGroups.length; i += 1) {\n var group = pointGroups[i];\n\n if (group.length > 1) {\n for (var j = 0; j < group.length; j += 1) {\n var rawPoint = group[j];\n var point = new Point(rawPoint.x, rawPoint.y, rawPoint.time);\n var color = rawPoint.color;\n\n if (j === 0) {\n // First point in a group. Nothing to draw yet.\n\n // All points in the group have the same color, so it's enough to set\n // penColor just at the beginning.\n this.penColor = color;\n this._reset();\n\n this._addPoint(point);\n } else if (j !== group.length - 1) {\n // Middle point in a group.\n var _addPoint2 = this._addPoint(point),\n curve = _addPoint2.curve,\n widths = _addPoint2.widths;\n\n if (curve && widths) {\n drawCurve(curve, widths, color);\n }\n } else {\n // Last point in a group. Do nothing.\n }\n }\n } else {\n this._reset();\n var _rawPoint = group[0];\n drawDot(_rawPoint);\n }\n }\n};\n\nSignaturePad.prototype._toSVG = function () {\n var _this2 = this;\n\n var pointGroups = this._data;\n var canvas = this._canvas;\n var ratio = Math.max(window.devicePixelRatio || 1, 1);\n var minX = 0;\n var minY = 0;\n var maxX = canvas.width / ratio;\n var maxY = canvas.height / ratio;\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n svg.setAttributeNS(null, 'width', canvas.width);\n svg.setAttributeNS(null, 'height', canvas.height);\n\n this._fromData(pointGroups, function (curve, widths, color) {\n var path = document.createElement('path');\n\n // Need to check curve for NaN values, these pop up when drawing\n // lines on the canvas that are not continuous. E.g. Sharp corners\n // or stopping mid-stroke and than continuing without lifting mouse.\n if (!isNaN(curve.control1.x) && !isNaN(curve.control1.y) && !isNaN(curve.control2.x) && !isNaN(curve.control2.y)) {\n var attr = 'M ' + curve.startPoint.x.toFixed(3) + ',' + curve.startPoint.y.toFixed(3) + ' ' + ('C ' + curve.control1.x.toFixed(3) + ',' + curve.control1.y.toFixed(3) + ' ') + (curve.control2.x.toFixed(3) + ',' + curve.control2.y.toFixed(3) + ' ') + (curve.endPoint.x.toFixed(3) + ',' + curve.endPoint.y.toFixed(3));\n\n path.setAttribute('d', attr);\n path.setAttribute('stroke-width', (widths.end * 2.25).toFixed(3));\n path.setAttribute('stroke', color);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke-linecap', 'round');\n\n svg.appendChild(path);\n }\n }, function (rawPoint) {\n var circle = document.createElement('circle');\n var dotSize = typeof _this2.dotSize === 'function' ? _this2.dotSize() : _this2.dotSize;\n circle.setAttribute('r', dotSize);\n circle.setAttribute('cx', rawPoint.x);\n circle.setAttribute('cy', rawPoint.y);\n circle.setAttribute('fill', rawPoint.color);\n\n svg.appendChild(circle);\n });\n\n var prefix = 'data:image/svg+xml;base64,';\n var header = '<svg' + ' xmlns=\"http://www.w3.org/2000/svg\"' + ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"' + (' viewBox=\"' + minX + ' ' + minY + ' ' + maxX + ' ' + maxY + '\"') + (' width=\"' + maxX + '\"') + (' height=\"' + maxY + '\"') + '>';\n var body = svg.innerHTML;\n\n // IE hack for missing innerHTML property on SVGElement\n if (body === undefined) {\n var dummy = document.createElement('dummy');\n var nodes = svg.childNodes;\n dummy.innerHTML = '';\n\n for (var i = 0; i < nodes.length; i += 1) {\n dummy.appendChild(nodes[i].cloneNode(true));\n }\n\n body = dummy.innerHTML;\n }\n\n var footer = '</svg>';\n var data = header + body + footer;\n\n return prefix + btoa(data);\n};\n\nSignaturePad.prototype.fromData = function (pointGroups) {\n var _this3 = this;\n\n this.clear();\n\n this._fromData(pointGroups, function (curve, widths) {\n return _this3._drawCurve(curve, widths.start, widths.end);\n }, function (rawPoint) {\n return _this3._drawDot(rawPoint);\n });\n\n this._data = pointGroups;\n};\n\nSignaturePad.prototype.toData = function () {\n return this._data;\n};\n\nexport default SignaturePad;\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.trimCanvas=t():e.trimCanvas=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p=\"\",t(0)}([function(e,t){\"use strict\";function r(e){var t=e.getContext(\"2d\"),r=e.width,n=e.height,o=t.getImageData(0,0,r,n).data,f=a(!0,r,n,o),i=a(!1,r,n,o),c=u(!0,r,n,o),d=u(!1,r,n,o),p=d-c+1,l=i-f+1,s=t.getImageData(c,f,p,l);return e.width=p,e.height=l,t.clearRect(0,0,p,l),t.putImageData(s,0,0),e}function n(e,t,r,n){return{red:n[4*(r*t+e)],green:n[4*(r*t+e)+1],blue:n[4*(r*t+e)+2],alpha:n[4*(r*t+e)+3]}}function o(e,t,r,o){return n(e,t,r,o).alpha}function a(e,t,r,n){for(var a=e?1:-1,u=e?0:r-1,f=u;e?f<r:f>-1;f+=a)for(var i=0;i<t;i++)if(o(i,f,t,n))return f;return null}function u(e,t,r,n){for(var a=e?1:-1,u=e?0:t-1,f=u;e?f<t:f>-1;f+=a)for(var i=0;i<r;i++)if(o(f,i,t,n))return f;return null}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=r}])});","import _extends from '@babel/runtime/helpers/extends';\nimport _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport _createSuper from '@babel/runtime/helpers/createSuper';\nimport PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport SignaturePad from 'signature_pad';\nimport trimCanvas from 'trim-canvas';\n\nvar _excluded = [\"canvasProps\", \"clearOnResize\"];\nvar SignatureCanvas = /*#__PURE__*/function (_Component) {\n _inherits(SignatureCanvas, _Component);\n var _super = _createSuper(SignatureCanvas);\n function SignatureCanvas() {\n var _this;\n _classCallCheck(this, SignatureCanvas);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _this.staticThis = _this.constructor;\n _this._sigPad = null;\n _this._canvas = null;\n _this.setRef = function (ref) {\n _this._canvas = ref;\n // if component is unmounted, set internal references to null\n if (_this._canvas === null) {\n _this._sigPad = null;\n }\n };\n _this._excludeOurProps = function () {\n var _this$props = _this.props;\n _this$props.canvasProps;\n _this$props.clearOnResize;\n var sigPadProps = _objectWithoutProperties(_this$props, _excluded);\n return sigPadProps;\n };\n _this.componentDidMount = function () {\n var canvas = _this.getCanvas();\n _this._sigPad = new SignaturePad(canvas, _this._excludeOurProps());\n _this._resizeCanvas();\n _this.on();\n };\n _this.componentWillUnmount = function () {\n _this.off();\n };\n _this.componentDidUpdate = function () {\n Object.assign(_this._sigPad, _this._excludeOurProps());\n };\n _this.getCanvas = function () {\n if (_this._canvas === null) {\n throw _this.staticThis.refNullError;\n }\n return _this._canvas;\n };\n _this.getTrimmedCanvas = function () {\n // copy the canvas\n var canvas = _this.getCanvas();\n var copy = document.createElement('canvas');\n copy.width = canvas.width;\n copy.height = canvas.height;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n copy.getContext('2d').drawImage(canvas, 0, 0);\n // then trim it\n return trimCanvas(copy);\n };\n _this.getSignaturePad = function () {\n if (_this._sigPad === null) {\n throw _this.staticThis.refNullError;\n }\n return _this._sigPad;\n };\n _this._checkClearOnResize = function () {\n if (!_this.props.clearOnResize) {\n // eslint-disable-line @typescript-eslint/strict-boolean-expressions -- this is backward compatible with the previous behavior, where null was treated as falsey\n return;\n }\n _this._resizeCanvas();\n };\n _this._resizeCanvas = function () {\n var _this$props$canvasPro, _window$devicePixelRa;\n var canvasProps = (_this$props$canvasPro = _this.props.canvasProps) !== null && _this$props$canvasPro !== void 0 ? _this$props$canvasPro : {};\n var width = canvasProps.width,\n height = canvasProps.height;\n // don't resize if the canvas has fixed width and height\n if (typeof width !== 'undefined' && typeof height !== 'undefined') {\n return;\n }\n var canvas = _this.getCanvas();\n /* When zoomed out to less than 100%, for some very strange reason,\n some browsers report devicePixelRatio as less than 1\n and only part of the canvas is cleared then. */\n var ratio = Math.max((_window$devicePixelRa = window.devicePixelRatio) !== null && _window$devicePixelRa !== void 0 ? _window$devicePixelRa : 1, 1);\n if (typeof width === 'undefined') {\n canvas.width = canvas.offsetWidth * ratio;\n }\n if (typeof height === 'undefined') {\n canvas.height = canvas.offsetHeight * ratio;\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n canvas.getContext('2d').scale(ratio, ratio);\n _this.clear();\n };\n _this.render = function () {\n var canvasProps = _this.props.canvasProps;\n return /*#__PURE__*/React.createElement(\"canvas\", _extends({\n ref: _this.setRef\n }, canvasProps));\n };\n _this.on = function () {\n window.addEventListener('resize', _this._checkClearOnResize);\n return _this.getSignaturePad().on();\n };\n _this.off = function () {\n window.removeEventListener('resize', _this._checkClearOnResize);\n return _this.getSignaturePad().off();\n };\n _this.clear = function () {\n return _this.getSignaturePad().clear();\n };\n _this.isEmpty = function () {\n return _this.getSignaturePad().isEmpty();\n };\n _this.fromDataURL = function (dataURL, options) {\n return _this.getSignaturePad().fromDataURL(dataURL, options);\n };\n _this.toDataURL = function (type, encoderOptions) {\n return _this.getSignaturePad().toDataURL(type, encoderOptions);\n };\n _this.fromData = function (pointGroups) {\n return _this.getSignaturePad().fromData(pointGroups);\n };\n _this.toData = function () {\n return _this.getSignaturePad().toData();\n };\n return _this;\n } // shortcut reference (https://stackoverflow.com/a/29244254/3431180)\n // propagate prop updates to SignaturePad\n // return the canvas ref for operations like toDataURL\n // return a trimmed copy of the canvas\n // return the internal SignaturePad reference\n // all wrapper functions below render\n //\n return _createClass(SignatureCanvas);\n}(Component);\nSignatureCanvas.propTypes = {\n // signature_pad's props\n velocityFilterWeight: PropTypes.number,\n minWidth: PropTypes.number,\n maxWidth: PropTypes.number,\n minDistance: PropTypes.number,\n dotSize: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n penColor: PropTypes.string,\n throttle: PropTypes.number,\n onEnd: PropTypes.func,\n onBegin: PropTypes.func,\n // props specific to the React wrapper\n canvasProps: PropTypes.object,\n clearOnResize: PropTypes.bool\n};\nSignatureCanvas.defaultProps = {\n clearOnResize: true\n};\nSignatureCanvas.refNullError = new Error('react-signature-canvas is currently ' + 'mounting or unmounting: React refs are null during this phase.');\n\nexport { SignatureCanvas, SignatureCanvas as default };\n//# sourceMappingURL=index.mjs.map\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $insertNodes } from \"lexical\";\nimport { COMMAND_PRIORITY_EDITOR, createCommand } from \"lexical\";\nimport { useEffect } from \"react\";\nimport { $createImageNode } from \"src/nodes/ImageNode\";\n\nexport const INSERT_SIGNATURE_COMMAND = createCommand(\n \"INSERT_SIGNATURE_COMMAND\"\n);\n\nexport function SignatureCanvasPlugin(): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return editor.registerCommand(\n INSERT_SIGNATURE_COMMAND,\n (payload: string) => {\n editor.update(() => {\n const imageNode = $createImageNode({\n src: payload,\n altText: \"Signature\",\n showCaption: false,\n });\n $insertNodes([imageNode]);\n });\n return true;\n },\n COMMAND_PRIORITY_EDITOR\n );\n }, [editor]);\n\n return null;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport SignatureCanvas from \"react-signature-canvas\";\nimport { Button } from \"src/components/ui/button\";\nimport { useS3Uploader } from \"src/hooks/useS3Uploader\";\nimport { Dialog, DialogContent, DialogFooter } from \"src/components/ui/dialog\";\n\nimport { INSERT_SIGNATURE_COMMAND } from \"./SignatureCanvasPlugin\";\n\ninterface SignatureCanvasDialogProps {\n onClose: () => void;\n}\n\nconst SignatureCanvasDialog: React.FC<SignatureCanvasDialogProps> = ({\n onClose,\n}) => {\n const [editor] = useLexicalComposerContext();\n const signatureCanvasRef = useRef<SignatureCanvas | null>(null);\n const [isEmpty, setIsEmpty] = useState(true);\n const [penColor, setPenColor] = useState(\"#000000\");\n const [uploadedImage, setUploadedImage] = useState<string | null>(null);\n\n const { uploadFileToS3, uploading, progress } = useS3Uploader();\n\n const handleClear = () => {\n if (signatureCanvasRef.current) {\n signatureCanvasRef.current.clear();\n setUploadedImage(null);\n setIsEmpty(true);\n }\n };\n\n function dataURLtoFile(dataUrl: string, filename: string): File {\n const arr = dataUrl.split(',');\n const mime = arr[0].match(/:(.*?);/)?.[1] || 'image/png';\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) u8arr[n] = bstr.charCodeAt(n);\n return new File([u8arr], filename, { type: mime });\n }\n\n useEffect(() => {\n if (uploadedImage && signatureCanvasRef.current) {\n const canvas = signatureCanvasRef.current;\n const img = new Image();\n img.onload = () => {\n canvas.clear();\n canvas.getCanvas().getContext(\"2d\")?.clearRect(0, 0, canvas.getCanvas().width, canvas.getCanvas().height);\n canvas.getCanvas().getContext(\"2d\")?.drawImage(img, 0, 0, canvas.getCanvas().width, canvas.getCanvas().height);\n setIsEmpty(false);\n };\n img.src = uploadedImage;\n }\n }, [uploadedImage]);\n\n const handleInsert = async () => {\n if (signatureCanvasRef.current && !isEmpty) {\n try {\n const dataUrl = signatureCanvasRef.current.toDataURL(\"image/png\");\n const file = dataURLtoFile(dataUrl, `signature-${Date.now()}.png`);\n const s3Url = await uploadFileToS3(file);\n editor.dispatchCommand(INSERT_SIGNATURE_COMMAND, s3Url); \n onClose();\n } catch (e) {\n alert(\"Upload failed\");\n }\n }\n };\n\n const handleBegin = () => {\n setIsEmpty(false);\n setUploadedImage(null);\n };\n\n const handleColorChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setPenColor(event.target.value);\n };\n\n const handleUpload = (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (e) => {\n setUploadedImage(e.target?.result as string);\n };\n reader.readAsDataURL(file);\n }\n };\n\n return (\n <Dialog open onOpenChange={() => onClose()}>\n <DialogContent className=\"!cteditor-max-w-3xl\">\n <div className=\"cteditor-space-y-4\">\n <div className=\"cteditor-text-lg cteditor-font-medium\">\n Draw your signature\n </div>\n\n <div className=\"cteditor-mb-2\">\n <label htmlFor=\"penColor\" className=\"cteditor-mr-2\">\n Choose Color:\n </label>\n <input\n type=\"color\"\n id=\"penColor\"\n value={penColor}\n onChange={handleColorChange}\n />\n </div>\n\n <div className=\"cteditor-mb-4\">\n <label htmlFor=\"uploadSignature\" className=\"cteditor-mr-2 cteditor-cursor-pointer cteditor-text-blue-600 underline\">\n Upload Signature Image\n </label>\n <input\n type=\"file\"\n id=\"uploadSignature\"\n accept=\"image/*\"\n onChange={handleUpload}\n className=\"cteditor-hidden\"\n />\n </div>\n\n <div className=\"cteditor-border cteditor-border-gray-300 cteditor-rounded-sm cteditor-bg-white\">\n <SignatureCanvas\n ref={signatureCanvasRef}\n onBegin={handleBegin}\n penColor={penColor}\n canvasProps={{\n width: 718,\n height: 320,\n className: \"signature-canvas\",\n }}\n />\n </div>\n </div>\n <DialogFooter className=\"cteditor-flex cteditor-items-center sm:cteditor-justify-between cteditor-space-x-3\">\n <Button variant=\"outline\" onClick={handleClear}>\n Clear\n </Button>\n <div className=\"cteditor-space-x-3\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button disabled={isEmpty} onClick={handleInsert}>\n Insert\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default SignatureCanvasDialog;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { ChevronDown, Paperclip } from \"lucide-react\";\nimport React, { FC, ReactNode, useState } from \"react\";\nimport InsertFileDialog from \"src/components/FileUpload/InsertFileDialog\";\nimport InsertImageDialog from \"src/components/ImageView/ImageDialog\";\nimport { HorizontalRuleCustomizationDialog } from \"src/plugins/CustomHorizontalRulePlugin\";\nimport { SignatureCanvasDialog } from \"src/plugins/SignatureCanvasPlugin\";\nimport { AddImageIcon, HorizontalRuleIcon, SignatureIcon } from \"src/ui/Icons\";\n\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\n\nexport type ModalState = {\n show: (renderModal: (onClose: () => void) => ReactNode) => void;\n hide: () => void;\n activeModal: ReactNode | null;\n};\n\nexport const useModal = (): ModalState => {\n const [activeModal, setActiveModal] = useState<ReactNode | null>(null);\n\n const show = (renderModal: (onClose: () => void) => ReactNode) => {\n const onClose = () => setActiveModal(null);\n setActiveModal(renderModal(onClose));\n };\n\n const hide = () => {\n setActiveModal(null);\n };\n\n return { show, hide, activeModal };\n};\n\nconst InsertMenu: FC = () => {\n const [editor] = useLexicalComposerContext();\n const modal = useModal();\n\n const insertMenuItems = [\n {\n name: \"Horizontal Rule\",\n icon: <HorizontalRuleIcon />,\n onClick: () =>\n modal.show((onClose) => (\n <HorizontalRuleCustomizationDialog\n activeEditor={editor}\n onClose={onClose}\n />\n )),\n },\n {\n name: \"Image\",\n icon: <AddImageIcon />,\n onClick: () => {\n console.log(\"Image button clicked, opening dialog...\");\n modal.show((onClose) => (\n <InsertImageDialog activeEditor={editor} onClose={onClose} />\n ));\n },\n },\n {\n name: \"File\",\n icon: <Paperclip />,\n onClick: () =>\n modal.show((onClose) => (\n <InsertFileDialog activeEditor={editor} onClose={onClose} />\n )),\n },\n {\n name: \"Signature\",\n icon: <SignatureIcon />,\n onClick: () =>\n modal.show((onClose) => <SignatureCanvasDialog onClose={onClose} />),\n },\n ];\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"cteditor-text-foreground/50\"\n >\n <ChevronDown className=\"!cteditor-size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {insertMenuItems.map((option, index) => (\n <DropdownMenuItem\n key={index}\n onClick={() => {\n option.onClick();\n }}\n >\n <span className=\"[&>svg]:cteditor-size-4\">{option.icon}</span>\n <span>{option.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {modal.activeModal}\n </>\n );\n};\n\nexport default InsertMenu;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $insertNodes, COMMAND_PRIORITY_EDITOR, createCommand } from \"lexical\";\nimport { useEffect } from \"react\";\nimport {\n $createNotePanelNode,\n NotePanelNode,\n NotePanelType,\n} from \"src/nodes/NotePanelNode\";\n\nexport interface InsertNotePanelPayload {\n type: NotePanelType;\n title?: string;\n}\n\nexport const INSERT_NOTE_PANEL_COMMAND = createCommand<InsertNotePanelPayload>(\n \"INSERT_NOTE_PANEL_COMMAND\"\n);\n\nexport default function NotePanelPlugin(): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n if (!editor.hasNode(NotePanelNode)) {\n console.error(\"NotePanelPlugin: NotePanelNode not registered on editor\");\n throw new Error(\n \"NotePanelPlugin: NotePanelNode not registered on editor\"\n );\n }\n\n const unregister = editor.registerCommand<InsertNotePanelPayload>(\n INSERT_NOTE_PANEL_COMMAND,\n (payload) => {\n try {\n editor.update(() => {\n const { type, title = \"\" } = payload;\n const notePanelNode = $createNotePanelNode({ type, title });\n $insertNodes([notePanelNode]);\n });\n } catch (error) {\n console.error(\"Error inserting note panel:\", error);\n return false;\n }\n\n return true;\n },\n COMMAND_PRIORITY_EDITOR\n );\n\n return unregister;\n }, [editor]);\n\n return null;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n AlertCircle,\n AlertTriangle,\n CheckCircle,\n Info,\n StickyNote,\n} from \"lucide-react\";\nimport React from \"react\";\nimport { cn } from \"src/lib/utils\";\nimport { NotePanelType } from \"src/nodes/NotePanelNode\";\nimport { INSERT_NOTE_PANEL_COMMAND } from \"src/plugins/NotePanelPlugin\";\nimport { NoteIcon } from \"src/ui/Icons\";\n\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../ui/tooltip\";\n\nconst PANEL_OPTIONS = [\n {\n type: \"info\" as NotePanelType,\n label: \"Info\",\n icon: Info,\n iconColor: \"cteditor-text-blue-600 dark:cteditor-text-blue-400\",\n description: \"Information panel\",\n },\n {\n type: \"warning\" as NotePanelType,\n label: \"Warning\",\n icon: AlertTriangle,\n iconColor: \"cteditor-text-yellow-600 dark:cteditor-text-yellow-400\",\n description: \"Warning panel\",\n },\n {\n type: \"error\" as NotePanelType,\n label: \"Error\",\n icon: AlertCircle,\n iconColor: \"cteditor-text-red-600 dark:cteditor-text-red-400\",\n description: \"Error panel\",\n },\n {\n type: \"success\" as NotePanelType,\n label: \"Success\",\n icon: CheckCircle,\n iconColor: \"cteditor-text-green-600 dark:cteditor-text-green-400\",\n description: \"Success panel\",\n },\n {\n type: \"note\" as NotePanelType,\n label: \"Note\",\n icon: StickyNote,\n iconColor: \"cteditor-text-gray-600 dark:cteditor-text-gray-400\",\n description: \"General note panel\",\n },\n];\n\ninterface NotePanelMenuProps {\n className?: string;\n}\n\nconst NotePanelMenu: React.FC<NotePanelMenuProps> = ({ className }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleInsertPanel = (type: NotePanelType) => {\n editor.focus();\n\n try {\n editor.dispatchCommand(INSERT_NOTE_PANEL_COMMAND, { type });\n } catch (error) {\n console.error(\"Error dispatching note panel command:\", error);\n }\n };\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className={cn(\"cteditor-text-foreground\", className)}\n >\n <NoteIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Insert Note Panel</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"cteditor-w-48\">\n {PANEL_OPTIONS.map((option) => {\n const IconComponent = option.icon;\n return (\n <DropdownMenuItem\n key={option.type}\n onClick={() => handleInsertPanel(option.type)}\n className=\"cteditor-flex cteditor-items-center !cteditor-gap-3 cteditor-cursor-pointer\"\n >\n <div className={cn(\"cteditor-flex-shrink-0\", option.iconColor)}>\n <IconComponent size={16} />\n </div>\n <div className=\"cteditor-flex-1\">\n <div className=\"cteditor-text-sm cteditor-font-medium\">\n {option.label}\n </div>\n <div className=\"cteditor-text-xs cteditor-text-muted-foreground\">\n {option.description}\n </div>\n </div>\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default NotePanelMenu;\n","export const useStyles = () => ({\n root: \"cteditor-p-2 cteditor-border-b cteditor-border-[#e0e0e0] cteditor-overflow-auto\",\n toolbar: \"cteditor-p-2 cteditor-overflow-auto\",\n toolbarButton: \"cteditor-p-1.5\",\n});\n\nexport default useStyles;\n","import \"src/styles/EditorTheme.css\";\n\nimport { $isCodeNode, CODE_LANGUAGE_MAP } from \"@lexical/code\";\nimport { $generateHtmlFromNodes } from \"@lexical/html\";\nimport { $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport {\n $isListNode,\n INSERT_CHECK_LIST_COMMAND,\n ListNode,\n} from \"@lexical/list\";\nimport { $isHeadingNode } from \"@lexical/rich-text\";\nimport {\n $getSelectionStyleValueForProperty,\n $isParentElementRTL,\n} from \"@lexical/selection\";\nimport { $isTableNode, $isTableSelection } from \"@lexical/table\";\nimport {\n $findMatchingParent,\n $getNearestNodeOfType,\n $isEditorIsNestedEditor,\n mergeRegister,\n} from \"@lexical/utils\";\nimport { type EmojiClickData } from \"emoji-picker-react\";\nimport {\n $createTextNode,\n $getSelection,\n $insertNodes,\n $isElementNode,\n $isRangeSelection,\n CAN_REDO_COMMAND,\n CAN_UNDO_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n FORMAT_TEXT_COMMAND,\n NodeKey,\n REDO_COMMAND,\n SELECTION_CHANGE_COMMAND,\n UNDO_COMMAND,\n} from \"lexical\";\nimport { $isRootOrShadowRoot } from \"lexical\";\nimport { FileCode2, Trash, X, MoreHorizontal } from \"lucide-react\";\nimport React, { FC, useCallback, useEffect, useState, useRef } from \"react\";\nimport { blockTypeToBlockName, LOWEST_PRIORITY } from \"src/constants\";\nimport { useHtmlView } from \"src/context/HtmlViewContext\";\nimport { useToolbarState } from \"src/context/ToolbarContext\";\nimport useCustomCommands from \"src/hooks/useCustomCommands\";\nimport useEditorToolbar from \"src/hooks/useEditorToolbar\";\nimport { cn } from \"src/lib/utils\";\nimport { TOGGLE_AI_CHAT_COMMAND } from \"src/plugins/AIChatPlugin\";\nimport TableOptionPlugin from \"src/plugins/TablePlugin\";\nimport VoiceTranscriptPlugin, { VoiceTranscriptButton } from \"src/plugins/VoiceTranscriptPlugin\";\nimport {\n BoldIcon,\n CodeIcon,\n FaceSmileIcon,\n FaceSmileIcon2,\n ImageIcon,\n ItalicIcon,\n LinkIcon,\n MagicoonIcon,\n MenuAltIcon,\n MessageEditIcon,\n PenLineIcon,\n RedoIcon,\n SearchTextIcon,\n SearchTextIcon2,\n SparkleIcon,\n StrikethroughIcon,\n TodoIcon,\n TranslateIcon,\n UnderlineIcon,\n UndoIcon,\n} from \"src/ui/Icons\";\nimport getSelectedNode from \"src/utils/getSelectedNode\";\nimport { AI_ACTION_COMMAND } from \"src/utils/helper\";\nimport { sanitizeUrl } from \"src/utils/url\";\nimport useColorPicker from \"../../hooks/useColorPicker\";\nimport { ToolbarProps } from \"../../types\";\nimport { AI_IMAGE_COMMAND } from \"../AiPlugin\";\nimport AlignMenu from \"../AlignMenu\";\nimport BlockFormatMenu from \"../BlockFormatMenu\";\nimport ColorPicker from \"../ColorPicker\";\nimport EmojiPickerWidget from \"../EmojiPickerWidget\";\nimport FontFamilyMenu from \"../FontFamilySelect/FontFamilyMenu\";\nimport FontSizeControl from \"../FontSizePicker/FontSizeControl\";\nimport FormatTextMenu from \"../FormatTextMenu\";\nimport HighlightColorPicker from \"../HighlightColorPicker/HighlightColorPicker\";\nimport InsertMenu from \"../InsertMenu\";\nimport NotePanelMenu from \"../NotePanelMenu\";\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n} from \"../ui/dropdown-menu\";\nimport { Separator } from \"../ui/separator\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../ui/tooltip\";\nimport useStyles from \"./styles\";\n\nconst Toolbar: FC<ToolbarProps> = ({\n editable,\n enableUndoRedo = true,\n enableTextFormatting = true,\n enableAlignment = true,\n enableFontControls = true,\n enableTableOptions = true,\n enableInsertMenu = true,\n enableColorPicker = true,\n enableClearOptions = true,\n enableEmojiPicker = true,\n enableLinks = true,\n enableFormatTextMenu = true,\n enableCodeFormat = true,\n enableAIChat = true,\n enableTodoList = true,\n enableHtmlViewToggle = true,\n enableHtmlView = true,\n enableNotePanels = true,\n enableAutocompleteToggle = true,\n fonts,\n editor,\n activeEditor,\n setActiveEditor,\n}) => {\n const [disableMap, setDisableMap] = useState<{ [id: string]: boolean }>({\n [\"undo\"]: true,\n [\"redo\"]: true,\n });\n const [isLinkEditMode, setIsLinkEditMode] = useState(false);\n const [selectedElementKey, setSelectedElementKey] = useState<NodeKey | null>(null);\n const [showMoreMenu, setShowMoreMenu] = useState(false);\n const [isMoreMenuOpen, setIsMoreMenuOpen] = useState(false);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n const classes = useStyles();\n const { hasFormat, isEditorEmpty, blockType, clearFormatting } = useEditorToolbar();\n const { clearEditorContent } = useCustomCommands();\n const { toolbarState, updateToolbarState } = useToolbarState();\n const { isHtmlView, setIsHtmlView, htmlContent, setHtmlContent } = useHtmlView();\n\n // Check if toolbar content overflows and if screen width <= 1300\n useEffect(() => {\n const checkOverflow = () => {\n if (toolbarRef.current && contentRef.current) {\n const toolbarWidth = toolbarRef.current.offsetWidth;\n const contentWidth = contentRef.current.scrollWidth;\n const windowWidth = window.innerWidth;\n const shouldShowMore = (windowWidth <= 1300) && (contentWidth > toolbarWidth - 60);\n setShowMoreMenu(shouldShowMore);\n }\n };\n\n checkOverflow();\n window.addEventListener('resize', checkOverflow);\n const resizeObserver = new ResizeObserver(checkOverflow);\n if (toolbarRef.current) {\n resizeObserver.observe(toolbarRef.current);\n }\n\n return () => {\n window.removeEventListener('resize', checkOverflow);\n resizeObserver.disconnect();\n };\n }, [\n enableUndoRedo,\n enableTextFormatting,\n enableFontControls,\n enableTableOptions,\n enableColorPicker,\n enableLinks,\n enableEmojiPicker,\n enableInsertMenu,\n enableTodoList,\n enableNotePanels,\n enableAlignment,\n enableClearOptions,\n enableAIChat,\n enableAutocompleteToggle,\n enableHtmlViewToggle,\n enableHtmlView,\n ]);\n\n const handleClearEditorContent = () => {\n if (confirm(\"Are you sure you want to clear out the editor's content?\"))\n clearEditorContent();\n };\n\n const { onFontColorSelect, onBgColorSelect, onHighlightColorSelect } = useColorPicker();\n const [isLinkActive, setIsLinkActive] = useState(false);\n\n useEffect(() => {\n return editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selection = $getSelection();\n setIsLinkActive(\n $isRangeSelection(selection) &&\n !!$findMatchingParent(\n selection.anchor.getNode(),\n (node) => node.getType() === \"link\"\n )\n );\n });\n });\n }, [editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n CAN_UNDO_COMMAND,\n (payload) => {\n setDisableMap((prevDisableMap) => ({\n ...prevDisableMap,\n undo: !payload,\n }));\n return false;\n },\n LOWEST_PRIORITY\n ),\n editor.registerCommand(\n CAN_REDO_COMMAND,\n (payload) => {\n setDisableMap((prevDisableMap) => ({\n ...prevDisableMap,\n redo: !payload,\n }));\n return false;\n },\n LOWEST_PRIORITY\n )\n );\n }, [editor]);\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n if (activeEditor !== editor && $isEditorIsNestedEditor(activeEditor)) {\n const rootElement = activeEditor.getRootElement();\n updateToolbarState(\n \"isImageCaption\",\n !!rootElement?.parentElement?.classList.contains(\"image-caption-container\")\n );\n } else {\n updateToolbarState(\"isImageCaption\", false);\n }\n\n const anchorNode = selection.anchor.getNode();\n let element =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, (e) => {\n const parent = e.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n if (element === null) {\n element = anchorNode.getTopLevelElementOrThrow();\n }\n\n const elementKey = element.getKey();\n const elementDOM = activeEditor.getElementByKey(elementKey);\n\n updateToolbarState(\"isRTL\", $isParentElementRTL(selection));\n\n const node = getSelectedNode(selection);\n const parent = node.getParent();\n const isLink = $isLinkNode(parent) || $isLinkNode(node);\n updateToolbarState(\"isLink\", isLink);\n\n const tableNode = $findMatchingParent(node, $isTableNode);\n if ($isTableNode(tableNode)) {\n updateToolbarState(\"rootType\", \"table\");\n } else {\n updateToolbarState(\"rootType\", \"root\");\n }\n\n if (elementDOM !== null) {\n setSelectedElementKey(elementKey);\n\n if ($isListNode(element)) {\n const parentList = $getNearestNodeOfType<ListNode>(anchorNode, ListNode);\n const type = parentList ? parentList.getListType() : element.getListType();\n updateToolbarState(\"blockType\", type);\n } else {\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n if (type in blockTypeToBlockName) {\n updateToolbarState(\"blockType\", type as keyof typeof blockTypeToBlockName);\n }\n if ($isCodeNode(element)) {\n const language = element.getLanguage() as keyof typeof CODE_LANGUAGE_MAP;\n updateToolbarState(\n \"codeLanguage\",\n language ? CODE_LANGUAGE_MAP[language] || language : \"\"\n );\n return;\n }\n }\n }\n\n updateToolbarState(\n \"fontColor\",\n $getSelectionStyleValueForProperty(selection, \"color\", \"#000\")\n );\n updateToolbarState(\n \"bgColor\",\n $getSelectionStyleValueForProperty(selection, \"background-color\", \"#fff\")\n );\n updateToolbarState(\n \"fontFamily\",\n $getSelectionStyleValueForProperty(selection, \"font-family\", \"Arial\")\n );\n\n let matchingParent;\n if ($isLinkNode(parent)) {\n matchingParent = $findMatchingParent(\n node,\n (parentNode) => $isElementNode(parentNode) && !parentNode.isInline()\n );\n }\n\n updateToolbarState(\n \"elementFormat\",\n $isElementNode(matchingParent)\n ? matchingParent.getFormatType()\n : $isElementNode(node)\n ? node.getFormatType()\n : parent?.getFormatType() || \"left\"\n );\n }\n\n if ($isRangeSelection(selection) || $isTableSelection(selection)) {\n updateToolbarState(\"isBold\", selection.hasFormat(\"bold\"));\n updateToolbarState(\"isItalic\", selection.hasFormat(\"italic\"));\n updateToolbarState(\"isUnderline\", selection.hasFormat(\"underline\"));\n updateToolbarState(\"isStrikethrough\", selection.hasFormat(\"strikethrough\"));\n updateToolbarState(\"isSubscript\", selection.hasFormat(\"subscript\"));\n updateToolbarState(\"isSuperscript\", selection.hasFormat(\"superscript\"));\n updateToolbarState(\"isCode\", selection.hasFormat(\"code\"));\n updateToolbarState(\"isHighlight\", selection.hasFormat(\"highlight\"));\n updateToolbarState(\n \"fontSize\",\n $getSelectionStyleValueForProperty(selection, \"font-size\", \"15px\")\n );\n }\n }, [activeEditor, editor, updateToolbarState]);\n\n useEffect(() => {\n return editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n setActiveEditor(newEditor);\n $updateToolbar();\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n }, [editor, $updateToolbar, setActiveEditor]);\n\n useEffect(() => {\n activeEditor.getEditorState().read(() => {\n $updateToolbar();\n });\n }, [activeEditor, $updateToolbar]);\n\n const handleEmojiClick = (event: EmojiClickData) => {\n activeEditor.update(() => {\n const emojiTextNode = $createTextNode(event.emoji);\n $insertNodes([emojiTextNode]);\n });\n };\n\n const insertLink = useCallback(() => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n let isLinkActive = false;\n selection.getNodes().forEach((node) => {\n const parent = node.getParent();\n if (parent && parent.getType() === \"link\") {\n isLinkActive = true;\n }\n });\n\n if (!isLinkActive) {\n setIsLinkEditMode(true);\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(\"https://\"));\n } else {\n setIsLinkEditMode(false);\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }\n }\n });\n }, [editor]);\n\n const toggleAIChat = useCallback(() => {\n editor.dispatchCommand(TOGGLE_AI_CHAT_COMMAND, undefined);\n }, [editor]);\n\n const createTodo = useCallback(() => {\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined);\n }, [editor]);\n\n const toggleHtmlView = useCallback(() => {\n setIsHtmlView((prev) => {\n const newIsHtmlView = !prev;\n if (newIsHtmlView) {\n editor.update(() => {\n const htmlString = $generateHtmlFromNodes(editor, null);\n setHtmlContent(htmlString);\n });\n }\n return newIsHtmlView;\n });\n }, [editor, setIsHtmlView, setHtmlContent]);\n\n const toggleAutocomplete = useCallback(() => {\n updateToolbarState(\"isAutocompleteEnabled\", !toolbarState.isAutocompleteEnabled);\n }, [updateToolbarState, toolbarState.isAutocompleteEnabled]);\n\n if (!editable) return null;\n\n return (\n <div\n ref={toolbarRef}\n className=\"cteditor-flex cteditor-bg-background cteditor-text-foreground cteditor-px-2.5 cteditor-py-[7px] cteditor-rounded-lg cteditor-items-center cteditor-gap-1.5 cteditor-relative cteditor-w-full cteditor-min-h-11 cteditor-overflow-hidden\"\n >\n <div\n ref={contentRef}\n className=\"cteditor-flex cteditor-items-center cteditor-gap-1.5 cteditor-flex-1 cteditor-overflow-x-auto cteditor-scrollbar-hide\"\n style={{ scrollbarWidth: 'none', msOverflowStyle: 'none' }}\n >\n {enableUndoRedo && (\n <>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n onClick={() => activeEditor.dispatchCommand(UNDO_COMMAND, undefined)}\n disabled={disableMap[\"undo\"]}\n size=\"icon-sm\"\n >\n <UndoIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Undo (Ctrl + Z)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => activeEditor.dispatchCommand(REDO_COMMAND, undefined)}\n disabled={disableMap[\"redo\"]}\n >\n <RedoIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Redo (Ctrl + Y)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n </>\n )}\n {enableTextFormatting && activeEditor === editor && (\n <>\n <BlockFormatMenu blockType={blockType} />\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n </>\n )}\n {enableFontControls && (\n <>\n <FontFamilyMenu fonts={fonts} activeEditor={activeEditor} />\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n <FontSizeControl />\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n </>\n )}\n {enableTableOptions && activeEditor === editor && (\n <>\n <TableOptionPlugin />\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n </>\n )}\n {enableTextFormatting && (\n <>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\")}\n className={cn(toolbarState.isBold && \"cteditor-bg-foreground/20\")}\n >\n <BoldIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Bold (Ctrl + B)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\")}\n className={cn(toolbarState.isItalic && \"cteditor-bg-foreground/20\")}\n >\n <ItalicIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Italic (Ctrl + I)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\")}\n className={cn(toolbarState.isUnderline && \"cteditor-bg-foreground/20\")}\n >\n <UnderlineIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Underline (Ctrl + U)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, \"strikethrough\")}\n className={cn(toolbarState.isStrikethrough && \"cteditor-bg-foreground/20\")}\n >\n <StrikethroughIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Strikethrough</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </>\n )}\n {enableCodeFormat && activeEditor === editor && (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\")}\n className={cn(toolbarState.isCode && \"cteditor-bg-foreground/20\")}\n >\n <CodeIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Insert code block</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n {enableFormatTextMenu && activeEditor === editor && (\n <FormatTextMenu hasFormat={hasFormat} />\n )}\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n {enableColorPicker && activeEditor === editor && (\n <>\n <ColorPicker\n key=\"color-picker\"\n title=\"Font color\"\n onChange={(color) => {\n onFontColorSelect(color);\n }}\n icon={\n <div className=\"cteditor-flex cteditor-flex-col cteditor-items-center cteditor-justify-center\">\n <p className=\"cteditor-text-[11px] cteditor-leading-none\">A</p>\n <div\n className=\"cteditor-w-[14px] cteditor-h-[2px]\"\n style={{ backgroundColor: toolbarState.fontColor }}\n ></div>\n </div>\n }\n bgClassName=\"bg-input\"\n />\n <ColorPicker\n key=\"bg-color-picker\"\n title=\"Background color\"\n onChange={(color) => {\n onBgColorSelect(color);\n }}\n />\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n </>\n )}\n {enableLinks && activeEditor === editor && (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={insertLink}\n className={cn(isLinkActive ? \"dark:cteditor-text-blue-500 cteditor-text-blue-700\" : \"cteditor-text-foreground\")}\n >\n <LinkIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Insert Link</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n {enableEmojiPicker && (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <EmojiPickerWidget\n key=\"emoji-picker\"\n icon={<FaceSmileIcon />}\n onChange={(emojiData) => {\n handleEmojiClick(emojiData);\n }}\n />\n </TooltipTrigger>\n <TooltipContent>\n <p>Emoji picker</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n {enableInsertMenu && activeEditor === editor && <InsertMenu />}\n {enableTodoList && activeEditor === editor && (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={createTodo}\n className=\"[&>svg]:!cteditor-size-5\"\n >\n <TodoIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Create Todo List</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n {enableNotePanels && activeEditor === editor && (\n <div className=\"[&>svg]:!cteditor-size-4\">\n <NotePanelMenu />\n </div>\n )}\n <HighlightColorPicker\n onChange={(color) => {\n onHighlightColorSelect(color);\n }}\n isActive={toolbarState.isHighlight}\n />\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n {enableAlignment && activeEditor === editor && (\n <>\n <AlignMenu />\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n </>\n )}\n {enableClearOptions && (\n <>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n disabled={isEditorEmpty}\n onClick={handleClearEditorContent}\n >\n <X className=\"!cteditor-size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Clear editor</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={clearFormatting}\n >\n <Trash className=\"!cteditor-size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Clear formatting</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </>\n )}\n <div className=\"cteditor-aiOption\">\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cteditor-px-4 cteditor-gap-3 [&>svg]:!cteditor-size-4 cteditor-bg-gradient-to-r cteditor-from-background cteditor-via-primary/10 cteditor-to-background hover:cteditor-from-background/80 hover:cteditor-via-primary/10 hover:cteditor-to-background/80\"\n >\n <MagicoonIcon /> Go with AI\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"SPELLING_GRAMMAR\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <SearchTextIcon />\n </div>{\" \"}\n Fix Grammar\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"SIMPLIFY\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <PenLineIcon />\n </div>{\" \"}\n Simplify\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"COMPLETE_SENTENCE\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <MenuAltIcon />\n </div>\n Complete Sentence\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"EMOJIFY\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <FaceSmileIcon2 />\n </div>\n Emojify\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"TRANSLATE\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <TranslateIcon />\n </div>\n Translate\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"AI_RESPONSE\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <SparkleIcon />\n </div>\n AI\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_IMAGE_COMMAND, { type: \"CREATE_IMAGE\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <ImageIcon />\n </div>\n Generate Image\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n {enableAIChat && (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={toggleAIChat}\n disabled={!editable}\n className={cn(classes.toolbarButton, \"[&>svg]:!cteditor-size-5\")}\n >\n <MessageEditIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>AI Chat</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <VoiceTranscriptButton editor={activeEditor} />\n </TooltipTrigger>\n <TooltipContent>\n <p>Voice Transcript</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n {enableAutocompleteToggle && (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={toggleAutocomplete}\n disabled={!editable}\n className={cn(\n classes.toolbarButton,\n toolbarState.isAutocompleteEnabled && \"cteditor-bg-foreground/20\",\n \"[&>svg]:!cteditor-size-4\"\n )}\n >\n <SearchTextIcon2 />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>\n {toolbarState.isAutocompleteEnabled ? \"Disable Autocorrection\" : \"Enable Autocorrection\"}\n </p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n <Separator orientation=\"vertical\" className=\"!cteditor-h-7\" />\n {(enableHtmlViewToggle || enableHtmlView) && (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={toggleHtmlView}\n disabled={!editable}\n className={cn(classes.toolbarButton, isHtmlView && \"cteditor-bg-foreground/20\")}\n >\n <FileCode2 className=\"!cteditor-size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{isHtmlView ? \"Switch to Editor View\" : \"Switch to HTML View\"}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {showMoreMenu && (\n <div className=\"cteditor-ml-2 cteditor-flex-shrink-0\">\n <DropdownMenu open={isMoreMenuOpen} onOpenChange={setIsMoreMenuOpen}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\">\n <MoreHorizontal className=\"!cteditor-size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"cteditor-w-56 cteditor-max-h-[400px] cteditor-overflow-y-auto\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n onPointerDownOutside={(e) => {\n const target = e.target as Element;\n if (\n target.closest('.react-colorful') ||\n target.closest('.emoji-picker-react') ||\n target.closest('[data-voice-transcript]') ||\n target.closest('[data-radix-popper-content-wrapper]') ||\n target.closest('[data-radix-popover-content]') ||\n target.closest('[data-radix-dropdown-menu-content]') ||\n target.closest('#emoji-picker') ||\n target.closest('#highlight-color-picker') ||\n target.closest('#color-picker')\n ) {\n e.preventDefault();\n }\n }}\n onInteractOutside={(e) => {\n const target = e.target as Element;\n if (\n target.closest('.react-colorful') ||\n target.closest('.emoji-picker-react') ||\n target.closest('[data-voice-transcript]') ||\n target.closest('[data-radix-popper-content-wrapper]') ||\n target.closest('[data-radix-popover-content]') ||\n target.closest('[data-radix-dropdown-menu-content]') ||\n target.closest('#emoji-picker') ||\n target.closest('#highlight-color-picker') ||\n target.closest('#color-picker')\n ) {\n e.preventDefault();\n }\n }}\n >\n {enableTextFormatting && activeEditor === editor && (\n <>\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <BlockFormatMenu blockType={blockType} />\n </div>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n {enableFontControls && (\n <>\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <FontFamilyMenu fonts={fonts} activeEditor={activeEditor} />\n </div>\n </DropdownMenuItem>\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <FontSizeControl />\n </div>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n {enableTableOptions && activeEditor === editor && (\n <>\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <TableOptionPlugin />\n </div>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n {enableTextFormatting && (\n <DropdownMenuItem\n onClick={() => activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, \"strikethrough\")}\n >\n <div className=\"cteditor-mr-2 [&>svg]:!cteditor-size-4\">\n <StrikethroughIcon />\n </div>\n Strikethrough\n </DropdownMenuItem>\n )}\n {enableCodeFormat && activeEditor === editor && (\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\")}\n >\n <div className=\"cteditor-mr-2 [&>svg]:!cteditor-size-4\">\n <CodeIcon />\n </div>\n Code\n </DropdownMenuItem>\n )}\n {enableFormatTextMenu && activeEditor === editor && (\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <FormatTextMenu hasFormat={hasFormat} />\n </div>\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n {enableColorPicker && activeEditor === editor && (\n <>\n <div className=\"cteditor-w-full cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-px-2 cteditor-py-1.5\">\n <ColorPicker\n key=\"color-picker-dropdown\"\n title=\"Font color\"\n onChange={(color) => {\n onFontColorSelect(color);\n setIsMoreMenuOpen(true); // Keep dropdown open\n }}\n icon={\n <div className=\"cteditor-flex cteditor-flex-col cteditor-items-center cteditor-justify-center\">\n <p className=\"cteditor-text-[11px] cteditor-leading-none\">A</p>\n <div\n className=\"cteditor-w-[14px] cteditor-h-[2px]\"\n style={{ backgroundColor: toolbarState.fontColor }}\n ></div>\n </div>\n }\n bgClassName=\"bg-input\"\n />\n <span className=\"cteditor-flex-1 cteditor-text-sm\">Font Color</span>\n </div>\n <div className=\"cteditor-w-full cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-px-2 cteditor-py-1.5\">\n <ColorPicker\n key=\"bg-color-picker-dropdown\"\n title=\"Background color\"\n onChange={(color) => {\n onBgColorSelect(color);\n setIsMoreMenuOpen(true); // Keep dropdown open\n }}\n />\n <span className=\"cteditor-flex-1 cteditor-text-sm\">Background Color</span>\n </div>\n <DropdownMenuSeparator />\n </>\n )}\n {enableLinks && activeEditor === editor && (\n <DropdownMenuItem onClick={insertLink}>\n <div className=\"cteditor-mr-2 [&>svg]:!cteditor-size-4\">\n <LinkIcon />\n </div>\n {isLinkActive ? \"Remove Link\" : \"Insert Link\"}\n </DropdownMenuItem>\n )}\n {enableEmojiPicker && (\n <div className=\"cteditor-w-full cteditor-flex cteditor-items-center cteditor-px-2 cteditor-py-1.5\">\n <EmojiPickerWidget\n key=\"emoji-picker-dropdown\"\n icon={\n <div className=\"cteditor-mr-2 [&>svg]:!cteditor-size-4\">\n <FaceSmileIcon />\n </div>\n }\n onChange={(emojiData) => {\n handleEmojiClick(emojiData);\n setIsMoreMenuOpen(true); // Keep dropdown open\n }}\n />\n <span className=\"cteditor-flex-1 cteditor-text-sm\">Emoji</span>\n </div>\n )}\n {enableInsertMenu && activeEditor === editor && (\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <InsertMenu />\n </div>\n </DropdownMenuItem>\n )}\n {enableTodoList && activeEditor === editor && (\n <DropdownMenuItem onClick={createTodo}>\n <div className=\"cteditor-mr-2 [&>svg]:!cteditor-size-4\">\n <TodoIcon />\n </div>\n Todo List\n </DropdownMenuItem>\n )}\n {enableNotePanels && activeEditor === editor && (\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <div className=\"[&>svg]:!cteditor-size-4\">\n <NotePanelMenu />\n </div>\n </div>\n </DropdownMenuItem>\n )}\n <div className=\"cteditor-w-full cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-px-2 cteditor-py-1.5\">\n <HighlightColorPicker\n onChange={(color) => {\n onHighlightColorSelect(color);\n setIsMoreMenuOpen(true); // Keep dropdown open\n }}\n isActive={toolbarState.isHighlight}\n />\n <span className=\"cteditor-flex-1 cteditor-text-sm\">Highlight</span>\n </div>\n <DropdownMenuSeparator />\n {enableAlignment && activeEditor === editor && (\n <>\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <AlignMenu />\n </div>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n {enableClearOptions && (\n <>\n <DropdownMenuItem onClick={handleClearEditorContent} disabled={isEditorEmpty}>\n <X className=\"!cteditor-size-4 cteditor-mr-2\" />\n Clear Editor\n </DropdownMenuItem>\n <DropdownMenuItem onClick={clearFormatting}>\n <Trash className=\"!cteditor-size-4 cteditor-mr-2\" />\n Clear Formatting\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-aiOption cteditor-w-full\" onClick={(e) => e.stopPropagation()}>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cteditor-w-full cteditor-px-4 cteditor-gap-3 [&>svg]:!cteditor-size-4\"\n >\n <MagicoonIcon /> Go with AI\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"right\" align=\"start\">\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"SPELLING_GRAMMAR\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <SearchTextIcon />\n </div>{\" \"}\n Fix Grammar\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"SIMPLIFY\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <PenLineIcon />\n </div>{\" \"}\n Simplify\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"COMPLETE_SENTENCE\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <MenuAltIcon />\n </div>\n Complete Sentence\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"EMOJIFY\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <FaceSmileIcon2 />\n </div>\n Emojify\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"TRANSLATE\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <TranslateIcon />\n </div>\n Translate\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_ACTION_COMMAND, { type: \"AI_RESPONSE\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <SparkleIcon />\n </div>\n AI\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => editor.dispatchCommand(AI_IMAGE_COMMAND, { type: \"CREATE_IMAGE\" })}\n >\n <div className=\"cteditor-mr-1 [&>svg]:cteditor-size-5\">\n <ImageIcon />\n </div>\n Generate Image\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n {enableAIChat && (\n <DropdownMenuItem onClick={toggleAIChat} disabled={!editable}>\n <div className=\"cteditor-mr-2 [&>svg]:!cteditor-size-5\">\n <MessageEditIcon />\n </div>\n AI Chat\n </DropdownMenuItem>\n )}\n <DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>\n <div className=\"cteditor-w-full cteditor-flex cteditor-items-center cteditor-gap-2\" onClick={(e) => e.stopPropagation()}>\n <VoiceTranscriptButton editor={activeEditor} />\n <span className=\"cteditor-flex-1\">Voice Transcript</span>\n </div>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n {enableAutocompleteToggle && (\n <DropdownMenuItem onClick={toggleAutocomplete} disabled={!editable}>\n <div className=\"cteditor-mr-2 [&>svg]:!cteditor-size-4\">\n <SearchTextIcon2 />\n </div>\n {toolbarState.isAutocompleteEnabled ? \"Disable Autocorrection\" : \"Enable Autocorrection\"}\n </DropdownMenuItem>\n )}\n {(enableHtmlViewToggle || enableHtmlView) && (\n <DropdownMenuItem onClick={toggleHtmlView} disabled={!editable}>\n <FileCode2 className=\"cteditor-mr-2 !cteditor-size-4\" />\n {isHtmlView ? \"Switch to Editor View\" : \"Switch to HTML View\"}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )}\n <VoiceTranscriptPlugin />\n </div>\n );\n};\n\nexport default Toolbar;","import { cn } from \"src/lib/utils\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-primary/10\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","\"use client\";\n\n// eslint-disable-next-line simple-import-sort/imports\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $getRoot,\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n createCommand,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_TAB_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport { CheckCircle, Lightbulb, Sparkles, Type } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { Card, CardContent } from \"src/components/ui/card\";\nimport { Skeleton } from \"src/components/ui/skeleton\";\nimport { Badge } from \"src/components/ui/badge\";\nimport { cn } from \"src/lib/utils\";\n\nexport interface AutocompleteOption {\n displayText: string;\n key: string;\n queryWordStart: number;\n queryWordEnd: number;\n type: \"suggestion\" | \"correction\" | \"spelling\" | \"enhancement\";\n confidence?: \"high\" | \"medium\" | \"low\";\n originalWord?: string;\n}\n\ninterface AutocompletePluginProps {\n onQueryChange?: (query: string | null) => void;\n onSelectOption?: (\n selectedOption: AutocompleteOption,\n nodeToReplace: any,\n closeMenu: () => void\n ) => void;\n minMatchLength?: number;\n maxSuggestions?: number;\n // anchorClassName?: string;\n // menuClassName?: string;\n // itemClassName?: string;\n // selectedItemClassName?: string;\n apiEndpoint?: string;\n enableAI?: boolean;\n debounceDelay?: number;\n}\n\nexport const AUTOCOMPLETE_COMMAND = createCommand<string>(\n \"AUTOCOMPLETE_COMMAND\"\n);\n\n// Static suggestions for testing and fallback\nconst STATIC_SUGGESTIONS = [\n \"javascript\",\n \"typescript\",\n \"lexical\",\n \"editor\",\n \"autocomplete\",\n \"suggestions\",\n \"keyboard\",\n \"navigation\",\n \"development\",\n \"programming\",\n \"function\",\n \"variable\",\n \"component\",\n \"interface\",\n \"implementation\",\n \"configuration\",\n \"initialization\",\n \"optimization\",\n \"documentation\",\n \"integration\",\n];\n\n// AI service functions\nclass AIService {\n private apiEndpoint: string;\n private cache: Map<string, any> = new Map();\n private requestTimeout = 10000; // 10 seconds timeout for more reliable responses\n private pendingRequests: Map<string, Promise<any>> = new Map();\n\n constructor(apiEndpoint = \"api/ai/process\") {\n this.apiEndpoint = import.meta.env.VITE_APP_BACKEND_ENDPOINT + apiEndpoint;\n }\n\n private async makeRequest(payload: any): Promise<any> {\n const cacheKey = JSON.stringify(payload);\n\n // Check cache first\n if (this.cache.has(cacheKey)) {\n return this.cache.get(cacheKey);\n }\n\n // Check if same request is already pending\n if (this.pendingRequests.has(cacheKey)) {\n return this.pendingRequests.get(cacheKey);\n }\n\n const requestPromise = this.executeRequest(payload, cacheKey);\n this.pendingRequests.set(cacheKey, requestPromise);\n\n try {\n const result = await requestPromise;\n return result;\n } finally {\n this.pendingRequests.delete(cacheKey);\n }\n }\n\n private async executeRequest(payload: any, cacheKey: string): Promise<any> {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.requestTimeout\n );\n\n console.log(\"🌐 AIService: Making request to:\", this.apiEndpoint);\n console.log(\"📦 AIService: Payload:\", {\n ...payload,\n text: payload.text?.substring(0, 100) + \"...\", // Log only first 100 chars\n });\n\n const response = await fetch(this.apiEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n console.log(\"📡 AIService: Response status:\", response.status);\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"❌ AIService: Error response:\", errorText);\n throw new Error(`AI service error: ${response.status} - ${errorText}`);\n }\n\n const result = await response.json();\n console.log(\"✅ AIService: Successful response received\");\n\n // Cache successful responses\n this.cache.set(cacheKey, result.data);\n\n // Limit cache size to 50 for better memory usage\n if (this.cache.size > 50) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n\n return result.data;\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n console.warn(\n \"⏰ AIService: Request timed out after\",\n this.requestTimeout,\n \"ms\"\n );\n } else {\n console.error(\"❌ AIService: Request failed:\", error);\n }\n return null;\n }\n }\n\n async getIntelligentSuggestions(\n currentWord: string,\n text: string,\n maxSuggestions = 5\n ): Promise<any> {\n // Only make request for meaningful text\n if (!text || text.length < 2 || /^\\s*$/.test(text)) {\n return null;\n }\n\n const result = await this.makeRequest({\n text: text.trim(), // Send the sentence/text for correction\n currentWord: currentWord?.trim(), // Send current word being typed (optional)\n maxSuggestions,\n });\n\n return result;\n }\n}\n\nexport default function AutocompletePlugin({\n onQueryChange,\n onSelectOption,\n minMatchLength = 2,\n maxSuggestions = 10,\n // anchorClassName = \"\",\n // menuClassName = \"\",\n // itemClassName = \"\",\n // selectedItemClassName = \"\",\n apiEndpoint = \"api/ai/process\",\n enableAI = true,\n debounceDelay = 200,\n}: AutocompletePluginProps): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [queryString, setQueryString] = useState<string | null>(null);\n const [suggestions, setSuggestions] = useState<AutocompleteOption[]>([]);\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const anchorElementRef = useRef<HTMLDivElement>(null);\n const [anchorElement, setAnchorElement] = useState<HTMLDivElement | null>(\n null\n );\n const aiService = useRef(new AIService(apiEndpoint));\n const debounceTimer = useRef<number | null>(null);\n const justSelectedOption = useRef(false);\n const lastRequestTime = useRef(0);\n const requestThrottle = 100; // Reduced throttle for more responsive AI requests\n\n\n // Extract all words from the editor for suggestions\n const extractWordsFromEditor = useCallback(() => {\n const words = new Set<string>();\n\n // Add static suggestions first\n STATIC_SUGGESTIONS.forEach((word) => words.add(word));\n\n editor.getEditorState().read(() => {\n const root = $getRoot();\n const textContent = root.getTextContent();\n\n // Extract words (alphanumeric + some special chars)\n const wordMatches = textContent.match(/\\b[a-zA-Z][a-zA-Z0-9_]*\\b/g);\n if (wordMatches) {\n wordMatches.forEach((word) => {\n if (word.length >= minMatchLength) {\n words.add(word);\n }\n });\n }\n });\n\n return Array.from(words);\n }, [editor, minMatchLength]);\n\n // Get AI-powered suggestions with optimization\n const getAISuggestions = useCallback(\n async (query: string): Promise<AutocompleteOption[]> => {\n if (!enableAI || !query || query.length < minMatchLength) {\n return [];\n }\n\n // Skip AI request if user just selected an option\n if (justSelectedOption.current) {\n console.log(\n \"🚫 AutocompletePlugin: Skipping AI request - just selected option\"\n );\n return [];\n }\n\n // Throttle AI requests\n const now = Date.now();\n if (now - lastRequestTime.current < requestThrottle) {\n console.log(\"🚫 AutocompletePlugin: Throttling AI request\");\n return [];\n }\n\n console.log(\"🤖 AutocompletePlugin: Getting AI suggestions for:\", query);\n setIsLoading(true);\n lastRequestTime.current = now;\n\n // Extract only the last sentence for autocorrection\n let lastSentence = \"\";\n let sentenceStart = 0;\n let sentenceEnd = 0;\n\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n const anchor = selection.anchor;\n const anchorNode = anchor.getNode();\n const anchorOffset = anchor.offset;\n const fullText = anchorNode.getTextContent();\n\n // Find the start of the current sentence (look backwards for sentence endings)\n sentenceStart = 0;\n for (let i = anchorOffset - 1; i >= 0; i--) {\n const char = fullText[i];\n if (char === \".\" || char === \"!\" || char === \"?\" || char === \"\\n\") {\n sentenceStart = i + 1;\n break;\n }\n }\n\n // Find the end of the current sentence (look forwards for sentence endings)\n sentenceEnd = fullText.length;\n for (let i = anchorOffset; i < fullText.length; i++) {\n const char = fullText[i];\n if (char === \".\" || char === \"!\" || char === \"?\" || char === \"\\n\") {\n sentenceEnd = i;\n break;\n }\n }\n\n // Extract the current sentence and trim whitespace\n lastSentence = fullText.slice(sentenceStart, sentenceEnd).trim();\n });\n\n // Only proceed if we have a meaningful sentence\n if (!lastSentence || lastSentence.length < 3) {\n setIsLoading(false);\n return [];\n }\n\n try {\n const result = await aiService.current.getIntelligentSuggestions(\n query, // currentWord\n lastSentence, // text (the sentence to correct)\n maxSuggestions // maxSuggestions\n );\n\n const aiOptions: AutocompleteOption[] = [];\n\n if (result) {\n // Add corrected sentences as suggestions (highest priority)\n if (result.corrections?.grammar?.errors?.length > 0) {\n result.corrections.grammar.errors.forEach((error: any) => {\n if (error.suggestion && error.suggestion !== lastSentence) {\n aiOptions.push({\n displayText: error.suggestion,\n key: `sentence-grammar-${error.suggestion}`,\n queryWordStart: sentenceStart,\n queryWordEnd: sentenceEnd,\n type: \"correction\",\n confidence: \"high\",\n originalWord: lastSentence,\n });\n }\n });\n }\n\n // Add spelling corrections within the sentence\n if (result.corrections?.spelling?.errors?.length > 0) {\n result.corrections.spelling.errors.forEach((error: any) => {\n if (error.suggestions && error.suggestions.length > 0) {\n error.suggestions.slice(0, 2).forEach((suggestion: string) => {\n // Create a corrected sentence with the spelling fix\n const correctedSentence = lastSentence.replace(\n new RegExp(`\\\\b${error.original}\\\\b`, \"gi\"),\n suggestion\n );\n if (correctedSentence !== lastSentence) {\n aiOptions.push({\n displayText: correctedSentence,\n key: `sentence-spell-${suggestion}`,\n queryWordStart: sentenceStart,\n queryWordEnd: sentenceEnd,\n type: \"spelling\",\n confidence: \"high\",\n originalWord: lastSentence,\n });\n }\n });\n }\n });\n }\n\n // Add enhanced versions of the sentence\n if (result.suggestions?.enhancements?.length > 0) {\n result.suggestions.enhancements\n .slice(0, 2)\n .forEach((enhancement: string) => {\n if (enhancement !== lastSentence) {\n aiOptions.push({\n displayText: enhancement,\n key: `sentence-enhance-${enhancement}`,\n queryWordStart: sentenceStart,\n queryWordEnd: sentenceEnd,\n type: \"enhancement\",\n confidence: \"medium\",\n originalWord: lastSentence,\n });\n }\n });\n }\n\n // Add alternative sentence phrasings\n if (result.suggestions?.alternatives?.length > 0) {\n result.suggestions.alternatives\n .slice(0, 2)\n .forEach((alternative: string) => {\n if (alternative !== lastSentence) {\n aiOptions.push({\n displayText: alternative,\n key: `sentence-alt-${alternative}`,\n queryWordStart: sentenceStart,\n queryWordEnd: sentenceEnd,\n type: \"suggestion\",\n confidence: \"medium\",\n originalWord: lastSentence,\n });\n }\n });\n }\n }\n\n console.log(\n \"✅ AutocompletePlugin: AI sentence corrections received:\",\n aiOptions\n );\n return aiOptions.slice(0, Math.floor(maxSuggestions * 0.8)); // More space for sentence suggestions\n } catch (error) {\n console.error(\"❌ AutocompletePlugin: AI suggestions failed:\", error);\n return [];\n } finally {\n setIsLoading(false);\n }\n },\n [enableAI, minMatchLength, maxSuggestions]\n );\n\n // Get traditional filtered suggestions\n const getTraditionalSuggestions = useCallback(\n (query: string): AutocompleteOption[] => {\n if (!query || query.length < minMatchLength) {\n return [];\n }\n\n const words = extractWordsFromEditor();\n const filtered = words\n .filter(\n (word) =>\n word.toLowerCase().startsWith(query.toLowerCase()) &&\n word.toLowerCase() !== query.toLowerCase()\n )\n .slice(0, Math.floor(maxSuggestions * 0.2)) // 20% for traditional suggestions (reduced for more AI space)\n .map((word) => ({\n displayText: word,\n key: `traditional-${word}`,\n queryWordStart: 0,\n queryWordEnd: query.length,\n type: \"suggestion\" as const,\n confidence: \"low\" as const,\n }));\n\n return filtered;\n },\n [extractWordsFromEditor, minMatchLength, maxSuggestions]\n );\n\n // Combined suggestions with optimization\n const getCombinedSuggestions = useCallback(\n async (query: string): Promise<AutocompleteOption[]> => {\n const traditionalSuggestions = getTraditionalSuggestions(query);\n\n if (!enableAI || justSelectedOption.current) {\n return traditionalSuggestions;\n }\n\n const aiSuggestions = await getAISuggestions(query);\n\n // Combine and deduplicate suggestions\n const combined = [...aiSuggestions, ...traditionalSuggestions];\n const seen = new Set<string>();\n const unique = combined.filter((option) => {\n const key = option.displayText.toLowerCase();\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n\n // Sort by priority: spelling > correction > suggestion > enhancement\n const priority = {\n spelling: 1,\n correction: 2,\n suggestion: 3,\n enhancement: 4,\n };\n unique.sort((a, b) => priority[a.type] - priority[b.type]);\n\n return unique.slice(0, maxSuggestions);\n },\n [getTraditionalSuggestions, getAISuggestions, enableAI, maxSuggestions]\n );\n\n // Check if we should show autocomplete\n const checkForAutocompleteTrigger = useCallback(() => {\n // Reset the selection flag after a short delay\n if (justSelectedOption.current) {\n setTimeout(() => {\n justSelectedOption.current = false;\n }, 100);\n return;\n }\n\n console.log(\"🎯 AutocompletePlugin: Checking for autocomplete trigger\");\n\n editor.update(() => {\n const selection = $getSelection();\n\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n setQueryString(null);\n return;\n }\n\n const anchor = selection.anchor;\n const anchorNode = anchor.getNode();\n const anchorOffset = anchor.offset;\n const textContent = anchorNode.getTextContent();\n\n // Find the start of the current word\n let wordStart = anchorOffset;\n while (\n wordStart > 0 &&\n /[a-zA-Z0-9_']/.test(textContent[wordStart - 1])\n ) {\n wordStart--;\n }\n\n // Get the current word being typed\n const currentWord = textContent.slice(wordStart, anchorOffset);\n\n if (currentWord.length >= minMatchLength) {\n setQueryString(currentWord);\n } else {\n setQueryString(null);\n }\n });\n }, [editor, minMatchLength]);\n\n // Update suggestions when query changes with debouncing\n useEffect(() => {\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n\n if (queryString && !justSelectedOption.current) {\n debounceTimer.current = setTimeout(async () => {\n console.log(\n \"🔄 AutocompletePlugin: Getting suggestions for:\",\n queryString\n );\n\n const newSuggestions = await getCombinedSuggestions(queryString);\n setSuggestions(newSuggestions);\n setSelectedIndex(0);\n onQueryChange?.(queryString);\n\n console.log(\n \"🎯 AutocompletePlugin: Updated suggestions:\",\n newSuggestions\n );\n }, debounceDelay);\n } else {\n setSuggestions([]);\n setSelectedIndex(0);\n onQueryChange?.(null);\n }\n\n return () => {\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n };\n }, [queryString, getCombinedSuggestions, onQueryChange, debounceDelay]);\n\n // Handle option selection with optimization\n const selectOption = useCallback(\n (option: AutocompleteOption) => {\n console.log(\"✅ AutocompletePlugin: Selecting option:\", option);\n\n // Set flag to prevent immediate AI requests\n justSelectedOption.current = true;\n\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n const anchor = selection.anchor;\n const anchorNode = anchor.getNode();\n const anchorOffset = anchor.offset;\n const textContent = anchorNode.getTextContent();\n\n // Check if this is a sentence correction/replacement\n const isSentenceReplacement = option.key.startsWith(\"sentence-\");\n\n if (isSentenceReplacement) {\n // Replace the entire sentence\n let sentenceStart = 0;\n let sentenceEnd = textContent.length;\n\n // Find the start of the current sentence (look backwards for sentence endings)\n for (let i = anchorOffset - 1; i >= 0; i--) {\n const char = textContent[i];\n if (char === \".\" || char === \"!\" || char === \"?\" || char === \"\\n\") {\n sentenceStart = i + 1;\n break;\n }\n }\n\n // Find the end of the current sentence (look forwards for sentence endings)\n for (let i = anchorOffset; i < textContent.length; i++) {\n const char = textContent[i];\n if (char === \".\" || char === \"!\" || char === \"?\" || char === \"\\n\") {\n sentenceEnd = i;\n break;\n }\n }\n\n // Skip whitespace at the beginning\n while (\n sentenceStart < textContent.length &&\n /\\s/.test(textContent[sentenceStart])\n ) {\n sentenceStart++;\n }\n\n if (anchorNode.getType() === \"text\") {\n const textNode = anchorNode as any;\n const newText =\n textContent.slice(0, sentenceStart) +\n option.displayText +\n textContent.slice(sentenceEnd);\n textNode.setTextContent(newText);\n\n // Set cursor position after the replaced sentence\n const newOffset = sentenceStart + option.displayText.length;\n selection.anchor.set(textNode.getKey(), newOffset, \"text\");\n selection.focus.set(textNode.getKey(), newOffset, \"text\");\n\n console.log(\n \"✅ AutocompletePlugin: Sentence replaced successfully\"\n );\n }\n } else {\n // Original word replacement logic\n // Find the start of the current word\n let wordStart = anchorOffset;\n while (\n wordStart > 0 &&\n /[a-zA-Z0-9_']/.test(textContent[wordStart - 1])\n ) {\n wordStart--;\n }\n\n // Replace the partial word with the selected option\n if (anchorNode.getType() === \"text\") {\n const textNode = anchorNode as any;\n const newText =\n textContent.slice(0, wordStart) +\n option.displayText +\n textContent.slice(anchorOffset);\n textNode.setTextContent(newText);\n\n // Set cursor position after the inserted text\n const newOffset = wordStart + option.displayText.length;\n selection.anchor.set(textNode.getKey(), newOffset, \"text\");\n selection.focus.set(textNode.getKey(), newOffset, \"text\");\n\n console.log(\"✅ AutocompletePlugin: Word replaced successfully\");\n }\n }\n });\n\n setQueryString(null);\n setSuggestions([]);\n onSelectOption?.(option, null, () => setQueryString(null));\n },\n [editor, onSelectOption]\n );\n\n // Keyboard navigation\n useEffect(() => {\n if (!queryString || suggestions.length === 0) return;\n\n const removeKeyDownListener = editor.registerCommand(\n KEY_ARROW_DOWN_COMMAND,\n (event) => {\n if (suggestions.length > 0 && event) {\n event.preventDefault();\n setSelectedIndex((prev) => (prev + 1) % suggestions.length);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n );\n\n const removeArrowUpListener = editor.registerCommand(\n KEY_ARROW_UP_COMMAND,\n (event) => {\n if (suggestions.length > 0 && event) {\n event.preventDefault();\n setSelectedIndex(\n (prev) => (prev - 1 + suggestions.length) % suggestions.length\n );\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n );\n\n const removeEscapeListener = editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n (event) => {\n if (queryString && event) {\n event.preventDefault();\n setQueryString(null);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n );\n\n const removeTabListener = editor.registerCommand(\n KEY_TAB_COMMAND,\n (event) => {\n if (suggestions.length > 0 && event) {\n event.preventDefault();\n selectOption(suggestions[selectedIndex]);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n );\n\n const removeEnterListener = editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event) => {\n if (suggestions.length > 0 && event) {\n event.preventDefault();\n selectOption(suggestions[selectedIndex]);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n );\n\n return () => {\n removeKeyDownListener();\n removeArrowUpListener();\n removeEscapeListener();\n removeTabListener();\n removeEnterListener();\n };\n }, [editor, queryString, suggestions, selectedIndex, selectOption]);\n\n // Listen for selection changes to trigger autocomplete\n useEffect(() => {\n const selectionListener = editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n checkForAutocompleteTrigger();\n return false;\n },\n COMMAND_PRIORITY_LOW\n );\n\n const inputListener = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n setTimeout(() => {\n checkForAutocompleteTrigger();\n }, 0);\n });\n });\n\n return () => {\n selectionListener();\n inputListener();\n };\n }, [editor, checkForAutocompleteTrigger]);\n\n // Calculate menu position\n const calculateMenuPosition = useCallback(() => {\n if (!anchorElement) return { top: 0, left: 0 };\n\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n const domSelection = window.getSelection();\n if (!domSelection || domSelection.rangeCount === 0) return;\n\n const range = domSelection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n\n if (anchorElementRef.current) {\n const currentElement = anchorElementRef.current;\n currentElement.style.top = `${rect.bottom + window.scrollY + 4}px`;\n currentElement.style.left = `${rect.left + window.scrollX}px`;\n }\n });\n }, [editor, anchorElement]);\n\n useEffect(() => {\n if (suggestions.length > 0) {\n calculateMenuPosition();\n }\n }, [suggestions, calculateMenuPosition]);\n\n // Create portal anchor element\n useEffect(() => {\n const anchor = document.createElement(\"div\");\n // anchor.className = anchorClassName;\n anchor.style.position = \"absolute\";\n anchor.style.zIndex = \"1000\";\n\n if (\n anchorElementRef.current &&\n document.body.contains(anchorElementRef.current)\n ) {\n try {\n document.body.removeChild(anchorElementRef.current);\n } catch (error) {\n console.warn(\n \"🚨 AutocompletePlugin: Error removing existing anchor:\",\n error\n );\n }\n }\n\n document.body.appendChild(anchor);\n (anchorElementRef as any).current = anchor;\n setAnchorElement(anchor);\n\n return () => {\n if (\n anchorElementRef.current &&\n document.body.contains(anchorElementRef.current)\n ) {\n try {\n document.body.removeChild(anchorElementRef.current);\n } catch (error) {\n console.warn(\"🚨 AutocompletePlugin: Error during cleanup:\", error);\n }\n }\n };\n }, []);\n // }, [anchorClassName]);\n\n // Get icon for suggestion type\n const getSuggestionIcon = (type: string) => {\n switch (type) {\n case \"spelling\":\n return <CheckCircle className=\"cteditor-h-3 cteditor-w-3\" />;\n case \"correction\":\n return <Type className=\"cteditor-h-3 cteditor-w-3\" />;\n case \"enhancement\":\n return <Lightbulb className=\"cteditor-h-3 cteditor-w-3\" />;\n default:\n return <Sparkles className=\"cteditor-h-3 cteditor-w-3\" />;\n }\n };\n\n // Get badge variant for suggestion type\n const getSuggestionVariant = (type: string) => {\n switch (type) {\n case \"spelling\":\n return \"destructive\";\n case \"correction\":\n return \"default\";\n case \"enhancement\":\n return \"secondary\";\n default:\n return \"outline\";\n }\n };\n\n // Render autocomplete menu\n if (\n !anchorElement ||\n !queryString ||\n (suggestions.length === 0 && !isLoading)\n ) {\n return null;\n }\n\n return createPortal(\n <Card\n ref={menuRef}\n className=\"cteditor-w-80 cteditor-max-h-64 cteditor-overflow-y-auto cteditor-shadow-lg cteditor-border\"\n >\n <CardContent className=\"cteditor-p-2\">\n {isLoading && (\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-p-3 cteditor-text-sm cteditor-text-muted-foreground\">\n <Skeleton className=\"cteditor-h-4 cteditor-w-4 cteditor-rounded-full\" />\n <span>Getting AI suggestions...</span>\n </div>\n )}\n <div className=\"cteditor-space-y-1\">\n {suggestions.map((option, index) => (\n <div\n key={option.key}\n className={cn(\n \"cteditor-flex cteditor-items-start cteditor-gap-3 cteditor-p-3 cteditor-rounded-md cteditor-cursor-pointer cteditor-transition-colors cteditor-text-sm\",\n index === selectedIndex\n ? \"cteditor-bg-background\"\n : \"hover:cteditor-bg-background/50\"\n )}\n onClick={() => selectOption(option)}\n onMouseEnter={() => setSelectedIndex(index)}\n >\n <div\n className={cn(\n \"cteditor-mt-0.5\",\n index === selectedIndex\n ? \"cteditor-text-primary\"\n : \"cteditor-text-primary\"\n )}\n >\n {getSuggestionIcon(option.type)}\n </div>\n <div className=\"cteditor-flex-1 cteditor-min-w-0\">\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-mb-1\">\n <Badge\n variant={\n index === selectedIndex\n ? \"secondary\"\n : getSuggestionVariant(option.type)\n }\n className=\"cteditor-text-xs\"\n >\n {option.type}\n </Badge>\n {option.confidence && (\n <p className=\"cteditor-text-xs cteditor-px-2 cteditor-py-0.5 cteditor-rounded-md cteditor-bg-muted/50 cteditor-text-foreground\">\n {option.confidence}\n </p>\n )}\n </div>\n <p className=\"cteditor-leading-relaxed cteditor-break-words\">\n {option.displayText}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>,\n anchorElement\n );\n}\n","import { registerCodeHighlighting } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FC, useEffect } from \"react\";\n\nconst CodeHighlightPlugin: FC = () => {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return registerCodeHighlighting(editor);\n }, [editor]);\n\n return null;\n};\n\nexport default CodeHighlightPlugin;\n","\"use client\";\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n createCommand,\n type LexicalCommand,\n} from \"lexical\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Button } from \"src/components/ui/button\";\nimport { Card, CardContent } from \"src/components/ui/card\";\nimport {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"src/components/ui/dialog\";\nimport { Textarea } from \"src/components/ui/textarea\";\nimport { useComments } from \"src/context/CommentContext\";\nimport { $createCommentedTextNode } from \"src/nodes/CommentedTextNode\";\n\nexport const INSERT_COMMENT_COMMAND: LexicalCommand<{\n text: string;\n}> = createCommand(\"INSERT_COMMENT_COMMAND\");\n\nexport const OPEN_COMMENT_MODAL_COMMAND = createCommand(\"OPEN_COMMENT_MODAL\");\n\ninterface CommentModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSubmit: (text: string) => void;\n selectedText?: string;\n}\n\nconst CommentModal: React.FC<CommentModalProps> = ({\n isOpen,\n onClose,\n onSubmit,\n selectedText,\n}) => {\n const [commentText, setCommentText] = useState(\"\");\n\n const handleSubmit = useCallback(() => {\n if (commentText.trim()) {\n onSubmit(commentText.trim());\n setCommentText(\"\");\n onClose();\n }\n }, [commentText, onSubmit, onClose]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleSubmit();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n onClose();\n }\n },\n [handleSubmit, onClose]\n );\n\n useEffect(() => {\n if (isOpen) {\n setCommentText(\"\");\n }\n }, [isOpen]);\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"sm:cteditor-max-w-lg\">\n <DialogHeader>\n <DialogTitle className=\"cteditor-flex cteditor-items-center cteditor-gap-3\">\n Add Comment\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"cteditor-space-y-4 cteditor-py-4\">\n {selectedText && (\n <Card className=\"cteditor-bg-primary/5 cteditor-border-primary/20\">\n <CardContent className=\"cteditor-p-2 cteditor-px-4\">\n <div className=\"cteditor-space-y-1\">\n <p className=\"cteditor-text-sm cteditor-font-medium\">\n Selected text:\n </p>\n <p className=\"cteditor-text-sm cteditor-italic cteditor-text-muted-foreground cteditor-leading-relaxed\">\n &ldquo;{selectedText}&rdquo;\n </p>\n </div>\n </CardContent>\n </Card>\n )}\n\n <div className=\"cteditor-space-y-2\">\n <Textarea\n value={commentText}\n onChange={(e) => setCommentText(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"cteditor-min-h-[120px] cteditor-resize-none\"\n placeholder=\"Write your comment here...\"\n autoFocus\n />\n <p className=\"cteditor-text-xs cteditor-text-muted-foreground\">\n Press Ctrl/Cmd + Enter to submit\n </p>\n </div>\n </div>\n\n <DialogFooter className=\"cteditor-flex cteditor-justify-between cteditor-items-center\">\n <div className=\"cteditor-flex cteditor-gap-2\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={!commentText.trim()}>\n Add Comment\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst CommentPlugin: React.FC = () => {\n const [editor] = useLexicalComposerContext();\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [selectedText, setSelectedText] = useState<string>(\"\");\n const { addComment } = useComments();\n\n const handleInsertComment = useCallback(\n (text: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const selectedText = selection.getTextContent();\n if (selectedText.trim()) {\n // Add comment to context/state\n const commentId = addComment({\n text,\n author: \"Anonymous\",\n selectedText,\n });\n\n // Create a commented text node that highlights the selected text\n const commentedTextNode = $createCommentedTextNode(\n selectedText,\n commentId,\n text, // The actual comment text\n \"Anonymous\",\n Date.now()\n );\n\n // Replace the selected text with the commented text node\n selection.insertNodes([commentedTextNode]);\n }\n }\n });\n },\n [editor, addComment]\n );\n\n const handleOpenModal = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const text = selection.getTextContent();\n setSelectedText(text);\n }\n });\n setIsModalOpen(true);\n }, [editor]);\n\n const handleCloseModal = useCallback(() => {\n setIsModalOpen(false);\n setSelectedText(\"\");\n }, []);\n\n useEffect(() => {\n return editor.registerCommand(\n INSERT_COMMENT_COMMAND,\n ({ text }) => {\n handleInsertComment(text);\n return true;\n },\n COMMAND_PRIORITY_LOW\n );\n }, [editor, handleInsertComment]);\n\n // Register a global command to open the comment modal\n useEffect(() => {\n const openCommentModal = () => {\n handleOpenModal();\n return true;\n };\n\n return editor.registerCommand(\n OPEN_COMMENT_MODAL_COMMAND,\n openCommentModal,\n COMMAND_PRIORITY_LOW\n );\n }, [editor, handleOpenModal]);\n\n return (\n <CommentModal\n isOpen={isModalOpen}\n onClose={handleCloseModal}\n onSubmit={handleInsertComment}\n selectedText={selectedText}\n />\n );\n};\n\nexport default CommentPlugin;\n","import \"./FloatingEmbedMenuPlugin.css\";\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport CodeIcon from \"@mui/icons-material/Code\";\nimport ContentCopyIcon from \"@mui/icons-material/ContentCopy\";\nimport CropOriginalIcon from \"@mui/icons-material/CropOriginal\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport FormatAlignCenterIcon from \"@mui/icons-material/FormatAlignCenter\";\nimport FormatAlignLeftIcon from \"@mui/icons-material/FormatAlignLeft\";\nimport FormatAlignRightIcon from \"@mui/icons-material/FormatAlignRight\";\n// Material UI icons\nimport LinkIcon from \"@mui/icons-material/Link\";\nimport OpenInNewIcon from \"@mui/icons-material/OpenInNew\";\nimport {\n $createNodeSelection,\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n $setSelection,\n COMMAND_PRIORITY_LOW,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { EmbedNode } from \"src/nodes/EmbedNode\";\n\ntype FloatingEmbedMenuProps = {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n nodeKey: string;\n url: string;\n onClose: () => void;\n};\n\nfunction FloatingEmbedMenu({\n editor,\n anchorElem,\n nodeKey,\n url,\n onClose,\n}: FloatingEmbedMenuProps): JSX.Element {\n const menuRef = useRef<HTMLDivElement>(null);\n const animationFrameRef = useRef<number>();\n const [displayType, setDisplayType] = useState<\"url\" | \"card\" | \"embed\">(\n \"embed\"\n );\n const [alignment, setAlignment] = useState<\"left\" | \"center\" | \"right\">(\n \"left\"\n );\n const [isMenuVisible, setIsMenuVisible] = useState<boolean>(false);\n\n // Real-time position update function\n const updatePosition = useCallback(() => {\n const menu = menuRef.current;\n if (!menu) return;\n\n const rootElement = editor.getRootElement();\n const embedElement = rootElement?.querySelector(\n `[data-lexical-node-key=\"${nodeKey}\"]`\n );\n\n if (embedElement) {\n const embedRect = embedElement.getBoundingClientRect();\n const menuRect = menu.getBoundingClientRect();\n const anchorRect = anchorElem.getBoundingClientRect();\n\n // Calculate centered position\n const embedCenterX = embedRect.left + embedRect.width / 2;\n const menuCenterX = menuRect.width / 2;\n\n // Position above the embed, centered horizontally\n let top = embedRect.top - menuRect.height - 15; // 15px gap above embed\n let left = embedCenterX - menuCenterX;\n\n // Ensure menu doesn't go off the left edge of the screen\n if (left < 10) {\n left = 10;\n }\n\n // Ensure menu doesn't go off the right edge of the screen\n const rightEdge = left + menuRect.width;\n if (rightEdge > window.innerWidth - 10) {\n left = window.innerWidth - menuRect.width - 10;\n }\n\n // If it would go off the top of the screen, position below\n if (top < 10) {\n top = embedRect.bottom + 15; // 15px gap below embed\n }\n\n // Adjust for anchor element position\n top -= anchorRect.top;\n left -= anchorRect.left;\n\n // Apply position with smooth transition\n menu.style.opacity = \"1\";\n menu.style.transform = `translate(${left}px, ${top}px)`;\n\n // Make menu visible if it wasn't already\n if (!isMenuVisible) {\n menu.style.display = \"flex\";\n menu.style.visibility = \"visible\";\n menu.style.zIndex = \"9999\";\n setIsMenuVisible(true);\n }\n } else {\n // Hide menu if embed element not found\n menu.style.opacity = \"0\";\n menu.style.visibility = \"hidden\";\n }\n }, [editor, nodeKey, anchorElem, isMenuVisible]);\n\n // Continuous position tracking using requestAnimationFrame\n const startPositionTracking = useCallback(() => {\n const trackPosition = () => {\n updatePosition();\n animationFrameRef.current = requestAnimationFrame(trackPosition);\n };\n\n // Start the tracking loop\n animationFrameRef.current = requestAnimationFrame(trackPosition);\n }, [updatePosition]);\n\n const stopPositionTracking = useCallback(() => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n animationFrameRef.current = undefined;\n }\n }, []);\n\n // Start position tracking when component mounts\n useEffect(() => {\n startPositionTracking();\n\n return () => {\n stopPositionTracking();\n };\n }, [startPositionTracking, stopPositionTracking]);\n\n // Force menu visibility on mount\n useEffect(() => {\n const menu = menuRef.current;\n if (menu) {\n // Force visibility with a slight delay to ensure DOM is ready\n const timer = setTimeout(() => {\n menu.style.display = \"flex\";\n menu.style.opacity = \"1\";\n menu.style.visibility = \"visible\";\n menu.style.zIndex = \"9999\";\n setIsMenuVisible(true);\n console.log(\"Forced menu visibility via direct DOM manipulation\");\n }, 100);\n\n return () => clearTimeout(timer);\n }\n }, []);\n\n // Listen for custom embedNodeSelected event for this specific node\n useEffect(() => {\n const handleEmbedNodeSelected = (e: Event) => {\n const customEvent = e as CustomEvent;\n const { nodeKey: eventNodeKey } = customEvent.detail;\n\n // Only handle events for this node\n if (eventNodeKey === nodeKey) {\n console.log(\"Handling embedNodeSelected event for this node\");\n // The continuous tracking will handle positioning\n setIsMenuVisible(true);\n }\n };\n\n document.addEventListener(\"embedNodeSelected\", handleEmbedNodeSelected);\n return () => {\n document.removeEventListener(\n \"embedNodeSelected\",\n handleEmbedNodeSelected\n );\n };\n }, [nodeKey]);\n\n // Initialize displayType and alignment from the node\n useEffect(() => {\n editor.getEditorState().read(() => {\n const node = $getNodeByKey(nodeKey);\n if (node instanceof EmbedNode) {\n // Get current display type\n if (typeof node.getDisplayType === \"function\") {\n setDisplayType(node.getDisplayType());\n }\n\n // Get current alignment\n if (typeof node.getAlignment === \"function\") {\n setAlignment(node.getAlignment());\n }\n }\n });\n }, [editor, nodeKey]);\n\n // Handle display type change\n const handleDisplayTypeChange = (type: \"url\" | \"card\" | \"embed\") => {\n setDisplayType(type);\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if (node instanceof EmbedNode) {\n if (typeof node.setDisplayType === \"function\") {\n node.setDisplayType(type);\n }\n }\n });\n };\n\n // Handle alignment change\n const handleAlignmentChange = (align: \"left\" | \"center\" | \"right\") => {\n setAlignment(align);\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if (node instanceof EmbedNode) {\n if (typeof node.setAlignment === \"function\") {\n node.setAlignment(align);\n }\n }\n });\n };\n\n // Handle open in new tab\n const handleOpenInNewTab = (e: React.MouseEvent) => {\n e.stopPropagation();\n window.open(url, \"_blank\");\n };\n\n // Handle remove embed\n const handleRemoveEmbed = (e: React.MouseEvent) => {\n e.stopPropagation();\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if (node) {\n node.remove();\n }\n });\n onClose();\n };\n\n // Handle copy URL\n const handleCopyUrl = (e: React.MouseEvent) => {\n e.stopPropagation();\n navigator.clipboard.writeText(url).then(() => {\n // Could show a toast notification here\n console.log(\"URL copied to clipboard\");\n });\n };\n\n // Close the menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n // Check if the click is on an embed element\n const target = e.target as HTMLElement;\n const isClickOnEmbed = target.closest(\"[data-embed-type]\");\n\n // Only close if not clicking on an embed\n if (!isClickOnEmbed) {\n onClose();\n }\n }\n };\n\n // Only add the listener if the menu is visible\n if (isMenuVisible) {\n // Use a slight delay to avoid immediate closing\n setTimeout(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }, 100);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [onClose, isMenuVisible]);\n\n // Prevent clicks on the menu from closing it\n const handleMenuClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n return (\n <div\n className=\"floating-embed-menu\"\n ref={menuRef}\n onClick={handleMenuClick}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n opacity: 0,\n visibility: \"hidden\",\n zIndex: 9999,\n transition: \"opacity 0.15s ease-in-out\",\n }}\n >\n <div className=\"embed-menu-section\">\n {/* <div className=\"embed-menu-section-title\">Preview</div> */}\n <div className=\"embed-menu-buttons\">\n <button\n className={`embed-menu-button ${displayType === \"url\" ? \"active\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleDisplayTypeChange(\"url\");\n }}\n title=\"URL\"\n >\n <LinkIcon fontSize=\"small\" />\n </button>\n <button\n className={`embed-menu-button ${displayType === \"card\" ? \"active\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleDisplayTypeChange(\"card\");\n }}\n title=\"Card\"\n >\n <CropOriginalIcon fontSize=\"small\" />\n </button>\n <button\n className={`embed-menu-button ${displayType === \"embed\" ? \"active\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleDisplayTypeChange(\"embed\");\n }}\n title=\"Embedded\"\n >\n <CodeIcon fontSize=\"small\" />\n </button>\n </div>\n </div>\n\n <div className=\"embed-menu-divider\"></div>\n\n <div className=\"embed-menu-section\">\n {/* <div className=\"embed-menu-section-title\">Alignment</div> */}\n <div className=\"embed-menu-buttons\">\n <button\n className={`embed-menu-button ${alignment === \"left\" ? \"active\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleAlignmentChange(\"left\");\n }}\n title=\"Left\"\n >\n <FormatAlignLeftIcon fontSize=\"small\" />\n </button>\n <button\n className={`embed-menu-button ${alignment === \"center\" ? \"active\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleAlignmentChange(\"center\");\n }}\n title=\"Center\"\n >\n <FormatAlignCenterIcon fontSize=\"small\" />\n </button>\n <button\n className={`embed-menu-button ${alignment === \"right\" ? \"active\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleAlignmentChange(\"right\");\n }}\n title=\"Right\"\n >\n <FormatAlignRightIcon fontSize=\"small\" />\n </button>\n </div>\n </div>\n\n <div className=\"embed-menu-divider\"></div>\n\n <div className=\"embed-menu-section\">\n <div className=\"embed-menu-buttons\">\n <button\n className=\"embed-menu-button\"\n onClick={handleOpenInNewTab}\n title=\"Open in new tab\"\n >\n <OpenInNewIcon fontSize=\"small\" />\n </button>\n <button\n className=\"embed-menu-button\"\n onClick={handleRemoveEmbed}\n title=\"Remove\"\n >\n <DeleteIcon fontSize=\"small\" />\n </button>\n <button\n className=\"embed-menu-button\"\n onClick={handleCopyUrl}\n title=\"Copy\"\n >\n <ContentCopyIcon fontSize=\"small\" />\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nfunction useFloatingEmbedMenu(\n editor: LexicalEditor,\n anchorElem: HTMLElement\n): JSX.Element | null {\n const [activeNodeKey, setActiveNodeKey] = useState<string | null>(null);\n const [embedUrl, setEmbedUrl] = useState<string>(\"\");\n\n // Function to check if a URL is for YouTube, Loom, or Vimeo\n const isVideoEmbedUrl = (url: string) => {\n return (\n url.includes(\"youtube.com\") ||\n url.includes(\"youtu.be\") ||\n url.includes(\"loom.com\") ||\n url.includes(\"vimeo.com\")\n );\n };\n\n // Listen for custom embedNodeSelected event\n useEffect(() => {\n const handleEmbedNodeSelected = (e: Event) => {\n const customEvent = e as CustomEvent;\n const { nodeKey, url } = customEvent.detail;\n\n console.log(\"Received embedNodeSelected event in useFloatingEmbedMenu:\", {\n nodeKey,\n url,\n });\n\n if (nodeKey && url && isVideoEmbedUrl(url)) {\n console.log(\"Setting active node from custom event\");\n setActiveNodeKey(nodeKey);\n setEmbedUrl(url);\n }\n };\n\n document.addEventListener(\"embedNodeSelected\", handleEmbedNodeSelected);\n return () => {\n document.removeEventListener(\n \"embedNodeSelected\",\n handleEmbedNodeSelected\n );\n };\n }, [isVideoEmbedUrl]);\n\n // Function to find and activate an embed node from a DOM element\n const findAndActivateEmbedNode = useCallback(\n (element: HTMLElement | null) => {\n if (!element) return;\n\n console.log(\"Click detected on element:\", element);\n\n // Check if we clicked on an embed container or one of its children\n const embedContainer = element.closest(\"[data-lexical-node-key]\");\n if (!embedContainer) {\n console.log(\"No embed container found with data-lexical-node-key\");\n return;\n }\n\n const nodeKey = embedContainer.getAttribute(\"data-lexical-node-key\");\n if (!nodeKey) {\n console.log(\"No nodeKey found in embed container\");\n return;\n }\n\n console.log(\"Found nodeKey:\", nodeKey);\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n console.log(\"Node found:\", node);\n\n if (node instanceof EmbedNode) {\n const url =\n typeof node.getURL === \"function\"\n ? node.getURL()\n : (node as any).__url;\n console.log(\"Embed URL:\", url);\n\n // Only show menu for YouTube, Loom, or Vimeo embeds\n if (isVideoEmbedUrl(url)) {\n console.log(\"Video embed URL detected, activating menu\");\n\n // Create a node selection to select this node\n const nodeSelection = $createNodeSelection();\n nodeSelection.add(nodeKey);\n $setSelection(nodeSelection);\n\n setActiveNodeKey(nodeKey);\n setEmbedUrl(url);\n } else {\n console.log(\"Not a video embed URL\");\n }\n } else {\n console.log(\"Node is not an EmbedNode\");\n }\n });\n },\n [editor, isVideoEmbedUrl]\n );\n\n const updateMenu = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n\n // Check if it's a node selection (user clicked on the embed)\n if ($isNodeSelection(selection)) {\n const nodes = selection.getNodes();\n const node = nodes[0];\n\n // Check if the selected node is an EmbedNode\n if (node instanceof EmbedNode) {\n const url =\n typeof node.getURL === \"function\"\n ? node.getURL()\n : (node as any).__url;\n\n // Only show menu for YouTube, Loom, or Vimeo embeds\n if (isVideoEmbedUrl(url)) {\n setActiveNodeKey(node.getKey());\n setEmbedUrl(url);\n return;\n }\n }\n }\n\n // If we get here, we should hide the menu\n setActiveNodeKey(null);\n });\n }, [editor, isVideoEmbedUrl]);\n\n // Handle clicks on the document to detect clicks on embeds\n useEffect(() => {\n const handleClick = (e: MouseEvent) => {\n console.log(\"Document click detected\");\n const target = e.target as HTMLElement;\n\n // First, try to find by data-embed-type attribute\n const embedElement = target.closest(\n '[data-embed-type=\"youtube\"], [data-embed-type=\"loom\"], [data-embed-type=\"vimeo\"]'\n );\n if (embedElement) {\n console.log(\"Found embed element by data-embed-type:\", embedElement);\n const nodeKey = embedElement.getAttribute(\"data-lexical-node-key\");\n if (nodeKey) {\n console.log(\"Found nodeKey from embed element:\", nodeKey);\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if (node instanceof EmbedNode) {\n const url =\n typeof node.getURL === \"function\"\n ? node.getURL()\n : (node as any).__url;\n console.log(\"Setting active node with URL:\", url);\n\n // Create a node selection to select this node\n const nodeSelection = $createNodeSelection();\n nodeSelection.add(nodeKey);\n $setSelection(nodeSelection);\n\n setActiveNodeKey(nodeKey);\n setEmbedUrl(url);\n }\n });\n return;\n }\n }\n\n // If not found by data-embed-type, try the regular method\n findAndActivateEmbedNode(target);\n };\n\n // Use mousedown instead of click for better responsiveness\n document.addEventListener(\"mousedown\", handleClick);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n };\n }, [editor, findAndActivateEmbedNode]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updateMenu();\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateMenu();\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n }, [editor, updateMenu]);\n\n const handleClose = useCallback(() => {\n setActiveNodeKey(null);\n }, []);\n\n if (!activeNodeKey) {\n return null;\n }\n\n return createPortal(\n <FloatingEmbedMenu\n editor={editor}\n anchorElem={anchorElem}\n nodeKey={activeNodeKey}\n url={embedUrl}\n onClose={handleClose}\n />,\n anchorElem\n );\n}\n\nexport default function FloatingEmbedMenuPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n return useFloatingEmbedMenu(editor, anchorElem);\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $createNodeSelection,\n $getNodeByKey,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n} from \"lexical\";\nimport React, { useEffect } from \"react\";\nimport { $createEmbedNode, EmbedNode } from \"src/nodes/EmbedNode\";\n\nimport FloatingEmbedMenuPlugin from \"./FloatingEmbedMenuPlugin\";\n\ninterface EmbedPreviewPluginProps {\n floatingAnchorElem?: HTMLElement;\n}\n\nconst EmbedPreviewPlugin: React.FC<EmbedPreviewPluginProps> = ({\n floatingAnchorElem = document.body,\n}) => {\n const [editor] = useLexicalComposerContext();\n\n // Add a global click handler to detect clicks on embeds\n useEffect(() => {\n const handleClick = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n\n // First check if the click was on a download link before doing anything else\n const downloadLink = target.closest('a[download], a[href*=\".mp4\"], a[href*=\".webm\"], a[href*=\".ogg\"], a[href*=\".pdf\"], a[href*=\".doc\"], a[href*=\".docx\"], a[href*=\".xls\"], a[href*=\".xlsx\"], a[href*=\".ppt\"], a[href*=\".pptx\"], a[href*=\".zip\"], a[href*=\".rar\"], a[href*=\".txt\"], a[href*=\".csv\"], a[href*=\".json\"], a[href*=\".png\"], a[href*=\".jpg\"], a[href*=\".jpeg\"], a[href*=\".gif\"], a[href*=\".webp\"], a[href*=\".svg\"]');\n if (downloadLink) {\n // Allow download links to work normally\n console.log(\"Allowing download link to proceed\");\n return;\n }\n\n // Check if we clicked on an embed container or one of its children\n const embedContainer = target.closest(\"[data-lexical-node-key]\");\n if (!embedContainer) return;\n\n // Check if this is actually an EmbedNode by looking for specific attributes\n const isEmbed =\n embedContainer.querySelector(\"iframe\") ||\n embedContainer.querySelector(\"video\") ||\n embedContainer.getAttribute(\"data-embed-type\");\n\n if (!isEmbed) return;\n\n const nodeKey = embedContainer.getAttribute(\"data-lexical-node-key\");\n if (!nodeKey) return;\n\n console.log(\"Global click handler detected embed:\", nodeKey);\n\n // Prevent default behavior to avoid navigation (but not for downloads)\n e.preventDefault();\n e.stopPropagation();\n\n // Create and dispatch a custom event\n const rect = embedContainer.getBoundingClientRect();\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if (node instanceof EmbedNode) {\n const url = (node as any).__url;\n\n // Create a node selection\n const nodeSelection = $createNodeSelection();\n nodeSelection.add(nodeKey);\n $setSelection(nodeSelection);\n\n // Dispatch custom event\n const event = new CustomEvent(\"embedNodeSelected\", {\n detail: {\n nodeKey,\n url,\n rect,\n },\n bubbles: true,\n });\n document.dispatchEvent(event);\n console.log(\"Dispatched embedNodeSelected event\");\n }\n });\n };\n\n // Use capture phase to ensure we get the event before other handlers\n document.addEventListener(\"click\", handleClick, true);\n return () => {\n document.removeEventListener(\"click\", handleClick, true);\n };\n }, [editor]);\n\n useEffect(() => {\n const handlePaste = (event: ClipboardEvent) => {\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\n\n const text = clipboardData.getData(\"text\");\n console.log(\"Pasted text:\", text);\n\n // Check if it's a Supercut URL\n if (text.includes(\"supercut.video\")) {\n console.log(\"Detected Supercut URL\");\n event.preventDefault();\n\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n // Remove any existing text in selection before inserting EmbedNode\n selection.getNodes().forEach((node) => node.remove());\n\n // Create the embed node with default settings\n const embedNode = $createEmbedNode(text);\n embedNode.setDisplayType(\"embed\");\n\n // Insert the node\n selection.insertNodes([embedNode]);\n console.log(\"Inserted Supercut embed node\");\n }\n });\n return;\n }\n\n if (text.match(/https?:\\/\\//)) {\n event.preventDefault(); // Prevents the link text from being inserted\n\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n // Remove any existing text in selection before inserting EmbedNode\n selection.getNodes().forEach((node) => node.remove());\n\n // Create the embed node with default settings\n const embedNode = $createEmbedNode(text);\n\n // Set default display type based on URL\n if (\n text.includes(\"youtube.com\") ||\n text.includes(\"youtu.be\") ||\n text.includes(\"vimeo.com\") ||\n text.includes(\"loom.com\") ||\n text.includes(\"supercut.video\")\n ) {\n embedNode.setDisplayType(\"embed\");\n } else if (text.match(/\\.(pdf|docx?|xlsx?|pptx?|zip|rar|txt)$/)) {\n embedNode.setDisplayType(\"card\");\n } else {\n embedNode.setDisplayType(\"url\");\n }\n\n // Insert the node\n selection.insertNodes([embedNode]);\n\n console.log(\"Inserted embed node with URL:\", text);\n }\n });\n }\n };\n\n document.addEventListener(\"paste\", handlePaste);\n return () => document.removeEventListener(\"paste\", handlePaste);\n }, [editor]);\n\n return (\n <>\n <FloatingEmbedMenuPlugin anchorElem={floatingAnchorElem} />\n </>\n );\n};\n\nexport default EmbedPreviewPlugin;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nconst VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPositionForLinkEditor(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET\n): void {\n const scrollerElem = anchorElem.parentElement;\n\n if (targetRect === null || !scrollerElem) {\n floatingElem.style.opacity = \"0\";\n floatingElem.style.transform = \"translate(-10000px, -10000px)\";\n return;\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect();\n const anchorElementRect = anchorElem.getBoundingClientRect();\n const editorScrollerRect = scrollerElem.getBoundingClientRect();\n\n let top = targetRect.top - verticalGap;\n let left = targetRect.left - horizontalOffset;\n\n if (top < editorScrollerRect.top) {\n top += floatingElemRect.height + targetRect.height + verticalGap * 2;\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\n }\n\n top -= anchorElementRect.top;\n left -= anchorElementRect.left;\n\n floatingElem.style.opacity = \"1\";\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport \"./index.css\";\n\nimport {\n $createLinkNode,\n $isAutoLinkNode,\n $isLinkNode,\n TOGGLE_LINK_COMMAND,\n} from \"@lexical/link\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n BaseSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n KEY_ESCAPE_COMMAND,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport { Check, Edit2, Trash, X } from \"lucide-react\";\nimport type { JSX } from \"react\";\nimport { Dispatch, useCallback, useEffect, useRef, useState } from \"react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport getSelectedNode from \"src/utils/getSelectedNode\";\nimport { setFloatingElemPositionForLinkEditor } from \"src/utils/setFloatingElemPositionForLinkEditor\";\nimport { sanitizeUrl } from \"src/utils/url\";\n\nfunction preventDefault(\n event: React.KeyboardEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>\n): void {\n event.preventDefault();\n}\n\nfunction FloatingLinkEditor({\n editor,\n isLink,\n setIsLink,\n anchorElem,\n isLinkEditMode,\n setIsLinkEditMode,\n}: {\n editor: LexicalEditor;\n isLink: boolean;\n setIsLink: Dispatch<boolean>;\n anchorElem: HTMLElement;\n isLinkEditMode: boolean;\n setIsLinkEditMode: Dispatch<boolean>;\n}): JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const [editedLinkUrl, setEditedLinkUrl] = useState(\"https://\");\n const [lastSelection, setLastSelection] = useState<BaseSelection | null>(\n null\n );\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection);\n const linkParent = $findMatchingParent(node, $isLinkNode);\n\n if (linkParent) {\n setLinkUrl(linkParent.getURL());\n } else if ($isLinkNode(node)) {\n setLinkUrl(node.getURL());\n } else {\n setLinkUrl(\"\");\n }\n if (isLinkEditMode) {\n setEditedLinkUrl(linkUrl);\n }\n }\n const editorElem = editorRef.current;\n const nativeSelection = getDOMSelection(editor._window);\n const activeElement = document.activeElement;\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n\n if (\n selection !== null &&\n nativeSelection !== null &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\n ) {\n const domRect: DOMRect | undefined =\n nativeSelection.focusNode?.parentElement?.getBoundingClientRect();\n if (domRect) {\n domRect.y += 40;\n setFloatingElemPositionForLinkEditor(domRect, editorElem, anchorElem);\n }\n setLastSelection(selection);\n } else if (!activeElement || activeElement.className !== \"link-input\") {\n if (rootElement !== null) {\n setFloatingElemPositionForLinkEditor(null, editorElem, anchorElem);\n }\n setLastSelection(null);\n setIsLinkEditMode(false);\n setLinkUrl(\"\");\n }\n\n return true;\n }, [anchorElem, editor, setIsLinkEditMode, isLinkEditMode, linkUrl]);\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateLinkEditor();\n });\n };\n\n window.addEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [anchorElem.parentElement, editor, $updateLinkEditor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateLinkEditor();\n });\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateLinkEditor();\n return true;\n },\n COMMAND_PRIORITY_LOW\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setIsLink(false);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH\n )\n );\n }, [editor, $updateLinkEditor, setIsLink, isLink]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateLinkEditor();\n });\n }, [editor, $updateLinkEditor]);\n\n useEffect(() => {\n if (isLinkEditMode && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isLinkEditMode, isLink]);\n\n const monitorInputInteraction = (\n event: React.KeyboardEvent<HTMLInputElement>\n ) => {\n if (event.key === \"Enter\") {\n handleLinkSubmission(event);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n setIsLinkEditMode(false);\n }\n };\n\n const handleLinkSubmission = (\n event: React.KeyboardEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>\n ) => {\n event.preventDefault();\n if (lastSelection !== null) {\n if (linkUrl !== \"\") {\n editor.update(() => {\n editor.dispatchCommand(\n TOGGLE_LINK_COMMAND,\n sanitizeUrl(editedLinkUrl)\n );\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const parent = getSelectedNode(selection).getParent();\n if ($isAutoLinkNode(parent)) {\n const linkNode = $createLinkNode(parent.getURL(), {\n rel: parent.__rel,\n target: parent.__target,\n title: parent.__title,\n });\n parent.replace(linkNode, true);\n }\n }\n });\n }\n setEditedLinkUrl(\"https://\");\n setIsLinkEditMode(false);\n }\n };\n\n return (\n <div\n ref={editorRef}\n className=\"link-editor bg-foreground text-background rounded-lg\"\n >\n {!isLink ? null : isLinkEditMode ? (\n <>\n <input\n ref={inputRef}\n className=\"link-input border border-background/20 bg-transparent\"\n value={editedLinkUrl}\n onChange={(event) => {\n setEditedLinkUrl(event.target.value);\n }}\n onKeyDown={(event) => {\n monitorInputInteraction(event);\n }}\n />\n <div>\n <div\n className=\"link-cancel flex items-center justify-center hover:opacity-70\"\n role=\"button\"\n tabIndex={0}\n onMouseDown={preventDefault}\n onClick={() => {\n setIsLinkEditMode(false);\n }}\n >\n <X className=\"size-4\" />\n </div>\n\n <div\n className=\"link-confirm flex items-center justify-center hover:opacity-70\"\n role=\"button\"\n tabIndex={0}\n onMouseDown={preventDefault}\n onClick={handleLinkSubmission}\n >\n <Check className=\"size-4\" />\n </div>\n </div>\n </>\n ) : (\n <div className=\"link-view text-background\">\n <a\n href={sanitizeUrl(linkUrl)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {linkUrl}\n </a>\n <div\n className=\"link-edit flex items-center justify-center hover:text-background/70\"\n role=\"button\"\n tabIndex={0}\n onMouseDown={preventDefault}\n onClick={(event) => {\n event.preventDefault();\n setEditedLinkUrl(linkUrl);\n setIsLinkEditMode(true);\n }}\n >\n <Edit2 className=\"size-4\" />\n </div>\n <div\n className=\"link-trash flex items-center justify-center hover:text-background/70\"\n role=\"button\"\n tabIndex={0}\n onMouseDown={preventDefault}\n onClick={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }}\n >\n <Trash className=\"size-4\" />\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction useFloatingLinkEditorToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isLinkEditMode: boolean,\n setIsLinkEditMode: Dispatch<boolean>\n): JSX.Element | null {\n const [activeEditor, setActiveEditor] = useState(editor);\n const [isLink, setIsLink] = useState(false);\n\n useEffect(() => {\n function $updateToolbar() {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const focusNode = getSelectedNode(selection);\n const focusLinkNode = $findMatchingParent(focusNode, $isLinkNode);\n const focusAutoLinkNode = $findMatchingParent(\n focusNode,\n $isAutoLinkNode\n );\n if (!(focusLinkNode || focusAutoLinkNode)) {\n setIsLink(false);\n return;\n }\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode);\n const autoLinkNode = $findMatchingParent(node, $isAutoLinkNode);\n return (\n (focusLinkNode && !focusLinkNode.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkNode)) ||\n (focusAutoLinkNode && !focusAutoLinkNode.is(autoLinkNode)) ||\n (autoLinkNode &&\n (!autoLinkNode.is(focusAutoLinkNode) ||\n autoLinkNode.getIsUnlinked()))\n );\n });\n if (!badNode) {\n setIsLink(true);\n } else {\n setIsLink(false);\n }\n }\n }\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n $updateToolbar();\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection);\n const linkNode = $findMatchingParent(node, $isLinkNode);\n if ($isLinkNode(linkNode) && (payload.metaKey || payload.ctrlKey)) {\n window.open(linkNode.getURL(), \"_blank\");\n return true;\n }\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n }, [editor]);\n\n return createPortal(\n <FloatingLinkEditor\n editor={activeEditor}\n isLink={isLink}\n anchorElem={anchorElem}\n setIsLink={setIsLink}\n isLinkEditMode={isLinkEditMode}\n setIsLinkEditMode={setIsLinkEditMode}\n />,\n anchorElem\n );\n}\n\nexport default function FloatingLinkEditorPlugin({\n anchorElem = document.body,\n isLinkEditMode,\n setIsLinkEditMode,\n}: {\n anchorElem?: HTMLElement;\n isLinkEditMode: boolean;\n setIsLinkEditMode: Dispatch<boolean>;\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n return useFloatingLinkEditorToolbar(\n editor,\n anchorElem,\n isLinkEditMode,\n setIsLinkEditMode\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n/**\n * Retrieves the bounding rectangle of a selected text range within the DOM.\n * This function is useful for determining the exact position of the selected text\n * for rendering overlays or custom UI elements.\n */\nexport function getDOMRangeRect(\n nativeSelection: Selection,\n rootElement: HTMLElement\n): DOMRect {\n // Retrieves the first range object from the user's selection, which represents\n // a contiguous section of content selected by the user.\n const domRange = nativeSelection.getRangeAt(0);\n\n let rect;\n\n // Handles the case where the selection starts directly from the root element\n // by navigating to the first child element to get a more precise bounding rectangle.\n if (nativeSelection.anchorNode === rootElement) {\n let inner = rootElement;\n while (inner.firstElementChild != null) {\n inner = inner.firstElementChild as HTMLElement;\n }\n rect = inner.getBoundingClientRect();\n } else {\n // Uses the built-in method to get the exact pixel dimensions and position\n // of the selected range within the viewport.\n rect = domRange.getBoundingClientRect();\n }\n\n return rect;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n/**\n * Adjusts the position of a floating element relative to a target element.\n * This function ensures the floating element is correctly placed within the viewport\n * while considering scrolling, gaps, and offsets.\n */\nconst VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPosition(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n isLink = false,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n isEmbed = false\n): void {\n const scrollerElem = anchorElem.parentElement;\n\n if (targetRect === null || !scrollerElem) {\n // Hide floating element if the target position is unavailable\n floatingElem.style.opacity = \"0\";\n floatingElem.style.transform = \"translate(-10000px, -10000px)\";\n return;\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect();\n const anchorElementRect = anchorElem.getBoundingClientRect();\n const editorScrollerRect = scrollerElem.getBoundingClientRect();\n\n // Calculate the initial top and left positions\n let top = targetRect.top - floatingElemRect.height - verticalGap;\n let left = targetRect.left - horizontalOffset;\n\n // For embeds, position the menu at the top of the embed\n if (isEmbed) {\n top = targetRect.top - floatingElemRect.height - 5;\n left = targetRect.left + 10;\n }\n\n // Adjust position if the floating element is outside the top boundary\n if (top < editorScrollerRect.top) {\n if (isEmbed) {\n // For embeds, position below if it doesn't fit above\n top = targetRect.bottom + 5;\n } else {\n top +=\n floatingElemRect.height +\n targetRect.height +\n verticalGap * (isLink ? 9 : 2);\n }\n }\n\n // Adjust position if the floating element exceeds the right boundary\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n if (isEmbed) {\n // For embeds, align to the right edge with some padding\n left = targetRect.right - floatingElemRect.width - 10;\n } else {\n left =\n editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\n }\n }\n\n // Adjust the floating element position relative to the anchor element\n top -= anchorElementRect.top;\n left -= anchorElementRect.left;\n\n // Apply final styles to position the floating element\n floatingElem.style.opacity = \"1\";\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport \"./index.css\";\n\nimport { $isCodeHighlightNode } from \"@lexical/code\";\nimport { $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport {\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n FORMAT_TEXT_COMMAND,\n getDOMSelection,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport { MessageSquare } from \"lucide-react\";\nimport type { JSX } from \"react\";\nimport { Dispatch, useCallback, useEffect, useRef, useState } from \"react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n BoldIcon,\n CodeIcon,\n ItalicIcon,\n LinkIcon,\n MessageEditIcon,\n StrikethroughIcon,\n SubscriptIcon,\n SuperscriptIcon,\n TypeCapitalizeIcon,\n TypeLowercaseIcon,\n TypeUppercaseIcon,\n UnderlineIcon,\n} from \"src/ui/Icons\";\nimport { getDOMRangeRect } from \"src/utils/getDOMRangeRect\";\nimport getSelectedNode from \"src/utils/getSelectedNode\";\nimport { setFloatingElemPosition } from \"src/utils/setFloatingElemPosition\";\n\nimport { TOGGLE_AI_CHAT_COMMAND } from \"../AIChatPlugin\";\nimport { OPEN_COMMENT_MODAL_COMMAND } from \"../CommentPlugin\";\n/**\n * Defines the available text formatting features in the toolbar.\n */\ntype FormatFeatures = {\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n uppercase?: boolean;\n lowercase?: boolean;\n capitalize?: boolean;\n strikethrough?: boolean;\n subscript?: boolean;\n superscript?: boolean;\n code?: boolean;\n link?: boolean;\n aiChat?: boolean;\n comment?: boolean;\n};\n\n/**\n * Floating toolbar component for text formatting in a Lexical editor.\n * This toolbar appears when text is selected and provides formatting options.\n * Users can customize the toolbar by enabling/disabling specific options via props.\n */\nfunction TextFormatFloatingToolbar({\n editor,\n anchorElem,\n isLink,\n isBold,\n isItalic,\n isUnderline,\n isUppercase,\n isLowercase,\n isCapitalize,\n isCode,\n isStrikethrough,\n isSubscript,\n isSuperscript,\n setIsLinkEditMode,\n features,\n}: {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n isBold: boolean;\n isCode: boolean;\n isItalic: boolean;\n isLink: boolean;\n isUppercase: boolean;\n isLowercase: boolean;\n isCapitalize: boolean;\n isStrikethrough: boolean;\n isSubscript: boolean;\n isSuperscript: boolean;\n isUnderline: boolean;\n setIsLinkEditMode: Dispatch<boolean>;\n features?: FormatFeatures;\n}): JSX.Element {\n const popupCharStylesEditorRef = useRef<HTMLDivElement | null>(null);\n /**\n * Handles toggling of link insertion/removal.\n */\n const insertLink = useCallback(() => {\n if (!isLink) {\n setIsLinkEditMode(true);\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, \"https://\");\n } else {\n setIsLinkEditMode(false);\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }\n }, [editor, isLink, setIsLinkEditMode]);\n /**\n * Mouse move listener to manage drag behavior on the toolbar.\n */\n function mouseMoveListener(e: MouseEvent) {\n if (\n popupCharStylesEditorRef?.current &&\n (e.buttons === 1 || e.buttons === 3)\n ) {\n if (popupCharStylesEditorRef.current.style.pointerEvents !== \"none\") {\n const x = e.clientX;\n const y = e.clientY;\n const elementUnderMouse = document.elementFromPoint(x, y);\n\n if (!popupCharStylesEditorRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n popupCharStylesEditorRef.current.style.pointerEvents = \"none\";\n }\n }\n }\n }\n /**\n * Mouse up listener to restore pointer events.\n */\n function mouseUpListener(e: MouseEvent) {\n if (popupCharStylesEditorRef?.current) {\n if (popupCharStylesEditorRef.current.style.pointerEvents !== \"auto\") {\n popupCharStylesEditorRef.current.style.pointerEvents = \"auto\";\n }\n }\n }\n\n useEffect(() => {\n if (popupCharStylesEditorRef?.current) {\n document.addEventListener(\"mousemove\", mouseMoveListener);\n document.addEventListener(\"mouseup\", mouseUpListener);\n\n return () => {\n document.removeEventListener(\"mousemove\", mouseMoveListener);\n document.removeEventListener(\"mouseup\", mouseUpListener);\n };\n }\n }, [popupCharStylesEditorRef]);\n /**\n * Updates the floating toolbar position based on text selection.\n */\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection();\n\n const popupCharStylesEditorElem = popupCharStylesEditorRef.current;\n const nativeSelection = getDOMSelection(editor._window);\n\n if (popupCharStylesEditorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement);\n\n setFloatingElemPosition(\n rangeRect,\n popupCharStylesEditorElem,\n anchorElem,\n isLink\n );\n }\n }, [editor, anchorElem, isLink]);\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar();\n });\n };\n\n window.addEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem]);\n /**\n * Updates popup position when window is resized or editor state changes.\n */\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar();\n });\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar();\n });\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateTextFormatFloatingToolbar();\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n }, [editor, $updateTextFormatFloatingToolbar]);\n\n return (\n <div\n ref={popupCharStylesEditorRef}\n className=\"floating-text-format-popup bg-secondary\"\n >\n {editor.isEditable() && (\n <>\n {features?.bold && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\");\n }}\n className={\"popup-item spaced \" + (isBold ? \"active\" : \"\")}\n title=\"Bold\"\n aria-label=\"Format text as bold\"\n >\n <BoldIcon />\n </button>\n )}\n {features?.italic && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\");\n }}\n className={\"popup-item spaced \" + (isItalic ? \"active\" : \"\")}\n title=\"Italic\"\n aria-label=\"Format text as italics\"\n >\n <ItalicIcon />\n </button>\n )}\n {features?.underline && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\");\n }}\n className={\"popup-item spaced \" + (isUnderline ? \"active\" : \"\")}\n title=\"Underline\"\n aria-label=\"Format text to underlined\"\n >\n <UnderlineIcon />\n </button>\n )}\n {features?.strikethrough && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"strikethrough\");\n }}\n className={\n \"popup-item spaced \" + (isStrikethrough ? \"active\" : \"\")\n }\n title=\"Strikethrough\"\n aria-label=\"Format text with a strikethrough\"\n >\n <StrikethroughIcon />\n </button>\n )}\n {features?.subscript && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"subscript\");\n }}\n className={\"popup-item spaced \" + (isSubscript ? \"active\" : \"\")}\n title=\"Subscript\"\n aria-label=\"Format Subscript\"\n >\n <span style={{ width: \"24px\" }}>\n <SubscriptIcon />\n </span>\n </button>\n )}\n {features?.superscript && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"superscript\");\n }}\n className={\"popup-item spaced \" + (isSuperscript ? \"active\" : \"\")}\n title=\"Superscript\"\n aria-label=\"Format Superscript\"\n >\n <span style={{ width: \"24px\" }}>\n <SuperscriptIcon />\n </span>\n </button>\n )}\n {features?.uppercase && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"uppercase\");\n }}\n className={\"popup-item spaced \" + (isUppercase ? \"active\" : \"\")}\n title=\"Uppercase\"\n aria-label=\"Format text to uppercase\"\n >\n <TypeUppercaseIcon />\n </button>\n )}\n {features?.lowercase && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"lowercase\");\n }}\n className={\"popup-item spaced \" + (isLowercase ? \"active\" : \"\")}\n title=\"Lowercase\"\n aria-label=\"Format text to lowercase\"\n >\n <TypeLowercaseIcon />\n </button>\n )}\n {features?.capitalize && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"capitalize\");\n }}\n className={\"popup-item spaced \" + (isCapitalize ? \"active\" : \"\")}\n title=\"Capitalize\"\n aria-label=\"Format text to capitalize\"\n >\n <TypeCapitalizeIcon />\n </button>\n )}\n {features?.code && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\");\n }}\n className={\"popup-item spaced \" + (isCode ? \"active\" : \"\")}\n title=\"Insert code block\"\n aria-label=\"Insert code block\"\n >\n <CodeIcon />\n </button>\n )}\n {features?.link && (\n <button\n type=\"button\"\n onClick={insertLink}\n className={\"popup-item spaced \" + (isLink ? \"active\" : \"\")}\n title=\"Insert link\"\n aria-label=\"Insert link\"\n >\n <LinkIcon />\n </button>\n )}\n {features?.aiChat && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(TOGGLE_AI_CHAT_COMMAND, undefined);\n }}\n className=\"popup-item spaced [&>svg]:cteditor-h-4 [&>svg]:cteditor-w-5 flex items-center justify-center\"\n title=\"AI Chat\"\n aria-label=\"Open AI Chat\"\n >\n <MessageEditIcon />\n </button>\n )}\n {features?.comment && (\n <button\n type=\"button\"\n onClick={() => {\n editor.dispatchCommand(OPEN_COMMENT_MODAL_COMMAND, undefined);\n }}\n className=\"popup-item spaced [&>svg]:cteditor-h-4 [&>svg]:cteditor-w-6 flex items-center justify-center\"\n title=\"Add Comment\"\n aria-label=\"Add Comment\"\n >\n <MessageSquare size={16} strokeWidth={1.5} />\n </button>\n )}\n </>\n )}\n </div>\n );\n}\n\nfunction useFloatingTextFormatToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n setIsLinkEditMode: Dispatch<boolean>,\n features?: FormatFeatures\n): JSX.Element | null {\n const [isText, setIsText] = useState(false);\n const [isLink, setIsLink] = useState(false);\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const [isUppercase, setIsUppercase] = useState(false);\n const [isLowercase, setIsLowercase] = useState(false);\n const [isCapitalize, setIsCapitalize] = useState(false);\n const [isStrikethrough, setIsStrikethrough] = useState(false);\n const [isSubscript, setIsSubscript] = useState(false);\n const [isSuperscript, setIsSuperscript] = useState(false);\n const [isCode, setIsCode] = useState(false);\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return;\n }\n const selection = $getSelection();\n const nativeSelection = getDOMSelection(editor._window);\n const rootElement = editor.getRootElement();\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false);\n return;\n }\n\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n const node = getSelectedNode(selection);\n\n // Update text format\n setIsBold(selection.hasFormat(\"bold\"));\n setIsItalic(selection.hasFormat(\"italic\"));\n setIsUnderline(selection.hasFormat(\"underline\"));\n setIsUppercase(selection.hasFormat(\"uppercase\"));\n setIsLowercase(selection.hasFormat(\"lowercase\"));\n setIsCapitalize(selection.hasFormat(\"capitalize\"));\n setIsStrikethrough(selection.hasFormat(\"strikethrough\"));\n setIsSubscript(selection.hasFormat(\"subscript\"));\n setIsSuperscript(selection.hasFormat(\"superscript\"));\n setIsCode(selection.hasFormat(\"code\"));\n\n // Update links\n const parent = node.getParent();\n if ($isLinkNode(parent) || $isLinkNode(node)) {\n setIsLink(true);\n } else {\n setIsLink(false);\n }\n\n if (\n !$isCodeHighlightNode(selection.anchor.getNode()) &&\n selection.getTextContent() !== \"\"\n ) {\n setIsText($isTextNode(node) || $isParagraphNode(node));\n } else {\n setIsText(false);\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, \"\");\n if (!selection.isCollapsed() && rawTextContent === \"\") {\n setIsText(false);\n return;\n }\n });\n }, [editor]);\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", updatePopup);\n return () => {\n document.removeEventListener(\"selectionchange\", updatePopup);\n };\n }, [updatePopup]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup();\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false);\n }\n })\n );\n }, [editor, updatePopup]);\n\n if (!isText) {\n return null;\n }\n\n return createPortal(\n <TextFormatFloatingToolbar\n editor={editor}\n anchorElem={anchorElem}\n isLink={isLink}\n isBold={isBold}\n isItalic={isItalic}\n isUppercase={isUppercase}\n isLowercase={isLowercase}\n isCapitalize={isCapitalize}\n isStrikethrough={isStrikethrough}\n isSubscript={isSubscript}\n isSuperscript={isSuperscript}\n isUnderline={isUnderline}\n isCode={isCode}\n setIsLinkEditMode={setIsLinkEditMode}\n features={features}\n />,\n anchorElem\n );\n}\n\nexport default function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n setIsLinkEditMode,\n features = {\n bold: true,\n italic: true,\n underline: true,\n uppercase: true,\n lowercase: true,\n capitalize: true,\n strikethrough: true,\n subscript: true,\n superscript: true,\n code: true,\n link: true,\n aiChat: true,\n comment: true,\n },\n}: {\n anchorElem?: HTMLElement;\n setIsLinkEditMode: Dispatch<boolean>;\n features?: FormatFeatures;\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n return useFloatingTextFormatToolbar(\n editor,\n anchorElem,\n setIsLinkEditMode,\n features\n );\n}\n","import { $generateHtmlFromNodes, $generateNodesFromDOM } from \"@lexical/html\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getRoot } from \"lexical\";\nimport React, { useEffect, useState } from \"react\";\nimport { Button } from \"src/components/ui/button\";\n\nconst HtmlViewTogglePlugin = () => {\n // Get the Lexical editor context\n const [editor] = useLexicalComposerContext();\n\n // State to manage whether we are in HTML view mode or editor mode\n const [isHtmlView, setIsHtmlView] = useState(false);\n\n // State to store the HTML content when switching to HTML view\n const [htmlContent, setHtmlContent] = useState(\"\");\n\n useEffect(() => {\n if (isHtmlView) {\n editor.update(() => {\n // Convert the Lexical editor content to HTML string\n const htmlString = $generateHtmlFromNodes(editor, null);\n setHtmlContent(htmlString);\n });\n }\n }, [isHtmlView, editor]);\n\n const toggleView = () => {\n setIsHtmlView((prev) => !prev);\n\n if (isHtmlView) {\n editor.update(() => {\n // Parse the HTML content and convert it back to Lexical editor nodes\n const parser = new DOMParser();\n const dom = parser.parseFromString(htmlContent, \"text/html\");\n const nodes = $generateNodesFromDOM(editor, dom);\n\n // Clear the existing editor content and append new nodes\n $getRoot()\n .clear()\n .append(...nodes);\n });\n }\n };\n\n return (\n <div>\n {/* Button to toggle between Editor and HTML View */}\n <Button onClick={toggleView} className=\"my-2.5\">\n {isHtmlView ? \"Switch to Editor View\" : \"Switch to HTML View\"}\n </Button>\n {/* <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={toggleView}\n >\n <FileCode2 className=\"!size-5\" />\n </Button> */}\n\n {/* Display a textarea when in HTML View mode */}\n {isHtmlView ? (\n <div className=\"editorView\">\n <textarea\n value={htmlContent}\n onChange={(e) => setHtmlContent(e.target.value)}\n style={{ width: \"100%\", height: \"300px\" }}\n />\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default HtmlViewTogglePlugin;\n","import { $generateHtmlFromNodes } from \"@lexical/html\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect, useRef } from \"react\";\nimport { useHtmlView } from \"src/context/HtmlViewContext\";\n\nconst HtmlSyncPlugin: React.FC = () => {\n const [editor] = useLexicalComposerContext();\n const { isHtmlView, setHtmlContent, canUpdateFromEditor } = useHtmlView();\n const lastSyncedContent = useRef(\"\");\n const syncTimeoutRef = useRef<number | null>(null);\n const isUpdatingFromHtml = useRef(false);\n\n useEffect(() => {\n if (!isHtmlView) {\n return;\n }\n\n return editor.registerUpdateListener(\n ({ editorState, dirtyElements, dirtyLeaves }) => {\n // Skip if this update is coming from HTML view changes\n if (isUpdatingFromHtml.current) {\n isUpdatingFromHtml.current = false;\n return;\n }\n\n // Only sync if updates are allowed and there are actual content changes\n if (\n canUpdateFromEditor &&\n (dirtyElements.size > 0 || dirtyLeaves.size > 0)\n ) {\n // Debounce the sync to avoid too frequent updates\n if (syncTimeoutRef.current) {\n clearTimeout(syncTimeoutRef.current);\n }\n\n syncTimeoutRef.current = setTimeout(() => {\n // Double-check that updates are still allowed\n if (canUpdateFromEditor) {\n editorState.read(() => {\n const htmlString = $generateHtmlFromNodes(editor, null);\n\n // Only update if the content has actually changed\n if (htmlString !== lastSyncedContent.current) {\n lastSyncedContent.current = htmlString;\n setHtmlContent(htmlString);\n }\n });\n }\n }, 100); // Small debounce to batch rapid changes\n }\n }\n );\n }, [editor, isHtmlView, setHtmlContent, canUpdateFromEditor]);\n\n // Expose method to mark updates as coming from HTML\n useEffect(() => {\n const markAsHtmlUpdate = () => {\n isUpdatingFromHtml.current = true;\n };\n\n // Store the function in editor for HtmlViewDisplay to use\n (editor as any)._markAsHtmlUpdate = markAsHtmlUpdate;\n\n return () => {\n delete (editor as any)._markAsHtmlUpdate;\n };\n }, [editor]);\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (syncTimeoutRef.current) {\n clearTimeout(syncTimeoutRef.current);\n }\n };\n }, []);\n\n return null;\n};\n\nexport default HtmlSyncPlugin;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { LinkPlugin as LexicalLinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport type { JSX } from \"react\";\nimport * as React from \"react\";\n\nimport { validateUrl } from \"../../utils/url\";\n\ntype Props = {\n hasLinkAttributes?: boolean;\n};\n\nexport default function LinkPlugin({\n hasLinkAttributes = false,\n}: Props): JSX.Element {\n return (\n <LexicalLinkPlugin\n validateUrl={validateUrl}\n attributes={\n hasLinkAttributes\n ? {\n rel: \"noopener noreferrer\",\n target: \"_blank\",\n }\n : undefined\n }\n />\n );\n}\n","import { DebouncedFunctionType } from \"../types\";\n\n/** To help debounce the action of syncing editor's content changes to the external store. Usually, this would be the piece that updates your remote database\n * @see https://konstantinmuenster.medium.com/how-to-build-a-text-editor-with-lexical-and-react-27204c186d0f\n */\nconst debounce = <F extends DebouncedFunctionType>(fn: F, delay: number) => {\n let timeoutID: number | undefined;\n return function (this: any, ...args: any[]) {\n clearTimeout(timeoutID);\n timeoutID = window.setTimeout(() => fn.apply(this, args), delay);\n } as F;\n};\n\nexport default debounce;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FC, useCallback, useEffect } from \"react\";\n\nimport { LocalStoragePluginProps } from \"../types\";\nimport debounce from \"../utils/debounce\";\n\n/**\n * We have extended our editor so that it stores our content safely in an external store, utilizing the concept of Lexical’s editor state.\n * @param namespace\n */\nconst LocalStoragePlugin: FC<LocalStoragePluginProps> = ({ namespace }) => {\n const [editor] = useLexicalComposerContext();\n\n const saveContent = useCallback(\n (content: string) => {\n localStorage.setItem(namespace, content);\n },\n [namespace]\n );\n\n const debouncedSaveContent = debounce(saveContent, 500);\n\n useEffect(() => {\n return editor.registerUpdateListener(\n ({ editorState, dirtyElements, dirtyLeaves }) => {\n // Don't update if nothing has changed\n if (dirtyElements.size === 0 && dirtyLeaves.size === 0) return;\n\n const serializedState = JSON.stringify(editorState);\n debouncedSaveContent(serializedState);\n }\n );\n\n /**\n * Note that editor.registerUpdateListener() returns a callback to remove the update listener again. To avoid memory leaks, we use this returned callback for the cleanup function of useEffect.\n */\n }, [debouncedSaveContent, editor]);\n\n /**\n * As this plugin shouldn’t render any decoration or toolbar, we simply return null at the very end of the component.\n */\n return null;\n};\n\nexport default LocalStoragePlugin;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n LexicalTypeaheadMenuPlugin,\n MenuOption,\n MenuTextMatch,\n useBasicTypeaheadTriggerMatch,\n} from \"@lexical/react/LexicalTypeaheadMenuPlugin\";\nimport { TextNode } from \"lexical\";\nimport type { JSX } from \"react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { $createMentionNode } from \"src/nodes/MentionNode\";\n\n/**\n * Define regex patterns for detecting mentions and valid characters in mention names.\n */\n\n// Characters considered punctuation\nconst PUNCTUATION =\n \"\\\\.,\\\\+\\\\*\\\\?\\\\$\\\\@\\\\|#{}\\\\(\\\\)\\\\^\\\\-\\\\[\\\\]\\\\\\\\/!%'\\\"~=<>_:;\";\n\n// Defines a name pattern where a word starts with an uppercase letter\nconst NAME = \"\\\\b[A-Z][^\\\\s\" + PUNCTUATION + \"]\";\n\nconst DocumentMentionsRegex = {\n NAME,\n PUNCTUATION,\n};\n\n// Store punctuation separately\nconst PUNC = DocumentMentionsRegex.PUNCTUATION;\n\n// Define the mention trigger character(s)\nconst TRIGGERS = [\"@\"].join(\"\");\n\n// Define valid characters that can be part of a mention (excluding spaces and punctuation)\nconst VALID_CHARS = \"[^\" + TRIGGERS + PUNC + \"\\\\s]\";\n\n// Defines valid ways to join characters in a mention (e.g., space, hyphen)\nconst VALID_JOINS =\n \"(?:\" +\n \"\\\\.[ |$]|\" + // Allows dots followed by space (e.g., \"Mr. Smith\")\n \" |\" + // Space is allowed in mentions\n \"[\" +\n PUNC +\n \"]|\" + // Punctuation such as \"-\" in \"Salier-Hellendag\"\n \")\";\n\n// Limit for mention length\nconst LENGTH_LIMIT = 75;\n\n// Regular expression to detect an @mention in text\nconst AtSignMentionsRegex = new RegExp(\n \"(^|\\\\s|\\\\()(\" +\n \"[\" +\n TRIGGERS +\n \"]\" +\n \"((?:\" +\n VALID_CHARS +\n VALID_JOINS +\n \"){0,\" +\n LENGTH_LIMIT +\n \"})\" +\n \")$\"\n);\n\n// Alias mention length limit\nconst ALIAS_LENGTH_LIMIT = 50;\n\n// Regex to detect alias-based mentions\nconst AtSignMentionsRegexAliasRegex = new RegExp(\n \"(^|\\\\s|\\\\()(\" +\n \"[\" +\n TRIGGERS +\n \"]\" +\n \"((?:\" +\n VALID_CHARS +\n \"){0,\" +\n ALIAS_LENGTH_LIMIT +\n \"})\" +\n \")$\"\n);\n\n// Maximum number of mention suggestions to display\nconst SUGGESTION_LIST_LENGTH_LIMIT = 5;\n\n// Cache to store previously searched mentions\nconst mentionsCache = new Map();\n\n/**\n * Simulates a user lookup service by filtering from a predefined list.\n */\nconst userLookupService = {\n search(\n userList: string[],\n string: string,\n callback: (results: Array<string>) => void\n ): void {\n setTimeout(() => {\n const results = userList.filter((mention) =>\n mention.toLowerCase().includes(string.toLowerCase())\n );\n callback(results);\n }, 500); // Simulating a delay for async behavior\n },\n};\n\n/**\n * Custom hook to fetch mention suggestions based on user input.\n */\nfunction useMentionLookupService(\n userList: string[] = [],\n mentionString: string | null\n) {\n const [results, setResults] = useState<Array<string>>([]);\n\n useEffect(() => {\n const cachedResults = mentionsCache.get(mentionString);\n\n if (mentionString == null) {\n setResults([]);\n return;\n }\n\n if (cachedResults === null) {\n return;\n } else if (cachedResults !== undefined) {\n setResults(cachedResults);\n return;\n }\n\n mentionsCache.set(mentionString, null);\n userLookupService.search(userList, mentionString, (newResults) => {\n mentionsCache.set(mentionString, newResults);\n setResults(newResults);\n });\n }, [mentionString]);\n\n return results;\n}\n\n/**\n * Function to check if text contains an @mention and return details of the match.\n */\nfunction checkForAtSignMentions(\n text: string,\n minMatchLength: number\n): MenuTextMatch | null {\n const match = AtSignMentionsRegex.exec(text);\n if (match !== null) {\n const maybeLeadingWhitespace = match[1];\n const matchingString = match[3];\n if (matchingString.length >= minMatchLength) {\n return {\n leadOffset: match.index + maybeLeadingWhitespace.length,\n matchingString,\n replaceableString: match[2],\n };\n }\n }\n return null;\n}\n\n/**\n * Checks for potential mentions in the text.\n */\nfunction getPossibleQueryMatch(text: string): MenuTextMatch | null {\n return checkForAtSignMentions(text, 0);\n}\n\n/**\n * Class representing a mention suggestion option in the dropdown menu.\n */\nclass MentionTypeaheadOption extends MenuOption {\n name: string;\n picture: JSX.Element;\n\n constructor(name: string, picture: JSX.Element) {\n super(name);\n this.name = name;\n this.picture = picture;\n }\n}\n\n/**\n * UI component to render a mention suggestion item in the typeahead menu.\n */\nfunction MentionsTypeaheadMenuItem({\n index,\n isSelected,\n onClick,\n onMouseEnter,\n option,\n}: {\n index: number;\n isSelected: boolean;\n onClick: () => void;\n onMouseEnter: () => void;\n option: MentionTypeaheadOption;\n}) {\n let className = \"item\";\n if (isSelected) {\n className += \" selected\";\n }\n return (\n <li\n key={option.key}\n tabIndex={-1}\n className={className}\n ref={option.setRefElement}\n role=\"option\"\n aria-selected={isSelected}\n id={\"typeahead-item-\" + index}\n onMouseEnter={onMouseEnter}\n onClick={onClick}\n >\n {option.picture}\n <span className=\"text\">{option.name}</span>\n </li>\n );\n}\n\n/**\n * Main plugin component for handling @mentions in the editor.\n */\nexport default function NewMentionsPlugin({\n userList,\n}: {\n userList?: string[];\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [queryString, setQueryString] = useState<string | null>(null);\n const results = useMentionLookupService(userList, queryString);\n\n // Detects whether the \"/\" command is triggered\n const checkForSlashTriggerMatch = useBasicTypeaheadTriggerMatch(\"/\", {\n minLength: 0,\n });\n\n // Prepare the list of mention options to be displayed\n const options = useMemo(\n () =>\n results\n .map(\n (result) =>\n new MentionTypeaheadOption(result, <i className=\"icon user\" />)\n )\n .slice(0, SUGGESTION_LIST_LENGTH_LIMIT),\n [results]\n );\n\n /**\n * Handles selection of a mention option, inserting it into the editor.\n */\n const onSelectOption = useCallback(\n (\n selectedOption: MentionTypeaheadOption,\n nodeToReplace: TextNode | null,\n closeMenu: () => void\n ) => {\n editor.update(() => {\n const mentionNode = $createMentionNode(selectedOption.name);\n if (nodeToReplace) {\n nodeToReplace.replace(mentionNode);\n }\n mentionNode.select();\n closeMenu();\n });\n },\n [editor]\n );\n\n /**\n * Checks for mention trigger matches, ensuring \"/\" does not interfere.\n */\n const checkForMentionMatch = useCallback(\n (text: string) => {\n const slashMatch = checkForSlashTriggerMatch(text, editor);\n if (slashMatch !== null) {\n return null;\n }\n return getPossibleQueryMatch(text);\n },\n [checkForSlashTriggerMatch, editor]\n );\n\n return (\n <LexicalTypeaheadMenuPlugin<MentionTypeaheadOption>\n onQueryChange={setQueryString}\n onSelectOption={onSelectOption}\n triggerFn={checkForMentionMatch}\n options={options}\n menuRenderFn={(\n anchorElementRef,\n { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }\n ) =>\n anchorElementRef.current\n ? ReactDOM.createPortal(\n <div className=\"typeahead-popover mentions-menu\">\n {options.length > 0 ? (\n <ul>\n {options.map((option, i) => (\n <MentionsTypeaheadMenuItem\n key={option.key}\n index={i}\n isSelected={selectedIndex === i}\n onClick={() => {\n setHighlightedIndex(i);\n selectOptionAndCleanUp(option);\n }}\n onMouseEnter={() => {\n setHighlightedIndex(i);\n }}\n option={option}\n />\n ))}\n </ul>\n ) : (\n <div className=\"no-users-found\">No users found</div>\n )}\n </div>,\n anchorElementRef.current\n )\n : null\n }\n />\n );\n}\n","import { useCallback, useState } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"src/components/ui/dialog\";\n\nexport default function useModal(): [\n JSX.Element | null,\n (title: string, getContent: (onClose: () => void) => JSX.Element) => void,\n] {\n const [modalContent, setModalContent] = useState<{\n title: string;\n content: JSX.Element;\n closeOnClickOutside: boolean;\n } | null>(null);\n\n const onClose = useCallback((): void => {\n setModalContent(null);\n }, []);\n\n const showModal = useCallback(\n (\n title: string,\n getContent: (onClose: () => void) => JSX.Element,\n closeOnClickOutside = false\n ) => {\n setModalContent({\n title,\n content: getContent(onClose),\n closeOnClickOutside,\n });\n },\n [onClose]\n );\n\n const modalElement = modalContent ? (\n <Dialog\n open={!!modalContent}\n onOpenChange={(isOpen: unknown) => {\n if (!isOpen && modalContent.closeOnClickOutside) {\n onClose();\n }\n }}\n >\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>{modalContent.title}</DialogTitle>\n </DialogHeader>\n <div className=\"mt-4\">{modalContent.content}</div>\n </DialogContent>\n </Dialog>\n ) : null;\n\n return [modalElement, showModal];\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport \"./Input.css\";\n\nimport type { JSX } from \"react\";\nimport * as React from \"react\";\nimport { HTMLInputTypeAttribute } from \"react\";\n\ntype Props = Readonly<{\n \"data-test-id\"?: string;\n label: string;\n onChange: (val: string) => void;\n placeholder?: string;\n value: string;\n type?: HTMLInputTypeAttribute;\n}>;\n\nexport default function TextInput({\n label,\n value,\n onChange,\n placeholder = \"\",\n \"data-test-id\": dataTestId,\n type = \"text\",\n}: Props): JSX.Element {\n return (\n <div className=\"Input__wrapper\">\n <label className=\"Input__label\">{label}</label>\n <input\n type={type}\n className=\"Input__input\"\n placeholder={placeholder}\n value={value}\n onChange={(e) => {\n onChange(e.target.value);\n }}\n data-test-id={dataTestId}\n />\n </div>\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport \"./ColorPicker.css\";\n\nimport { calculateZoomLevel } from \"@lexical/utils\";\nimport type { JSX } from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport * as React from \"react\";\n\nimport TextInput from \"./TextInput\";\n\nlet skipAddingToHistoryStack = false;\n\ninterface ColorPickerProps {\n color: string;\n onChange?: (value: string, skipHistoryStack: boolean) => void;\n}\n\nexport function parseAllowedColor(input: string) {\n return /^rgb\\(\\d+, \\d+, \\d+\\)$/.test(input) ? input : \"\";\n}\n\nconst basicColors = [\n \"#d0021b\",\n \"#f5a623\",\n \"#f8e71c\",\n \"#8b572a\",\n \"#7ed321\",\n \"#417505\",\n \"#bd10e0\",\n \"#9013fe\",\n \"#4a90e2\",\n \"#50e3c2\",\n \"#b8e986\",\n \"#000000\",\n \"#4a4a4a\",\n \"#9b9b9b\",\n \"#ffffff\",\n];\n\nconst WIDTH = 214;\nconst HEIGHT = 150;\n\nexport default function ColorPicker({\n color,\n onChange,\n}: Readonly<ColorPickerProps>): JSX.Element {\n const [selfColor, setSelfColor] = useState(transformColor(\"hex\", color));\n const [inputColor, setInputColor] = useState(color);\n const innerDivRef = useRef(null);\n\n const saturationPosition = useMemo(\n () => ({\n x: (selfColor.hsv.s / 100) * WIDTH,\n y: ((100 - selfColor.hsv.v) / 100) * HEIGHT,\n }),\n [selfColor.hsv.s, selfColor.hsv.v]\n );\n\n const huePosition = useMemo(\n () => ({\n x: (selfColor.hsv.h / 360) * WIDTH,\n }),\n [selfColor.hsv]\n );\n\n const onSetHex = (hex: string) => {\n setInputColor(hex);\n if (/^#[0-9A-Fa-f]{6}$/i.test(hex)) {\n const newColor = transformColor(\"hex\", hex);\n setSelfColor(newColor);\n }\n };\n\n const onMoveSaturation = ({ x, y }: Position) => {\n const newHsv = {\n ...selfColor.hsv,\n s: (x / WIDTH) * 100,\n v: 100 - (y / HEIGHT) * 100,\n };\n const newColor = transformColor(\"hsv\", newHsv);\n setSelfColor(newColor);\n setInputColor(newColor.hex);\n };\n\n const onMoveHue = ({ x }: Position) => {\n const newHsv = { ...selfColor.hsv, h: (x / WIDTH) * 360 };\n const newColor = transformColor(\"hsv\", newHsv);\n\n setSelfColor(newColor);\n setInputColor(newColor.hex);\n };\n\n useEffect(() => {\n // Check if the dropdown is actually active\n if (innerDivRef.current !== null && onChange) {\n onChange(selfColor.hex, skipAddingToHistoryStack);\n setInputColor(selfColor.hex);\n }\n }, [selfColor, onChange]);\n\n useEffect(() => {\n if (color === undefined) {\n return;\n }\n const newColor = transformColor(\"hex\", color);\n setSelfColor(newColor);\n setInputColor(newColor.hex);\n }, [color]);\n\n return (\n <div\n className=\"color-picker-wrapper\"\n style={{ width: WIDTH }}\n ref={innerDivRef}\n >\n <TextInput label=\"Hex\" onChange={onSetHex} value={inputColor} />\n <div className=\"color-picker-basic-color\">\n {basicColors.map((basicColor) => (\n <button\n className={basicColor === selfColor.hex ? \" active\" : \"\"}\n key={basicColor}\n style={{ backgroundColor: basicColor }}\n onClick={() => {\n setInputColor(basicColor);\n setSelfColor(transformColor(\"hex\", basicColor));\n }}\n />\n ))}\n </div>\n <MoveWrapper\n className=\"color-picker-saturation\"\n style={{ backgroundColor: `hsl(${selfColor.hsv.h}, 100%, 50%)` }}\n onChange={onMoveSaturation}\n >\n <div\n className=\"color-picker-saturation_cursor\"\n style={{\n backgroundColor: selfColor.hex,\n left: saturationPosition.x,\n top: saturationPosition.y,\n }}\n />\n </MoveWrapper>\n <MoveWrapper className=\"color-picker-hue\" onChange={onMoveHue}>\n <div\n className=\"color-picker-hue_cursor\"\n style={{\n backgroundColor: `hsl(${selfColor.hsv.h}, 100%, 50%)`,\n left: huePosition.x,\n }}\n />\n </MoveWrapper>\n <div\n className=\"color-picker-color\"\n style={{ backgroundColor: selfColor.hex }}\n />\n </div>\n );\n}\n\nexport interface Position {\n x: number;\n y: number;\n}\n\ninterface MoveWrapperProps {\n className?: string;\n style?: React.CSSProperties;\n onChange: (position: Position) => void;\n children: JSX.Element;\n}\n\nfunction MoveWrapper({\n className,\n style,\n onChange,\n children,\n}: MoveWrapperProps) {\n const divRef = useRef<HTMLDivElement>(null);\n const draggedRef = useRef(false);\n\n const move = (e: React.MouseEvent | MouseEvent): void => {\n if (divRef.current) {\n const { current: div } = divRef;\n const { width, height, left, top } = div.getBoundingClientRect();\n const zoom = calculateZoomLevel(div);\n const x = clamp(e.clientX / zoom - left, width, 0);\n const y = clamp(e.clientY / zoom - top, height, 0);\n\n onChange({ x, y });\n }\n };\n\n const onMouseDown = (e: React.MouseEvent): void => {\n if (e.button !== 0) {\n return;\n }\n\n move(e);\n\n const onMouseMove = (_e: MouseEvent): void => {\n draggedRef.current = true;\n skipAddingToHistoryStack = true;\n move(_e);\n };\n\n const onMouseUp = (_e: MouseEvent): void => {\n if (draggedRef.current) {\n skipAddingToHistoryStack = false;\n }\n\n document.removeEventListener(\"mousemove\", onMouseMove, false);\n document.removeEventListener(\"mouseup\", onMouseUp, false);\n\n move(_e);\n draggedRef.current = false;\n };\n\n document.addEventListener(\"mousemove\", onMouseMove, false);\n document.addEventListener(\"mouseup\", onMouseUp, false);\n };\n\n return (\n <div\n ref={divRef}\n className={className}\n style={style}\n onMouseDown={onMouseDown}\n >\n {children}\n </div>\n );\n}\n\nfunction clamp(value: number, max: number, min: number) {\n return value > max ? max : value < min ? min : value;\n}\n\ninterface RGB {\n b: number;\n g: number;\n r: number;\n}\ninterface HSV {\n h: number;\n s: number;\n v: number;\n}\ninterface Color {\n hex: string;\n hsv: HSV;\n rgb: RGB;\n}\n\nexport function toHex(value: string): string {\n if (!value.startsWith(\"#\")) {\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n\n if (!ctx) {\n throw new Error(\"2d context not supported or canvas already initialized\");\n }\n\n ctx.fillStyle = value;\n\n return ctx.fillStyle;\n } else if (value.length === 4 || value.length === 5) {\n value = value\n .split(\"\")\n .map((v, i) => (i ? v + v : \"#\"))\n .join(\"\");\n\n return value;\n } else if (value.length === 7 || value.length === 9) {\n return value;\n }\n\n return \"#000000\";\n}\n\nfunction hex2rgb(hex: string): RGB {\n const rbgArr = (\n hex\n .replace(\n /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,\n (m, r, g, b) => \"#\" + r + r + g + g + b + b\n )\n .substring(1)\n .match(/.{2}/g) || []\n ).map((x) => parseInt(x, 16));\n\n return {\n b: rbgArr[2],\n g: rbgArr[1],\n r: rbgArr[0],\n };\n}\n\nfunction rgb2hsv({ r, g, b }: RGB): HSV {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b);\n const d = max - Math.min(r, g, b);\n\n const h = d\n ? (max === r\n ? (g - b) / d + (g < b ? 6 : 0)\n : max === g\n ? 2 + (b - r) / d\n : 4 + (r - g) / d) * 60\n : 0;\n const s = max ? (d / max) * 100 : 0;\n const v = max * 100;\n\n return { h, s, v };\n}\n\nfunction hsv2rgb({ h, s, v }: HSV): RGB {\n s /= 100;\n v /= 100;\n\n const i = ~~(h / 60);\n const f = h / 60 - i;\n const p = v * (1 - s);\n const q = v * (1 - s * f);\n const t = v * (1 - s * (1 - f));\n const index = i % 6;\n\n const r = Math.round([v, q, p, p, t, v][index] * 255);\n const g = Math.round([t, v, v, q, p, p][index] * 255);\n const b = Math.round([p, p, t, v, v, q][index] * 255);\n\n return { b, g, r };\n}\n\nfunction rgb2hex({ b, g, r }: RGB): string {\n return \"#\" + [r, g, b].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction transformColor<M extends keyof Color, C extends Color[M]>(\n format: M,\n color: C\n): Color {\n let hex: Color[\"hex\"] = toHex(\"#121212\");\n let rgb: Color[\"rgb\"] = hex2rgb(hex);\n let hsv: Color[\"hsv\"] = rgb2hsv(rgb);\n\n if (format === \"hex\") {\n const value = color as Color[\"hex\"];\n\n hex = toHex(value);\n rgb = hex2rgb(hex);\n hsv = rgb2hsv(rgb);\n } else if (format === \"rgb\") {\n const value = color as Color[\"rgb\"];\n\n rgb = value;\n hex = rgb2hex(rgb);\n hsv = rgb2hsv(rgb);\n } else if (format === \"hsv\") {\n const value = color as Color[\"hsv\"];\n\n hsv = value;\n rgb = hsv2rgb(hsv);\n hex = rgb2hex(rgb);\n }\n\n return { hex, hsv, rgb };\n}\n","export default function invariant(\n cond?: boolean,\n message?: string,\n ...args: string[]\n): asserts cond {\n if (cond) {\n return;\n }\n\n throw new Error(\n \"Internal Lexical error: invariant() is meant to be replaced at compile \" +\n \"time. There is no runtime version. Error: \" +\n message\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useLexicalEditable } from \"@lexical/react/useLexicalEditable\";\nimport {\n $deleteTableColumn__EXPERIMENTAL,\n $deleteTableRow__EXPERIMENTAL,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableRowNode,\n $isTableSelection,\n $unmergeCell,\n getTableElement,\n getTableObserverFromTableElement,\n TableCellHeaderStates,\n TableCellNode,\n TableObserver,\n TableRowNode,\n TableSelection,\n} from \"@lexical/table\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport type { ElementNode, LexicalEditor } from \"lexical\";\nimport {\n $createParagraphNode,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_CRITICAL,\n getDOMSelection,\n isDOMNode,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport type { JSX } from \"react\";\nimport * as React from \"react\";\nimport { ReactPortal, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport useModal from \"src/hooks/useModal\";\nimport ColorPicker from \"src/ui/ColorPicker\";\nimport { ChevronDownIcon } from \"src/ui/Icons\";\nimport invariant from \"src/utils/invarient\";\n\nfunction computeSelectionCount(selection: TableSelection): {\n columns: number;\n rows: number;\n} {\n const selectionShape = selection.getShape();\n return {\n columns: selectionShape.toX - selectionShape.fromX + 1,\n rows: selectionShape.toY - selectionShape.fromY + 1,\n };\n}\n\nfunction $canUnmerge(): boolean {\n const selection = $getSelection();\n if (\n ($isRangeSelection(selection) && !selection.isCollapsed()) ||\n ($isTableSelection(selection) && !selection.anchor.is(selection.focus)) ||\n (!$isRangeSelection(selection) && !$isTableSelection(selection))\n ) {\n return false;\n }\n const [cell] = $getNodeTriplet(selection.anchor);\n return cell.__colSpan > 1 || cell.__rowSpan > 1;\n}\n\nfunction $cellContainsEmptyParagraph(cell: TableCellNode): boolean {\n if (cell.getChildrenSize() !== 1) {\n return false;\n }\n const firstChild = cell.getFirstChildOrThrow();\n if (!$isParagraphNode(firstChild) || !firstChild.isEmpty()) {\n return false;\n }\n return true;\n}\n\nfunction $selectLastDescendant(node: ElementNode): void {\n const lastDescendant = node.getLastDescendant();\n if ($isTextNode(lastDescendant)) {\n lastDescendant.select();\n } else if ($isElementNode(lastDescendant)) {\n lastDescendant.selectEnd();\n } else if (lastDescendant !== null) {\n lastDescendant.selectNext();\n }\n}\n\nfunction currentCellBackgroundColor(editor: LexicalEditor): null | string {\n return editor.getEditorState().read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection) || $isTableSelection(selection)) {\n const [cell] = $getNodeTriplet(selection.anchor);\n if ($isTableCellNode(cell)) {\n return cell.getBackgroundColor();\n }\n }\n return null;\n });\n}\n\ntype TableCellActionMenuProps = Readonly<{\n contextRef: { current: null | HTMLElement };\n onClose: () => void;\n setIsMenuOpen: (isOpen: boolean) => void;\n showColorPickerModal: any;\n\n tableCellNode: TableCellNode;\n cellMerge: boolean;\n}>;\n\nfunction TableActionMenu({\n onClose,\n tableCellNode: _tableCellNode,\n setIsMenuOpen,\n contextRef,\n cellMerge,\n showColorPickerModal,\n}: TableCellActionMenuProps) {\n const [editor] = useLexicalComposerContext();\n const dropDownRef = useRef<HTMLDivElement | null>(null);\n const [tableCellNode, updateTableCellNode] = useState(_tableCellNode);\n const [selectionCounts, updateSelectionCounts] = useState({\n columns: 1,\n rows: 1,\n });\n const [canMergeCells, setCanMergeCells] = useState(false);\n const [canUnmergeCell, setCanUnmergeCell] = useState(false);\n const [backgroundColor, setBackgroundColor] = useState(\n () => currentCellBackgroundColor(editor) || \"\"\n );\n\n useEffect(() => {\n return editor.registerMutationListener(\n TableCellNode,\n (nodeMutations) => {\n const nodeUpdated =\n nodeMutations.get(tableCellNode.getKey()) === \"updated\";\n\n if (nodeUpdated) {\n editor.getEditorState().read(() => {\n updateTableCellNode(tableCellNode.getLatest());\n });\n setBackgroundColor(currentCellBackgroundColor(editor) || \"\");\n }\n },\n { skipInitialization: true }\n );\n }, [editor, tableCellNode]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n // Merge cells\n if ($isTableSelection(selection)) {\n const currentSelectionCounts = computeSelectionCount(selection);\n updateSelectionCounts(computeSelectionCount(selection));\n setCanMergeCells(\n currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1\n );\n }\n // Unmerge cell\n setCanUnmergeCell($canUnmerge());\n });\n }, [editor]);\n\n useEffect(() => {\n const menuButtonElement = contextRef.current;\n const dropDownElement = dropDownRef.current;\n const rootElement = editor.getRootElement();\n\n if (\n menuButtonElement != null &&\n dropDownElement != null &&\n rootElement != null\n ) {\n const rootEleRect = rootElement.getBoundingClientRect();\n const menuButtonRect = menuButtonElement.getBoundingClientRect();\n dropDownElement.style.opacity = \"1\";\n const dropDownElementRect = dropDownElement.getBoundingClientRect();\n const margin = 5;\n let leftPosition = menuButtonRect.right + margin;\n if (\n leftPosition + dropDownElementRect.width > window.innerWidth ||\n leftPosition + dropDownElementRect.width > rootEleRect.right\n ) {\n const position =\n menuButtonRect.left - dropDownElementRect.width - margin;\n leftPosition = (position < 0 ? margin : position) + window.pageXOffset;\n }\n dropDownElement.style.left = `${leftPosition + window.pageXOffset}px`;\n\n let topPosition = menuButtonRect.top;\n if (topPosition + dropDownElementRect.height > window.innerHeight) {\n const position = menuButtonRect.bottom - dropDownElementRect.height;\n topPosition = (position < 0 ? margin : position) + window.pageYOffset;\n }\n dropDownElement.style.top = `${topPosition + +window.pageYOffset}px`;\n }\n }, [contextRef, dropDownRef, editor]);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropDownRef.current != null &&\n contextRef.current != null &&\n isDOMNode(event.target) &&\n !dropDownRef.current.contains(event.target) &&\n !contextRef.current.contains(event.target)\n ) {\n setIsMenuOpen(false);\n }\n }\n\n window.addEventListener(\"click\", handleClickOutside);\n\n return () => window.removeEventListener(\"click\", handleClickOutside);\n }, [setIsMenuOpen, contextRef]);\n\n const clearTableSelection = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\n const tableElement = getTableElement(\n tableNode,\n editor.getElementByKey(tableNode.getKey())\n );\n\n invariant(\n tableElement !== null,\n \"TableActionMenu: Expected to find tableElement in DOM\"\n );\n\n const tableObserver = getTableObserverFromTableElement(tableElement);\n if (tableObserver !== null) {\n tableObserver.$clearHighlight();\n }\n\n tableNode.markDirty();\n updateTableCellNode(tableCellNode.getLatest());\n }\n\n const rootNode = $getRoot();\n rootNode.selectStart();\n });\n }, [editor, tableCellNode]);\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isTableSelection(selection)) {\n const { columns, rows } = computeSelectionCount(selection);\n const nodes = selection.getNodes();\n let firstCell: null | TableCellNode = null;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if ($isTableCellNode(node)) {\n if (firstCell === null) {\n node.setColSpan(columns).setRowSpan(rows);\n firstCell = node;\n const isEmpty = $cellContainsEmptyParagraph(node);\n let firstChild;\n if (\n isEmpty &&\n $isParagraphNode((firstChild = node.getFirstChild()))\n ) {\n firstChild.remove();\n }\n } else if ($isTableCellNode(firstCell)) {\n const isEmpty = $cellContainsEmptyParagraph(node);\n if (!isEmpty) {\n firstCell.append(...node.getChildren());\n }\n node.remove();\n }\n }\n }\n if (firstCell !== null) {\n if (firstCell.getChildrenSize() === 0) {\n firstCell.append($createParagraphNode());\n }\n $selectLastDescendant(firstCell);\n }\n onClose();\n }\n });\n };\n\n const unmergeTableCellsAtSelection = () => {\n editor.update(() => {\n $unmergeCell();\n });\n };\n\n const insertTableRowAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.rows; i++) {\n $insertTableRow__EXPERIMENTAL(shouldInsertAfter);\n }\n onClose();\n });\n },\n [editor, onClose, selectionCounts.rows]\n );\n\n const insertTableColumnAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.columns; i++) {\n $insertTableColumn__EXPERIMENTAL(shouldInsertAfter);\n }\n onClose();\n });\n },\n [editor, onClose, selectionCounts.columns]\n );\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRow__EXPERIMENTAL();\n onClose();\n });\n }, [editor, onClose]);\n\n const deleteTableAtSelection = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\n tableNode.remove();\n\n clearTableSelection();\n onClose();\n });\n }, [editor, tableCellNode, clearTableSelection, onClose]);\n\n const deleteTableColumnAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableColumn__EXPERIMENTAL();\n onClose();\n });\n }, [editor, onClose]);\n\n const toggleTableRowIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode);\n\n const tableRows = tableNode.getChildren();\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error(\"Expected table cell to be inside of table row.\");\n }\n\n const tableRow = tableRows[tableRowIndex];\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error(\"Expected table row\");\n }\n\n const newStyle =\n tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.ROW;\n tableRow.getChildren().forEach((tableCell) => {\n if (!$isTableCellNode(tableCell)) {\n throw new Error(\"Expected table cell\");\n }\n\n tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.ROW);\n });\n\n clearTableSelection();\n onClose();\n });\n }, [editor, tableCellNode, clearTableSelection, onClose]);\n\n const toggleTableColumnIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\n\n const tableColumnIndex =\n $getTableColumnIndexFromTableCellNode(tableCellNode);\n\n const tableRows = tableNode.getChildren<TableRowNode>();\n const maxRowsLength = Math.max(\n ...tableRows.map((row) => row.getChildren().length)\n );\n\n if (tableColumnIndex >= maxRowsLength || tableColumnIndex < 0) {\n throw new Error(\"Expected table cell to be inside of table row.\");\n }\n\n const newStyle =\n tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.COLUMN;\n for (let r = 0; r < tableRows.length; r++) {\n const tableRow = tableRows[r];\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error(\"Expected table row\");\n }\n\n const tableCells = tableRow.getChildren();\n if (tableColumnIndex >= tableCells.length) {\n // if cell is outside of bounds for the current row (for example various merge cell cases) we shouldn't highlight it\n continue;\n }\n\n const tableCell = tableCells[tableColumnIndex];\n\n if (!$isTableCellNode(tableCell)) {\n throw new Error(\"Expected table cell\");\n }\n\n tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.COLUMN);\n }\n clearTableSelection();\n onClose();\n });\n }, [editor, tableCellNode, clearTableSelection, onClose]);\n\n const toggleRowStriping = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\n if (tableNode) {\n tableNode.setRowStriping(!tableNode.getRowStriping());\n }\n }\n clearTableSelection();\n onClose();\n });\n }, [editor, tableCellNode, clearTableSelection, onClose]);\n\n const handleCellBackgroundColor = useCallback(\n (value: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection) || $isTableSelection(selection)) {\n const [cell] = $getNodeTriplet(selection.anchor);\n if ($isTableCellNode(cell)) {\n cell.setBackgroundColor(value);\n }\n\n if ($isTableSelection(selection)) {\n const nodes = selection.getNodes();\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if ($isTableCellNode(node)) {\n node.setBackgroundColor(value);\n }\n }\n }\n }\n });\n },\n [editor]\n );\n\n let mergeCellButton: null | JSX.Element = null;\n if (cellMerge) {\n if (canMergeCells) {\n mergeCellButton = (\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => mergeTableCellsAtSelection()}\n data-test-id=\"table-merge-cells\"\n >\n <span className=\"text\">Merge cells</span>\n </button>\n );\n } else if (canUnmergeCell) {\n mergeCellButton = (\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => unmergeTableCellsAtSelection()}\n data-test-id=\"table-unmerge-cells\"\n >\n <span className=\"text\">Unmerge cells</span>\n </button>\n );\n }\n }\n\n return createPortal(\n <div\n className=\"dropdown table-drop cteditor-bg-popover cteditor-border-popover\"\n ref={dropDownRef}\n onClick={(e) => {\n e.stopPropagation();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n >\n {mergeCellButton}\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() =>\n showColorPickerModal(\"Cell background color\", () => (\n <ColorPicker\n color={backgroundColor}\n onChange={handleCellBackgroundColor}\n />\n ))\n }\n data-test-id=\"table-background-color\"\n >\n <span className=\"text\">Background color</span>\n </button>\n\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => toggleRowStriping()}\n data-test-id=\"table-row-striping\"\n >\n <span className=\"text\">Toggle Row Striping</span>\n </button>\n <div className=\"cteditor-border-b cteditor-border-foreground/15 cteditor-my-1\"></div>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => insertTableRowAtSelection(false)}\n data-test-id=\"table-insert-row-above\"\n >\n <span className=\"text\">\n Insert{\" \"}\n {selectionCounts.rows === 1 ? \"row\" : `${selectionCounts.rows} rows`}{\" \"}\n above\n </span>\n </button>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => insertTableRowAtSelection(true)}\n data-test-id=\"table-insert-row-below\"\n >\n <span className=\"text\">\n Insert{\" \"}\n {selectionCounts.rows === 1 ? \"row\" : `${selectionCounts.rows} rows`}{\" \"}\n below\n </span>\n </button>\n <div className=\"cteditor-border-b cteditor-border-foreground/15 cteditor-my-1\"></div>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => insertTableColumnAtSelection(false)}\n data-test-id=\"table-insert-column-before\"\n >\n <span className=\"text\">\n Insert{\" \"}\n {selectionCounts.columns === 1\n ? \"column\"\n : `${selectionCounts.columns} columns`}{\" \"}\n left\n </span>\n </button>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => insertTableColumnAtSelection(true)}\n data-test-id=\"table-insert-column-after\"\n >\n <span className=\"text\">\n Insert{\" \"}\n {selectionCounts.columns === 1\n ? \"column\"\n : `${selectionCounts.columns} columns`}{\" \"}\n right\n </span>\n </button>\n <div className=\"border-b border-foreground/15 my-1\"></div>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => deleteTableColumnAtSelection()}\n data-test-id=\"table-delete-columns\"\n >\n <span className=\"text\">Delete column</span>\n </button>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => deleteTableRowAtSelection()}\n data-test-id=\"table-delete-rows\"\n >\n <span className=\"text\">Delete row</span>\n </button>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => deleteTableAtSelection()}\n data-test-id=\"table-delete\"\n >\n <span className=\"text\">Delete table</span>\n </button>\n <div className=\"cteditor-border-b cteditor-border-foreground/15 cteditor-my-1\"></div>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => toggleTableRowIsHeader()}\n >\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.ROW) ===\n TableCellHeaderStates.ROW\n ? \"Remove\"\n : \"Add\"}{\" \"}\n row header\n </span>\n </button>\n <button\n type=\"button\"\n className=\"item cteditor-capitalize cteditor-text-foreground hover:cteditor-text-foreground/75\"\n onClick={() => toggleTableColumnIsHeader()}\n data-test-id=\"table-column-header\"\n >\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.COLUMN) ===\n TableCellHeaderStates.COLUMN\n ? \"Remove\"\n : \"Add\"}{\" \"}\n column header\n </span>\n </button>\n </div>,\n document.body\n );\n}\n\nfunction TableCellActionMenuContainer({\n anchorElem,\n cellMerge,\n}: {\n anchorElem: HTMLElement;\n cellMerge: boolean;\n}): JSX.Element {\n const [editor] = useLexicalComposerContext();\n\n const menuButtonRef = useRef<HTMLDivElement | null>(null);\n const menuRootRef = useRef<HTMLButtonElement | null>(null);\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n const [tableCellNode, setTableMenuCellNode] = useState<TableCellNode | null>(\n null\n );\n\n const [colorPickerModal, showColorPickerModal] = useModal();\n\n const $moveMenu = useCallback(() => {\n const menu = menuButtonRef.current;\n const selection = $getSelection();\n const nativeSelection = getDOMSelection(editor._window);\n const activeElement = document.activeElement;\n function disable() {\n if (menu) {\n menu.classList.remove(\"table-cell-action-button-container--active\");\n menu.classList.add(\"table-cell-action-button-container--inactive\");\n }\n setTableMenuCellNode(null);\n }\n\n if (selection == null || menu == null) {\n return disable();\n }\n\n const rootElement = editor.getRootElement();\n let tableObserver: TableObserver | null = null;\n let tableCellParentNodeDOM: HTMLElement | null = null;\n\n if (\n $isRangeSelection(selection) &&\n rootElement !== null &&\n nativeSelection !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const tableCellNodeFromSelection = $getTableCellNodeFromLexicalNode(\n selection.anchor.getNode()\n );\n\n if (tableCellNodeFromSelection == null) {\n return disable();\n }\n\n tableCellParentNodeDOM = editor.getElementByKey(\n tableCellNodeFromSelection.getKey()\n );\n\n if (\n tableCellParentNodeDOM == null ||\n !tableCellNodeFromSelection.isAttached()\n ) {\n return disable();\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(\n tableCellNodeFromSelection\n );\n const tableElement = getTableElement(\n tableNode,\n editor.getElementByKey(tableNode.getKey())\n );\n\n invariant(\n tableElement !== null,\n \"TableActionMenu: Expected to find tableElement in DOM\"\n );\n\n tableObserver = getTableObserverFromTableElement(tableElement);\n setTableMenuCellNode(tableCellNodeFromSelection);\n } else if ($isTableSelection(selection)) {\n const anchorNode = $getTableCellNodeFromLexicalNode(\n selection.anchor.getNode()\n );\n invariant(\n $isTableCellNode(anchorNode),\n \"TableSelection anchorNode must be a TableCellNode\"\n );\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(anchorNode);\n const tableElement = getTableElement(\n tableNode,\n editor.getElementByKey(tableNode.getKey())\n );\n invariant(\n tableElement !== null,\n \"TableActionMenu: Expected to find tableElement in DOM\"\n );\n tableObserver = getTableObserverFromTableElement(tableElement);\n tableCellParentNodeDOM = editor.getElementByKey(anchorNode.getKey());\n } else if (!activeElement) {\n return disable();\n }\n if (tableObserver === null || tableCellParentNodeDOM === null) {\n return disable();\n }\n const enabled = !tableObserver || !tableObserver.isSelecting;\n menu.classList.toggle(\n \"table-cell-action-button-container--active\",\n enabled\n );\n menu.classList.toggle(\n \"table-cell-action-button-container--inactive\",\n !enabled\n );\n if (enabled) {\n const tableCellRect = tableCellParentNodeDOM.getBoundingClientRect();\n const anchorRect = anchorElem.getBoundingClientRect();\n const top = tableCellRect.top - anchorRect.top;\n const left = tableCellRect.right - anchorRect.left;\n menu.style.transform = `translate(${left}px, ${top}px)`;\n }\n }, [editor, anchorElem]);\n\n useEffect(() => {\n // We call the $moveMenu callback every time the selection changes,\n // once up front, and once after each mouseUp\n let timeoutId: ReturnType<typeof setTimeout> | undefined = undefined;\n const callback = () => {\n timeoutId = undefined;\n editor.getEditorState().read($moveMenu);\n };\n const delayedCallback = () => {\n if (timeoutId === undefined) {\n timeoutId = setTimeout(callback, 0);\n }\n return false;\n };\n return mergeRegister(\n editor.registerUpdateListener(delayedCallback),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n delayedCallback,\n COMMAND_PRIORITY_CRITICAL\n ),\n editor.registerRootListener((rootElement, prevRootElement) => {\n if (prevRootElement) {\n prevRootElement.removeEventListener(\"mouseup\", delayedCallback);\n }\n if (rootElement) {\n rootElement.addEventListener(\"mouseup\", delayedCallback);\n delayedCallback();\n }\n }),\n () => clearTimeout(timeoutId)\n );\n });\n\n const prevTableCellDOM = useRef(tableCellNode);\n\n useEffect(() => {\n if (prevTableCellDOM.current !== tableCellNode) {\n setIsMenuOpen(false);\n }\n\n prevTableCellDOM.current = tableCellNode;\n }, [prevTableCellDOM, tableCellNode]);\n return (\n <div className=\"table-cell-action-button-container\" ref={menuButtonRef}>\n {tableCellNode != null && (\n <>\n <button\n type=\"button\"\n className=\"table-cell-action-button chevron-down text-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n setIsMenuOpen(!isMenuOpen);\n }}\n ref={menuRootRef}\n >\n <ChevronDownIcon />\n </button>\n {colorPickerModal}\n {isMenuOpen && (\n <TableActionMenu\n contextRef={menuRootRef}\n setIsMenuOpen={setIsMenuOpen}\n onClose={() => setIsMenuOpen(false)}\n tableCellNode={tableCellNode}\n cellMerge={cellMerge}\n showColorPickerModal={showColorPickerModal}\n />\n )}\n </>\n )}\n </div>\n );\n}\nexport default function TableActionMenuPlugin({\n anchorElem, // Remove default value here\n cellMerge = false,\n}: {\n anchorElem: HTMLElement; // Make anchorElem required\n cellMerge?: boolean;\n}): null | ReactPortal {\n const isEditable = useLexicalEditable();\n\n // Add null check for anchorElem\n if (!anchorElem) return null;\n\n return createPortal(\n isEditable ? (\n <TableCellActionMenuContainer\n anchorElem={anchorElem}\n cellMerge={cellMerge}\n />\n ) : null,\n anchorElem // Use the provided anchor element\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport \"./index.css\";\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useLexicalEditable } from \"@lexical/react/useLexicalEditable\";\nimport type { TableCellNode, TableDOMCell, TableMapType } from \"@lexical/table\";\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n getTableElement,\n TableNode,\n} from \"@lexical/table\";\nimport { calculateZoomLevel } from \"@lexical/utils\";\nimport type { LexicalEditor } from \"lexical\";\nimport { $getNearestNodeFromDOMNode, isHTMLElement } from \"lexical\";\nimport type { JSX } from \"react\";\nimport * as React from \"react\";\nimport {\n MouseEventHandler,\n ReactPortal,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype MousePosition = {\n x: number;\n y: number;\n};\n\ntype MouseDraggingDirection = \"right\" | \"bottom\";\n\nconst MIN_ROW_HEIGHT = 33;\nconst MIN_COLUMN_WIDTH = 92;\n\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\n const targetRef = useRef<HTMLElement | null>(null);\n const resizerRef = useRef<HTMLDivElement | null>(null);\n const tableRectRef = useRef<ClientRect | null>(null);\n\n const mouseStartPosRef = useRef<MousePosition | null>(null);\n const [mouseCurrentPos, updateMouseCurrentPos] =\n useState<MousePosition | null>(null);\n\n const [activeCell, updateActiveCell] = useState<TableDOMCell | null>(null);\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false);\n const [draggingDirection, updateDraggingDirection] =\n useState<MouseDraggingDirection | null>(null);\n\n const resetState = useCallback(() => {\n updateActiveCell(null);\n targetRef.current = null;\n updateDraggingDirection(null);\n mouseStartPosRef.current = null;\n tableRectRef.current = null;\n }, []);\n\n const isMouseDownOnEvent = (event: MouseEvent) => {\n return (event.buttons & 1) === 1;\n };\n\n useEffect(() => {\n return editor.registerNodeTransform(TableNode, (tableNode) => {\n if (tableNode.getColWidths()) {\n return tableNode;\n }\n\n const numColumns = tableNode.getColumnCount();\n const columnWidth = MIN_COLUMN_WIDTH;\n\n tableNode.setColWidths(Array(numColumns).fill(columnWidth));\n return tableNode;\n });\n }, [editor]);\n\n useEffect(() => {\n const onMouseMove = (event: MouseEvent) => {\n const target = event.target;\n if (!isHTMLElement(target)) {\n return;\n }\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n });\n return;\n }\n updateIsMouseDown(isMouseDownOnEvent(event));\n if (resizerRef.current && resizerRef.current.contains(target)) {\n return;\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target;\n const cell = getDOMCellFromTarget(target);\n\n if (cell && activeCell !== cell) {\n editor.getEditorState().read(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem);\n if (!tableCellNode) {\n throw new Error(\"TableCellResizer: Table cell node not found.\");\n }\n\n const tableNode =\n $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\n const tableElement = getTableElement(\n tableNode,\n editor.getElementByKey(tableNode.getKey())\n );\n\n if (!tableElement) {\n throw new Error(\"TableCellResizer: Table element not found.\");\n }\n\n targetRef.current = target as HTMLElement;\n tableRectRef.current = tableElement.getBoundingClientRect();\n updateActiveCell(cell);\n },\n { editor }\n );\n } else if (cell == null) {\n resetState();\n }\n }\n };\n\n const onMouseDown = (event: MouseEvent) => {\n updateIsMouseDown(true);\n };\n\n const onMouseUp = (event: MouseEvent) => {\n updateIsMouseDown(false);\n };\n\n const removeRootListener = editor.registerRootListener(\n (rootElement, prevRootElement) => {\n prevRootElement?.removeEventListener(\"mousemove\", onMouseMove);\n prevRootElement?.removeEventListener(\"mousedown\", onMouseDown);\n prevRootElement?.removeEventListener(\"mouseup\", onMouseUp);\n rootElement?.addEventListener(\"mousemove\", onMouseMove);\n rootElement?.addEventListener(\"mousedown\", onMouseDown);\n rootElement?.addEventListener(\"mouseup\", onMouseUp);\n }\n );\n\n return () => {\n removeRootListener();\n };\n }, [activeCell, draggingDirection, editor, resetState]);\n\n const isHeightChanging = (direction: MouseDraggingDirection) => {\n if (direction === \"bottom\") {\n return true;\n }\n return false;\n };\n\n const updateRowHeight = useCallback(\n (heightChange: number) => {\n if (!activeCell) {\n throw new Error(\"TableCellResizer: Expected active cell.\");\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem);\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error(\"TableCellResizer: Table cell node not found.\");\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\n\n const tableRowIndex =\n $getTableRowIndexFromTableCellNode(tableCellNode) +\n tableCellNode.getRowSpan() -\n 1;\n\n const tableRows = tableNode.getChildren();\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error(\"Expected table cell to be inside of table row.\");\n }\n\n const tableRow = tableRows[tableRowIndex];\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error(\"Expected table row\");\n }\n\n let height = tableRow.getHeight();\n if (height === undefined) {\n const rowCells = tableRow.getChildren<TableCellNode>();\n height = Math.min(\n ...rowCells.map(\n (cell) => getCellNodeHeight(cell, editor) ?? Infinity\n )\n );\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT);\n tableRow.setHeight(newHeight);\n },\n { tag: \"skip-scroll-into-view\" }\n );\n },\n [activeCell, editor]\n );\n\n const getCellNodeHeight = (\n cell: TableCellNode,\n activeEditor: LexicalEditor\n ): number | undefined => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey());\n return domCellNode?.clientHeight;\n };\n\n const getCellColumnIndex = (\n tableCellNode: TableCellNode,\n tableMap: TableMapType\n ) => {\n for (let row = 0; row < tableMap.length; row++) {\n for (let column = 0; column < tableMap[row].length; column++) {\n if (tableMap[row][column].cell === tableCellNode) {\n return column;\n }\n }\n }\n };\n\n const updateColumnWidth = useCallback(\n (widthChange: number) => {\n if (!activeCell) {\n throw new Error(\"TableCellResizer: Expected active cell.\");\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem);\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error(\"TableCellResizer: Table cell node not found.\");\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\n const [tableMap] = $computeTableMapSkipCellCheck(\n tableNode,\n null,\n null\n );\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap);\n if (columnIndex === undefined) {\n throw new Error(\"TableCellResizer: Table column not found.\");\n }\n\n const colWidths = tableNode.getColWidths();\n if (!colWidths) {\n return;\n }\n const width = colWidths[columnIndex];\n if (width === undefined) {\n return;\n }\n const newColWidths = [...colWidths];\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH);\n newColWidths[columnIndex] = newWidth;\n tableNode.setColWidths(newColWidths);\n },\n { tag: \"skip-scroll-into-view\" }\n );\n },\n [activeCell, editor]\n );\n\n const mouseUpHandler = useCallback(\n (direction: MouseDraggingDirection) => {\n const handler = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!activeCell) {\n throw new Error(\"TableCellResizer: Expected active cell.\");\n }\n\n if (mouseStartPosRef.current) {\n const { x, y } = mouseStartPosRef.current;\n\n if (activeCell === null) {\n return;\n }\n const zoom = calculateZoomLevel(event.target as Element);\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom;\n updateRowHeight(heightChange);\n } else {\n const widthChange = (event.clientX - x) / zoom;\n updateColumnWidth(widthChange);\n }\n\n resetState();\n document.removeEventListener(\"mouseup\", handler);\n }\n };\n return handler;\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight]\n );\n\n const toggleResize = useCallback(\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\n (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!activeCell) {\n throw new Error(\"TableCellResizer: Expected active cell.\");\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n };\n updateMouseCurrentPos(mouseStartPosRef.current);\n updateDraggingDirection(direction);\n\n document.addEventListener(\"mouseup\", mouseUpHandler(direction));\n },\n [activeCell, mouseUpHandler]\n );\n\n const getResizers = useCallback((): any => {\n if (activeCell) {\n const { height, width, top, left } =\n activeCell.elem.getBoundingClientRect();\n const zoom = calculateZoomLevel(activeCell.elem);\n const zoneWidth = 10; // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: \"none\",\n cursor: \"row-resize\",\n height: `${zoneWidth}px`,\n left: `${window.pageXOffset + left}px`,\n top: `${window.pageYOffset + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: \"none\",\n cursor: \"col-resize\",\n height: `${height}px`,\n left: `${window.pageXOffset + left + width - zoneWidth / 2}px`,\n top: `${window.pageYOffset + top}px`,\n width: `${zoneWidth}px`,\n },\n };\n\n const tableRect = tableRectRef.current;\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${\n window.pageXOffset + tableRect.left\n }px`;\n styles[draggingDirection].top = `${\n window.pageYOffset + mouseCurrentPos.y / zoom\n }px`;\n styles[draggingDirection].height = \"3px\";\n styles[draggingDirection].width = `${tableRect.width}px`;\n } else {\n styles[draggingDirection].top = `${\n window.pageYOffset + tableRect.top\n }px`;\n styles[draggingDirection].left = `${\n window.pageXOffset + mouseCurrentPos.x / zoom\n }px`;\n styles[draggingDirection].width = \"3px\";\n styles[draggingDirection].height = `${tableRect.height}px`;\n }\n\n styles[draggingDirection].backgroundColor = \"#adf\";\n }\n\n return styles;\n }\n\n return {\n bottom: null,\n left: null,\n right: null,\n top: null,\n };\n }, [activeCell, draggingDirection, mouseCurrentPos]);\n\n const resizerStyles = getResizers();\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <>\n <div\n className=\"TableCellResizer__resizer TableCellResizer__ui\"\n style={resizerStyles.right || undefined}\n onMouseDown={toggleResize(\"right\")}\n />\n <div\n className=\"TableCellResizer__resizer TableCellResizer__ui\"\n style={resizerStyles.bottom || undefined}\n onMouseDown={toggleResize(\"bottom\")}\n />\n </>\n )}\n </div>\n );\n}\n\nexport default function TableCellResizerPlugin(): null | ReactPortal {\n const [editor] = useLexicalComposerContext();\n const isEditable = useLexicalEditable();\n\n return useMemo(\n () =>\n isEditable\n ? createPortal(<TableCellResizer editor={editor} />, document.body)\n : null,\n [editor, isEditable]\n );\n}\n","import { debounce } from \"lodash-es\";\nimport { useMemo, useRef } from \"react\";\n\nexport function useDebounce<T extends (...args: any[]) => void>(\n fn: T,\n ms: number,\n maxWait?: number\n) {\n const funcRef = useRef<T | null>(null);\n funcRef.current = fn;\n\n return useMemo(\n () =>\n debounce(\n (...args: Parameters<T>) => {\n if (funcRef.current) {\n funcRef.current(...args);\n }\n },\n ms,\n { maxWait }\n ),\n [ms, maxWait]\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useLexicalEditable } from \"@lexical/react/useLexicalEditable\";\nimport {\n $getTableAndElementByKey,\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableNode,\n getTableElement,\n TableCellNode,\n TableNode,\n TableRowNode,\n} from \"@lexical/table\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport { $getNearestNodeFromDOMNode, isHTMLElement, NodeKey } from \"lexical\";\nimport type { JSX } from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useDebounce } from \"src/hooks/useDebounce\";\nimport { PlusIcon } from \"src/ui/Icons\";\n\nconst BUTTON_WIDTH_PX = 20;\n\nfunction TableHoverActionsContainer({\n anchorElem,\n}: {\n anchorElem: HTMLElement;\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const isEditable = useLexicalEditable();\n const [isShownRow, setShownRow] = useState<boolean>(false);\n const [isShownColumn, setShownColumn] = useState<boolean>(false);\n const [shouldListenMouseMove, setShouldListenMouseMove] =\n useState<boolean>(false);\n const [position, setPosition] = useState({});\n const tableSetRef = useRef<Set<NodeKey>>(new Set());\n const tableCellDOMNodeRef = useRef<HTMLElement | null>(null);\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { isOutside, tableDOMNode } = getMouseInfo(event);\n\n if (isOutside) {\n setShownRow(false);\n setShownColumn(false);\n return;\n }\n\n if (!tableDOMNode) {\n return;\n }\n\n tableCellDOMNodeRef.current = tableDOMNode;\n\n let hoveredRowNode: TableCellNode | null = null;\n let hoveredColumnNode: TableCellNode | null = null;\n let tableDOMElement: HTMLElement | null = null;\n\n editor.getEditorState().read(\n () => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode);\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) =>\n $isTableNode(node)\n );\n if (!$isTableNode(table)) {\n return;\n }\n\n tableDOMElement = getTableElement(\n table,\n editor.getElementByKey(table.getKey())\n );\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize();\n const colCount = (\n (table as TableNode).getChildAtIndex(0) as TableRowNode\n )?.getChildrenSize();\n\n const rowIndex =\n $getTableRowIndexFromTableCellNode(maybeTableCell);\n const colIndex =\n $getTableColumnIndexFromTableCellNode(maybeTableCell);\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell;\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell;\n }\n }\n }\n },\n { editor }\n );\n\n if (tableDOMElement) {\n const {\n width: tableElemWidth,\n y: tableElemY,\n right: tableElemRight,\n left: tableElemLeft,\n bottom: tableElemBottom,\n height: tableElemHeight,\n } = (tableDOMElement as HTMLTableElement).getBoundingClientRect();\n\n // Adjust for using the scrollable table container\n const parentElement = (tableDOMElement as HTMLTableElement)\n .parentElement;\n let tableHasScroll = false;\n if (\n parentElement &&\n parentElement.classList.contains(\n \"PlaygroundEditorTheme__tableScrollableWrapper\"\n )\n ) {\n tableHasScroll =\n parentElement.scrollWidth > parentElement.clientWidth;\n }\n const { y: editorElemY, left: editorElemLeft } =\n anchorElem.getBoundingClientRect();\n\n if (hoveredRowNode) {\n setShownColumn(false);\n setShownRow(true);\n setPosition({\n height: BUTTON_WIDTH_PX,\n left:\n tableHasScroll && parentElement\n ? parentElement.offsetLeft\n : tableElemLeft - editorElemLeft,\n top: tableElemBottom - editorElemY + 5,\n width:\n tableHasScroll && parentElement\n ? parentElement.offsetWidth\n : tableElemWidth,\n });\n } else if (hoveredColumnNode) {\n setShownColumn(true);\n setShownRow(false);\n setPosition({\n height: tableElemHeight,\n left: tableElemRight - editorElemLeft + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n });\n }\n }\n },\n 50,\n 250\n );\n\n // Hide the buttons on any table dimensions change to prevent last row cells\n // overlap behind the 'Add Row' button when text entry changes cell height\n const tableResizeObserver = useMemo(() => {\n return new ResizeObserver(() => {\n setShownRow(false);\n setShownColumn(false);\n });\n }, []);\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return;\n }\n\n document.addEventListener(\"mousemove\", debouncedOnMouseMove);\n\n return () => {\n setShownRow(false);\n setShownColumn(false);\n debouncedOnMouseMove.cancel();\n document.removeEventListener(\"mousemove\", debouncedOnMouseMove);\n };\n }, [shouldListenMouseMove, debouncedOnMouseMove]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(\n () => {\n let resetObserver = false;\n for (const [key, type] of mutations) {\n switch (type) {\n case \"created\": {\n tableSetRef.current.add(key);\n resetObserver = true;\n break;\n }\n case \"destroyed\": {\n tableSetRef.current.delete(key);\n resetObserver = true;\n break;\n }\n default:\n break;\n }\n }\n if (resetObserver) {\n // Reset resize observers\n tableResizeObserver.disconnect();\n for (const tableKey of tableSetRef.current) {\n const { tableElement } = $getTableAndElementByKey(tableKey);\n tableResizeObserver.observe(tableElement);\n }\n setShouldListenMouseMove(tableSetRef.current.size > 0);\n }\n },\n { editor }\n );\n },\n { skipInitialization: false }\n )\n );\n }, [editor, tableResizeObserver]);\n\n const insertAction = (insertRow: boolean) => {\n editor.update(() => {\n if (tableCellDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(\n tableCellDOMNodeRef.current\n );\n maybeTableNode?.selectEnd();\n if (insertRow) {\n $insertTableRow__EXPERIMENTAL();\n setShownRow(false);\n } else {\n $insertTableColumn__EXPERIMENTAL();\n setShownColumn(false);\n }\n }\n });\n };\n\n if (!isEditable) {\n return null;\n }\n\n return (\n <>\n {isShownRow && (\n <button\n className={\"PlaygroundEditorTheme__tableAddRows \"}\n style={{ ...position }}\n onClick={() => insertAction(true)}\n >\n <PlusIcon />\n </button>\n )}\n {isShownColumn && (\n <button\n className={\"PlaygroundEditorTheme__tableAddColumns\"}\n style={{ ...position }}\n onClick={() => insertAction(false)}\n >\n <PlusIcon />\n </button>\n )}\n </>\n );\n}\n\nfunction getMouseInfo(event: MouseEvent): {\n tableDOMNode: HTMLElement | null;\n isOutside: boolean;\n} {\n const target = event.target;\n\n if (isHTMLElement(target)) {\n const tableDOMNode = target.closest<HTMLElement>(\n \"td.PlaygroundEditorTheme__tableCell, th.PlaygroundEditorTheme__tableCell\"\n );\n\n const isOutside = !(\n tableDOMNode ||\n target.closest<HTMLElement>(\n \"button.PlaygroundEditorTheme__tableAddRows\"\n ) ||\n target.closest<HTMLElement>(\n \"button.PlaygroundEditorTheme__tableAddColumns\"\n ) ||\n target.closest<HTMLElement>(\"div.TableCellResizer__resizer\")\n );\n\n return { isOutside, tableDOMNode };\n } else {\n return { isOutside: true, tableDOMNode: null };\n }\n}\n\nexport default function TableHoverActionsPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.ReactPortal | null {\n const isEditable = useLexicalEditable();\n\n return isEditable\n ? createPortal(\n <TableHoverActionsContainer anchorElem={anchorElem} />,\n anchorElem\n )\n : null;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n LexicalTypeaheadMenuPlugin,\n MenuOption,\n useBasicTypeaheadTriggerMatch,\n} from \"@lexical/react/LexicalTypeaheadMenuPlugin\";\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n FORMAT_ELEMENT_COMMAND,\n TextNode,\n} from \"lexical\";\nimport {\n $createHeadingNode,\n HeadingTagType,\n} from \"@lexical/rich-text\";\nimport {\n INSERT_CHECK_LIST_COMMAND,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n} from \"@lexical/list\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { INSERT_IMAGE_COMMAND } from \"src/plugins/ImagePlugin\";\nimport { $createEmbedNode } from \"src/nodes/EmbedNode\";\n\nclass SlashMenuOption extends MenuOption {\n label: string;\n onSelect: () => void;\n\n constructor(label: string, onSelect: () => void) {\n super(label);\n this.label = label;\n this.onSelect = onSelect;\n }\n}\n\nfunction SlashMenuItem({\n index,\n isSelected,\n onClick,\n onMouseEnter,\n option,\n}: {\n index: number;\n isSelected: boolean;\n onClick: () => void;\n onMouseEnter: () => void;\n option: SlashMenuOption;\n}) {\n let className = \"item\";\n if (isSelected) {\n className += \" selected\";\n }\n return (\n <li\n key={option.key}\n tabIndex={-1}\n className={className}\n ref={option.setRefElement}\n role=\"option\"\n aria-selected={isSelected}\n id={\"typeahead-item-\" + index}\n onMouseEnter={onMouseEnter}\n onClick={onClick}\n >\n <div className=\"slash-item\">\n <span className=\"text slash-item__label\">{option.label}</span>\n </div>\n </li>\n );\n}\n\nexport default function SlashCommandPlugin(): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [queryString, setQueryString] = useState<string | null>(null);\n\n const triggerFn = useBasicTypeaheadTriggerMatch(\"/\", { minLength: 0 });\n\n const makeBlock = useCallback((cb: () => void) => {\n editor.update(() => {\n cb();\n });\n }, [editor]);\n\n const insertParagraph = useCallback(() => {\n makeBlock(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n selection.insertNodes([$createParagraphNode()]);\n }\n });\n }, [makeBlock]);\n\n const insertHeading = useCallback((tag: HeadingTagType) => {\n makeBlock(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n selection.insertNodes([$createHeadingNode(tag)]);\n }\n });\n }, [makeBlock]);\n\n const toggleBullet = useCallback(() => {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n }, [editor]);\n\n const toggleNumber = useCallback(() => {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }, [editor]);\n\n const toggleTodo = useCallback(() => {\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined);\n }, [editor]);\n\n const align = useCallback((value: \"left\" | \"center\" | \"right\") => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, value);\n }, [editor]);\n\n const insertImage = useCallback(() => {\n const url = window.prompt(\"Image URL\");\n if (!url) return;\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, {\n src: url,\n altText: \"\",\n });\n }, [editor]);\n\n const insertVideo = useCallback(() => {\n const url = window.prompt(\"Video URL (YouTube, etc.)\");\n if (!url) return;\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const node = $createEmbedNode(url);\n selection.insertNodes([node]);\n }\n });\n }, [editor]);\n\n const baseOptions = useMemo(() => {\n return [\n new SlashMenuOption(\"Paragraph\", insertParagraph),\n new SlashMenuOption(\"Heading 1\", () => insertHeading(\"h1\")),\n new SlashMenuOption(\"Heading 2\", () => insertHeading(\"h2\")),\n new SlashMenuOption(\"Heading 3\", () => insertHeading(\"h3\")),\n new SlashMenuOption(\"Bullet list\", toggleBullet),\n new SlashMenuOption(\"Numbered list\", toggleNumber),\n new SlashMenuOption(\"Todo list\", toggleTodo),\n new SlashMenuOption(\"Image\", insertImage),\n new SlashMenuOption(\"Video\", insertVideo),\n new SlashMenuOption(\"Align left\", () => align(\"left\")),\n new SlashMenuOption(\"Align center\", () => align(\"center\")),\n new SlashMenuOption(\"Align right\", () => align(\"right\")),\n ];\n }, [insertParagraph, insertHeading, toggleBullet, toggleNumber, toggleTodo, insertImage, insertVideo, align]);\n\n const options = useMemo(() => {\n if (!queryString) return baseOptions;\n const q = queryString.toLowerCase();\n return baseOptions.filter((o) => o.label.toLowerCase().includes(q));\n }, [baseOptions, queryString]);\n\n const onSelectOption = useCallback(\n (\n selectedOption: SlashMenuOption,\n nodeToReplace: TextNode | null,\n closeMenu: () => void\n ) => {\n // Execute the command\n selectedOption.onSelect();\n // Clean up the typed \"/...\" text\n editor.update(() => {\n if (nodeToReplace) {\n nodeToReplace.remove();\n }\n });\n closeMenu();\n },\n [editor]\n );\n\n return (\n <LexicalTypeaheadMenuPlugin<SlashMenuOption>\n onQueryChange={setQueryString}\n onSelectOption={onSelectOption}\n triggerFn={triggerFn}\n options={options}\n menuRenderFn={(anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) =>\n anchorElementRef.current\n ? ReactDOM.createPortal(\n <div className=\"typeahead-popover slash-menu\">\n {options.length > 0 ? (\n <ul>\n {options.map((option, i) => (\n <SlashMenuItem\n key={option.key}\n index={i}\n isSelected={selectedIndex === i}\n onClick={() => {\n setHighlightedIndex(i);\n selectOptionAndCleanUp(option);\n }}\n onMouseEnter={() => {\n setHighlightedIndex(i);\n }}\n option={option}\n />\n ))}\n </ul>\n ) : (\n <div className=\"no-users-found\">No results</div>\n )}\n </div>,\n anchorElementRef.current\n )\n : null\n }\n />\n );\n}\n\n\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getRoot } from \"lexical\";\nimport React, { useEffect, useState } from \"react\";\n\ninterface WordCountStats {\n words: number;\n characters: number;\n}\n\nconst WordCountPlugin: React.FC = () => {\n const [editor] = useLexicalComposerContext();\n const [stats, setStats] = useState<WordCountStats>({\n words: 0,\n characters: 0,\n });\n\n useEffect(() => {\n return editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const root = $getRoot();\n const text = root.getTextContent();\n\n // Count words (split by whitespace and filter empty strings)\n const words = text\n .trim()\n .split(/\\s+/)\n .filter((word) => word.length > 0).length;\n\n // Count characters (excluding whitespace)\n const characters = text.replace(/\\s/g, \"\").length;\n\n setStats({ words, characters });\n });\n });\n }, [editor]);\n\n return (\n <div\n style={{\n position: \"absolute\",\n bottom: \"10px\",\n right: \"10px\",\n display: \"flex\",\n gap: \"16px\",\n fontSize: \"12px\",\n color: \"#666\",\n backgroundColor: \"rgba(255, 255, 255, 0.9)\",\n padding: \"6px 12px\",\n borderRadius: \"4px\",\n boxShadow: \"0 2px 4px rgba(0,0,0,0.1)\",\n zIndex: 5,\n pointerEvents: \"none\",\n }}\n >\n <span>Words: {stats.words}</span>\n <span>Characters: {stats.characters}</span>\n </div>\n );\n};\n\nexport default WordCountPlugin;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getRoot, $createTextNode, $createParagraphNode, TextNode, $isTextNode, $getNodeByKey } from \"lexical\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AlertCircle, CheckCircle, X } from \"lucide-react\";\nimport { Card, CardContent } from \"src/components/ui/card\";\nimport { Badge } from \"src/components/ui/badge\";\nimport \"../styles/GrammarCheckPlugin.css\";\n\ninterface ErrorInfo {\n type: \"spelling\" | \"grammar\";\n original: string;\n suggestions: string[];\n index: number;\n issue?: string;\n}\n\ninterface TooltipState {\n error: ErrorInfo;\n x: number;\n y: number;\n}\n\nclass GrammarCheckService {\n private cache = new Map<string, ErrorInfo[]>();\n private apiEndpoint: string;\n private pendingRequest: Promise<ErrorInfo[]> | null = null;\n\n constructor() {\n this.apiEndpoint = import.meta.env.VITE_APP_BACKEND_ENDPOINT + \"api/ai/process\";\n }\n\n async check(text: string): Promise<ErrorInfo[]> {\n if (!text || text.trim().length < 3) {\n return [];\n }\n\n const cacheKey = text.trim();\n\n // Check cache first\n if (this.cache.has(cacheKey)) {\n return this.cache.get(cacheKey)!;\n }\n\n // If request is already pending, wait for it\n if (this.pendingRequest) {\n return this.pendingRequest;\n }\n\n // Make new request\n this.pendingRequest = this.executeCheck(text);\n\n try {\n const result = await this.pendingRequest;\n return result;\n } finally {\n this.pendingRequest = null;\n }\n }\n\n private async executeCheck(text: string): Promise<ErrorInfo[]> {\n try {\n\n const response = await fetch(this.apiEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ text: text.trim(), maxSuggestions: 3 }),\n signal: AbortSignal.timeout(10000),\n });\n\n if (!response.ok) {\n console.error(\"❌ GrammarCheck: API error:\", response.status);\n return [];\n }\n\n const result = await response.json();\n const foundErrors: ErrorInfo[] = [];\n\n // Extract spelling errors\n if (result.data?.corrections?.spelling?.errors) {\n result.data.corrections.spelling.errors.forEach((err: any, idx: number) => {\n foundErrors.push({\n type: \"spelling\",\n original: err.original,\n suggestions: err.suggestions || [],\n index: idx,\n });\n });\n }\n\n // Extract grammar errors\n if (result.data?.corrections?.grammar?.errors) {\n result.data.corrections.grammar.errors.forEach((err: any, idx: number) => {\n foundErrors.push({\n type: \"grammar\",\n original: err.original || text,\n suggestions: [err.suggestion],\n index: foundErrors.length + idx,\n issue: err.issue,\n });\n });\n }\n\n // Cache the result\n this.cache.set(text.trim(), foundErrors);\n\n // Limit cache size to 30 entries\n if (this.cache.size > 30) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n\n return foundErrors;\n } catch (error) {\n console.error(\"❌ GrammarCheck: Check failed:\", error);\n return [];\n }\n }\n}\n\nexport default function GrammarCheckPlugin(): JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [errors, setErrors] = useState<ErrorInfo[]>([]);\n const [tooltip, setTooltip] = useState<TooltipState | null>(null);\n const [userDismissed, setUserDismissed] = useState(false); // Track if user manually dismissed\n const grammarService = useRef(new GrammarCheckService());\n const checkTimeout = useRef<number>();\n const lastCheckedText = useRef<string>(\"\");\n const highlightElementsRef = useRef<HTMLElement[]>([]);\n\n const checkGrammar = useCallback(async () => {\n const text = editor.getEditorState().read(() => $getRoot().getTextContent());\n\n // Skip if text hasn't changed\n if (text === lastCheckedText.current) {\n return;\n }\n\n // If text has changed significantly (more than 20 chars), reset dismiss flag\n if (Math.abs(text.length - lastCheckedText.current.length) > 20) {\n setUserDismissed(false);\n }\n\n lastCheckedText.current = text;\n\n if (!text || text.trim().length < 3) {\n setErrors([]);\n return;\n }\n\n const foundErrors = await grammarService.current.check(text);\n setErrors(foundErrors);\n }, [editor]);\n\n // Debounced grammar check on text change\n useEffect(() => {\n const unregister = editor.registerUpdateListener(() => {\n clearTimeout(checkTimeout.current);\n checkTimeout.current = window.setTimeout(checkGrammar, 2000); // Check 2 seconds after typing stops\n });\n\n return () => {\n unregister();\n clearTimeout(checkTimeout.current);\n };\n }, [editor, checkGrammar]);\n\n // Apply visual error underlines using DOM manipulation\n useEffect(() => {\n // Clear previous highlights\n highlightElementsRef.current.forEach((el) => {\n el.classList.remove(\"spelling-error\", \"grammar-error\");\n });\n highlightElementsRef.current = [];\n\n // Don't show underlines if user dismissed or no errors\n if (errors.length === 0 || userDismissed) return;\n\n // Wait a bit for editor to render\n const timeoutId = setTimeout(() => {\n const editorElement = document.querySelector('.ContentEditable__root');\n if (!editorElement) return;\n\n const walker = document.createTreeWalker(\n editorElement,\n NodeFilter.SHOW_TEXT,\n null\n );\n\n const textNodes: Text[] = [];\n let node: Node | null;\n\n while ((node = walker.nextNode())) {\n textNodes.push(node as Text);\n }\n\n errors.forEach((error) => {\n textNodes.forEach((textNode) => {\n const nodeText = textNode.textContent || \"\";\n const errorIndex = nodeText.toLowerCase().indexOf(error.original.toLowerCase());\n\n if (errorIndex !== -1 && textNode.parentElement) {\n const className = error.type === \"spelling\" ? \"spelling-error\" : \"grammar-error\";\n\n // Add class to parent span/element\n if (textNode.parentElement.tagName === 'SPAN') {\n textNode.parentElement.classList.add(className);\n highlightElementsRef.current.push(textNode.parentElement);\n } else if (textNode.parentElement) {\n // Wrap the error text in a span\n const range = document.createRange();\n range.setStart(textNode, errorIndex);\n range.setEnd(textNode, Math.min(errorIndex + error.original.length, nodeText.length));\n\n const span = document.createElement('span');\n span.className = className;\n span.setAttribute('data-error-type', error.type);\n\n try {\n range.surroundContents(span);\n highlightElementsRef.current.push(span);\n } catch (e) {\n // If surrounding fails, just add class to parent\n if (textNode.parentElement) {\n textNode.parentElement.classList.add(className);\n highlightElementsRef.current.push(textNode.parentElement);\n }\n }\n }\n }\n });\n });\n }, 100);\n\n return () => clearTimeout(timeoutId);\n }, [errors, userDismissed]);\n\n // Helper function to get word at specific point\n const getWordAtPoint = useCallback((x: number, y: number): string | null => {\n try {\n // Use caretRangeFromPoint (Chrome) or caretPositionFromPoint (Firefox)\n let range: Range | null = null;\n\n if (document.caretRangeFromPoint) {\n range = document.caretRangeFromPoint(x, y);\n } else if ((document as any).caretPositionFromPoint) {\n const position = (document as any).caretPositionFromPoint(x, y);\n if (position) {\n range = document.createRange();\n range.setStart(position.offsetNode, position.offset);\n }\n }\n\n if (!range) return null;\n\n const textNode = range.startContainer;\n if (textNode.nodeType !== Node.TEXT_NODE) return null;\n\n const text = textNode.textContent || \"\";\n let start = range.startOffset;\n let end = range.startOffset;\n\n // Expand to word boundaries\n while (start > 0 && /\\w/.test(text[start - 1])) {\n start--;\n }\n while (end < text.length && /\\w/.test(text[end])) {\n end++;\n }\n\n const word = text.substring(start, end).trim();\n return word || null;\n } catch (error) {\n console.error(\"Error getting word at point:\", error);\n return null;\n }\n }, []);\n\n // Handle mouse hover to show tooltip\n useEffect(() => {\n if (errors.length === 0) return;\n\n let hoverTimeout: number;\n\n const handleMouseMove = (e: MouseEvent) => {\n // Clear any existing timeout\n clearTimeout(hoverTimeout);\n\n // Debounce the hover check slightly\n hoverTimeout = window.setTimeout(() => {\n // Get the word at cursor position\n const wordAtCursor = getWordAtPoint(e.clientX, e.clientY);\n\n if (wordAtCursor) {\n // Find matching error (exact match)\n const matchedError = errors.find((err) =>\n wordAtCursor.toLowerCase() === err.original.toLowerCase()\n );\n\n if (matchedError) {\n setTooltip({\n error: matchedError,\n x: e.clientX,\n y: e.clientY,\n });\n }\n }\n }, 50);\n };\n\n const handleClick = () => {\n setTooltip(null);\n };\n\n // Attach to document body to capture all mouse movements\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"click\", handleClick);\n\n return () => {\n clearTimeout(hoverTimeout);\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"click\", handleClick);\n };\n }, [errors, getWordAtPoint]);\n\n // Apply correction\n const applyCorrection = useCallback(\n (suggestion: string, original: string, errorType?: string) => {\n \n editor.update(() => {\n const root = $getRoot();\n const currentText = root.getTextContent();\n\n\n // Determine if this is a spelling or grammar error\n const isSpellingError = errorType === \"spelling\";\n\n let newText = currentText;\n\n if (isSpellingError) {\n // Spelling error: replace just the specific word\n const escapedOriginal = original.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`\\\\b${escapedOriginal}\\\\b`, \"gi\");\n newText = currentText.replace(regex, suggestion);\n } else {\n // Grammar error: replace the original part with the suggestion\n // The 'original' is the incorrect part, 'suggestion' is the corrected version\n\n // First, try to find and replace the exact original text\n const escapedOriginal = original.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(escapedOriginal, \"gi\");\n\n if (currentText.toLowerCase().includes(original.toLowerCase())) {\n // Direct replacement if original is found in current text\n newText = currentText.replace(regex, suggestion);\n } else {\n // Fallback: if original is not in current text, it might be the full corrected text\n // In this case, just use the suggestion\n newText = suggestion;\n }\n }\n\n\n // Replace entire editor content\n root.clear();\n const paragraph = $createParagraphNode();\n const textNode = $createTextNode(newText);\n paragraph.append(textNode);\n root.append(paragraph);\n\n });\n\n setTooltip(null);\n\n // Re-check grammar after applying correction\n setTimeout(() => {\n lastCheckedText.current = \"\";\n checkGrammar();\n }, 100);\n },\n [editor, checkGrammar]\n );\n\n // Show error in tooltip when clicked from panel\n const showErrorTooltip = (error: ErrorInfo, event: React.MouseEvent) => {\n setTooltip({\n error,\n x: event.clientX,\n y: event.clientY,\n });\n };\n\n return (\n <>\n {/* Error Panel - Compact horizontal bar (only show if user hasn't dismissed) */}\n {errors.length > 0 && !userDismissed && (\n <div className=\"grammar-error-panel\">\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-bg-amber-50 cteditor-border cteditor-border-amber-200 cteditor-rounded-lg cteditor-px-3 cteditor-py-2 cteditor-shadow-sm\">\n <AlertCircle className=\"cteditor-h-4 cteditor-w-4 cteditor-text-amber-600 cteditor-flex-shrink-0\" />\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-flex-1 cteditor-overflow-x-auto cteditor-max-w-2xl\">\n <span className=\"cteditor-text-xs cteditor-font-semibold cteditor-text-amber-800 cteditor-whitespace-nowrap\">\n {errors.length} {errors.length === 1 ? \"issue\" : \"issues\"}:\n </span>\n <div className=\"cteditor-flex cteditor-gap-2 cteditor-items-center\">\n {errors.map((error, idx) => (\n <div\n key={idx}\n className=\"cteditor-flex cteditor-items-center cteditor-gap-1.5 cteditor-bg-white cteditor-border cteditor-border-gray-200 cteditor-rounded cteditor-px-2 cteditor-py-1 cteditor-whitespace-nowrap cteditor-cursor-pointer hover:cteditor-bg-gray-50 cteditor-transition-colors\"\n onClick={(e) => showErrorTooltip(error, e)}\n >\n <span className=\"cteditor-text-xs cteditor-line-through cteditor-text-red-600 cteditor-max-w-24 cteditor-truncate\" title={error.original}>\n {error.original}\n </span>\n <span className=\"cteditor-text-xs cteditor-text-gray-400\">→</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n applyCorrection(error.suggestions[0], error.original, error.type);\n }}\n className=\"cteditor-text-xs cteditor-text-green-600 hover:cteditor-text-green-700 cteditor-font-medium cteditor-max-w-24 cteditor-truncate\"\n title={error.suggestions[0]}\n >\n {error.suggestions[0]}\n </button>\n </div>\n ))}\n </div>\n </div>\n <button\n onClick={() => setUserDismissed(true)}\n className=\"cteditor-p-1 hover:cteditor-bg-amber-100 cteditor-rounded cteditor-flex-shrink-0 cteditor-transition-colors\"\n title=\"Dismiss grammar suggestions\"\n >\n <X className=\"cteditor-h-3.5 cteditor-w-3.5 cteditor-text-amber-600\" />\n </button>\n </div>\n </div>\n )}\n\n {/* Tooltip on hover */}\n {tooltip &&\n createPortal(\n <div\n className=\"grammar-tooltip\"\n style={{\n position: \"fixed\",\n left: tooltip.x,\n top: tooltip.y + 20,\n zIndex: 10000,\n }}\n onMouseEnter={() => {\n // Keep tooltip open when hovering over it\n }}\n onMouseLeave={() => {\n setTooltip(null);\n }}\n >\n <Card className=\"cteditor-w-72 cteditor-shadow-xl cteditor-border-2\">\n <CardContent className=\"cteditor-p-3\">\n {/* Header */}\n <div className=\"cteditor-flex cteditor-items-center cteditor-gap-2 cteditor-mb-3\">\n {tooltip.error.type === \"spelling\" ? (\n <AlertCircle className=\"cteditor-h-4 cteditor-w-4 cteditor-text-red-500\" />\n ) : (\n <CheckCircle className=\"cteditor-h-4 cteditor-w-4 cteditor-text-blue-500\" />\n )}\n <Badge\n variant={tooltip.error.type === \"spelling\" ? \"destructive\" : \"default\"}\n className=\"cteditor-text-xs\"\n >\n {tooltip.error.type === \"spelling\" ? \"Spelling Error\" : \"Grammar Issue\"}\n </Badge>\n </div>\n\n {/* Error description */}\n {tooltip.error.issue && (\n <p className=\"cteditor-text-xs cteditor-text-muted-foreground cteditor-mb-2 cteditor-italic\">\n {tooltip.error.issue}\n </p>\n )}\n\n {/* Original word */}\n <div className=\"cteditor-mb-2\">\n <p className=\"cteditor-text-xs cteditor-font-semibold cteditor-text-muted-foreground\">\n Original:\n </p>\n <p className=\"cteditor-text-sm cteditor-line-through cteditor-text-red-600\">\n {tooltip.error.original}\n </p>\n </div>\n\n {/* Suggestions */}\n {tooltip.error.suggestions.length > 0 && (\n <div>\n <p className=\"cteditor-text-xs cteditor-font-semibold cteditor-text-muted-foreground cteditor-mb-1\">\n Suggestions:\n </p>\n <div className=\"cteditor-space-y-1\">\n {tooltip.error.suggestions.map((suggestion, idx) => (\n <button\n key={idx}\n onClick={() => applyCorrection(suggestion, tooltip.error.original, tooltip.error.type)}\n className=\"cteditor-w-full cteditor-text-left cteditor-p-2 cteditor-text-sm cteditor-rounded-md cteditor-bg-accent/50 hover:cteditor-bg-accent cteditor-transition-colors cteditor-border cteditor-border-transparent hover:cteditor-border-primary\"\n >\n ✓ {suggestion}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {tooltip.error.suggestions.length === 0 && (\n <p className=\"cteditor-text-xs cteditor-text-muted-foreground cteditor-italic\">\n No suggestions available\n </p>\n )}\n </CardContent>\n </Card>\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { cn } from \"src/lib/utils\";\n\nconst useStyles = () => ({\n // container: \"cteditor-relative cteditor-w-full cteditor-bg-white cteditor-text-black cteditor-font-normal cteditor-text-left cteditor-border cteditor-border-red-500\",\n\n contentEditable: cn(\n \"cteditor-relative cteditor-min-h-[150px] cteditor-max-h-[500px] cteditor-resize-none cteditor-outline-none cteditor-bg-background cteditor-rounded-lg\",\n \"cteditor-text-base cteditor-caret-[#757575] cteditor-p-[15px] cteditor-overflow-auto\",\n \"[&>hr]:cteditor-border-none [&>hr]:cteditor-h-[2px]\"\n ),\n\n placeholder: cn(\n \"cteditor-absolute cteditor-top-4 cteditor-left-4 cteditor-text-[15px] cteditor-text-[#9e9e9e]\",\n \"cteditor-overflow-hidden cteditor-text-ellipsis cteditor-whitespace-nowrap\",\n \"cteditor-select-none cteditor-pointer-events-none cteditor-inline-block\"\n ),\n});\n\nexport default useStyles;\n","import \"../../styles/autocomplete.css\";\n\nimport { $generateHtmlFromNodes, $generateNodesFromDOM } from \"@lexical/html\";\nimport { CheckListPlugin } from \"@lexical/react/LexicalCheckListPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport LexicalErrorBoundary from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TablePlugin } from \"@lexical/react/LexicalTablePlugin\";\nimport { CAN_USE_DOM } from \"@lexical/utils\";\nimport Stack from \"@mui/material/Stack\";\nimport { $getRoot, $getSelection, EditorState, LexicalEditor, $setSelection, $createRangeSelection } from \"lexical\";\nimport React, { useEffect, useState } from \"react\";\nimport AIRephrasePlugin from \"src/components/AiPlugin\";\nimport CodeActionMenuPlugin from \"src/components/CodeActionMenuPlugin\";\nimport CommentSidebar from \"src/components/CommentSidebar\";\nimport CommentToggle from \"src/components/CommentToggle\";\nimport HtmlViewDisplay from \"src/components/HtmlViewDisplay\";\nimport Toolbar from \"src/components/Toolbar\";\nimport { CommentProvider } from \"src/context/CommentContext\";\nimport { HtmlViewProvider } from \"src/context/HtmlViewContext\";\nimport { ToolbarContext, useToolbarState } from \"src/context/ToolbarContext\";\nimport AIChatPlugin from \"src/plugins/AIChatPlugin\";\nimport AutocompletePlugin from \"src/plugins/AutocompletePlugin\";\nimport CodeHighlightPlugin from \"src/plugins/CodeHighlightPlugin\";\nimport CommentPlugin from \"src/plugins/CommentPlugin\";\nimport { CustomHorizontalRulePlugin } from \"src/plugins/CustomHorizontalRulePlugin\";\nimport EmbedPreviewPlugin from \"src/plugins/EmbedPreviewPlugin\";\nimport FilePlugin from \"src/plugins/FilePlugin\";\nimport FloatingLinkEditorPlugin from \"src/plugins/FloatingLinkEditorPlugin\";\nimport FloatingTextFormatToolbarPlugin from \"src/plugins/FloatingTextFormatToolbarPlugin\";\nimport HtmlViewTogglePlugin from \"src/plugins/HtmlCodeViewPlugin\";\nimport HtmlSyncPlugin from \"src/plugins/HtmlSyncPlugin\";\nimport ImagePlugin from \"src/plugins/ImagePlugin\";\nimport LinkPlugin from \"src/plugins/LinkPlugin\";\nimport LocalStoragePlugin from \"src/plugins/LocalStoragePlugin\";\nimport NewMentionsPlugin from \"src/plugins/MentionsPlugin\";\nimport NotePanelPlugin from \"src/plugins/NotePanelPlugin\";\nimport { SignatureCanvasPlugin } from \"src/plugins/SignatureCanvasPlugin\";\nimport TableActionMenuPlugin from \"src/plugins/TableActionMenuPlugin\";\nimport TableCellResizerPlugin from \"src/plugins/TableCellResizer\";\nimport TableHoverActionsPlugin from \"src/plugins/TableHoverActionsPlugin\";\nimport SlashCommandPlugin from \"src/plugins/SlashCommandPlugin\";\nimport WordCountPlugin from \"src/plugins/WordCountPlugin\";\nimport GrammarCheckPlugin from \"src/plugins/GrammarCheckPlugin\";\nimport { EditorConfigTypes, ToolbarProps } from \"src/types\";\n\nimport { initialConfig } from \"../../constants\";\nimport useStyles from \"../styles\";\n/**\n * Handles editor state changes, retrieving root and selection.\n */\n\n/**\n * ConfigurableEditor component using Lexical.\n * Includes plugins for various functionalities such as lists, tables, and formatting.\n */\n\ninterface ConfigurableEditorProps {\n config: EditorConfigTypes; // Accepts the config object\n defaultFontFamilies: string[];\n mentionUserList: string[];\n initialContent?: string;\n onChange?: (html: string) => void;\n}\n\n// Create a toolbar wrapper component to access editor context\ntype ToolbarWrapperProps = Omit<\n ToolbarProps,\n \"editor\" | \"activeEditor\" | \"setActiveEditor\"\n>;\n\nconst ToolbarWithEditor: React.FC<ToolbarWrapperProps> = (props) => {\n const [editor] = useLexicalComposerContext();\n return (\n <Toolbar\n {...props}\n editor={editor}\n activeEditor={editor}\n setActiveEditor={(newEditor: LexicalEditor) => {\n // This is just a placeholder to satisfy the props\n console.log(\"Editor change requested\");\n }}\n />\n );\n};\n\nconst AutocompleteWrapper: React.FC = () => {\n const { toolbarState } = useToolbarState();\n\n // Only render AutocompletePlugin if autocomplete is enabled\n if (!toolbarState.isAutocompleteEnabled) {\n return null;\n }\n\n return <AutocompletePlugin minMatchLength={2} maxSuggestions={10} />;\n};\n\n// Wrapper component for OnChangePlugin to access editor context\nconst OnChangeWrapper: React.FC<{ onChange?: (html: string) => void }> = ({ onChange }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleChange = (editorState: EditorState) => {\n editorState.read(() => {\n const root = $getRoot();\n const selection = $getSelection();\n\n if (onChange) {\n const htmlContent = $generateHtmlFromNodes(editor, null);\n onChange(htmlContent);\n }\n });\n };\n\n return <OnChangePlugin onChange={handleChange} />;\n};\n\n// Plugin to initialize editor with HTML content\nconst InitialContentPlugin: React.FC<{ initialContent?: string }> = ({ initialContent }) => {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n if (!initialContent) return;\n\n editor.update(() => {\n const parser = new DOMParser();\n const dom = parser.parseFromString(initialContent, 'text/html');\n const nodes = $generateNodesFromDOM(editor, dom);\n\n // Clear existing content and insert new nodes\n const root = $getRoot();\n root.clear();\n root.append(...nodes);\n\n // Move cursor to the end of the content\n root.selectEnd();\n });\n }, [editor, initialContent]);\n\n return null;\n};\n\nconst ConfigurableEditor: React.FC<ConfigurableEditorProps> = ({\n config,\n defaultFontFamilies,\n mentionUserList,\n initialContent,\n onChange,\n}) => {\n // Note: initialContent will be handled by InitialContentPlugin\n \n const classes = useStyles();\n const [isLinkEditMode, setIsLinkEditMode] = useState<boolean>(false);\n\n const [editor, setEditor] = useState<LexicalEditor | null>(null);\n const [activeEditor, setActiveEditor] = useState<LexicalEditor | null>(null);\n\n const [floatingAnchorElem, setFloatingAnchorElem] =\n useState<HTMLDivElement | null>(null);\n const [isSmallWidthViewport, setIsSmallWidthViewport] =\n useState<boolean>(false);\n const [isCommentSidebarOpen, setIsCommentSidebarOpen] =\n useState<boolean>(false);\n const [commentCount, setCommentCount] = useState<number>(0);\n const onRef = (_floatingAnchorElem: HTMLDivElement) => {\n if (_floatingAnchorElem !== null) {\n setFloatingAnchorElem(_floatingAnchorElem);\n }\n };\n /**\n * Set floating anchor element reference.\n */\n\n useEffect(() => {\n const updateViewPortWidth = () => {\n const isNextSmallWidthViewport =\n CAN_USE_DOM && window.matchMedia(\"(max-width: 1025px)\").matches;\n\n if (isNextSmallWidthViewport !== isSmallWidthViewport) {\n setIsSmallWidthViewport(isNextSmallWidthViewport);\n }\n };\n updateViewPortWidth();\n window.addEventListener(\"resize\", updateViewPortWidth);\n\n return () => {\n window.removeEventListener(\"resize\", updateViewPortWidth);\n };\n }, [isSmallWidthViewport]);\n\n // Use the base initialConfig without localStorage content\n const editorInitialConfig = {\n ...initialConfig,\n };\n\n return (\n <>\n <CommentProvider>\n <LexicalComposer initialConfig={editorInitialConfig}>\n <HtmlViewProvider>\n <ToolbarContext>\n <Stack>\n {config.enableToolbar && (\n <div className=\"cteditor-flex cteditor-justify-between cteditor-gap-2 cteditor-items-center cteditor-mb-4\">\n <ToolbarWithEditor\n editable\n {...config.toolbarOptions}\n fonts={defaultFontFamilies}\n />\n <CommentToggle\n isOpen={isCommentSidebarOpen}\n onClick={() =>\n setIsCommentSidebarOpen(!isCommentSidebarOpen)\n }\n commentCount={commentCount}\n />\n </div>\n )}{\" \"}\n {/* mention plugin we can pass the userlist as props */}\n <NewMentionsPlugin userList={mentionUserList} />\n <NotePanelPlugin />\n <CommentPlugin />\n <div style={{ position: \"relative\" }}>\n <RichTextPlugin\n contentEditable={\n <div className=\"editor-scroller\">\n <div className=\"editor\" ref={onRef}>\n <ContentEditable\n className={classes.contentEditable}\n style={{\n tabSize: 1,\n }}\n />\n </div>\n </div>\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n <WordCountPlugin />\n </div>\n <HtmlViewDisplay />\n <AIRephrasePlugin />\n <AIChatPlugin />\n <HtmlSyncPlugin />\n <CodeHighlightPlugin />\n <SlashCommandPlugin />\n <AutocompleteWrapper />\n <GrammarCheckPlugin />\n <OnChangeWrapper onChange={onChange} />\n <InitialContentPlugin initialContent={initialContent} />\n <HistoryPlugin />\n <LocalStoragePlugin namespace={initialConfig.namespace} />\n <ListPlugin />\n <LinkPlugin hasLinkAttributes={false} />\n <FilePlugin />\n <HorizontalRulePlugin />\n <CustomHorizontalRulePlugin />\n <CheckListPlugin />\n <ImagePlugin />\n <SignatureCanvasPlugin />\n <TablePlugin\n hasCellMerge={true}\n hasCellBackgroundColor={true}\n hasHorizontalScroll={true}\n />\n <TableCellResizerPlugin />\n <EmbedPreviewPlugin />\n {config.htmlViewOption &&\n !config.toolbarOptions.enableHtmlViewToggle && (\n <HtmlViewTogglePlugin />\n )}\n </Stack>\n\n {floatingAnchorElem && !isSmallWidthViewport && (\n <>\n <TableActionMenuPlugin\n anchorElem={floatingAnchorElem}\n cellMerge={true}\n />\n <TableHoverActionsPlugin anchorElem={floatingAnchorElem} />\n <CodeActionMenuPlugin anchorElem={floatingAnchorElem} />\n <FloatingLinkEditorPlugin\n anchorElem={floatingAnchorElem}\n isLinkEditMode={isLinkEditMode}\n setIsLinkEditMode={setIsLinkEditMode}\n />\n {config.enableFloatingMenu && (\n <FloatingTextFormatToolbarPlugin\n anchorElem={floatingAnchorElem}\n setIsLinkEditMode={setIsLinkEditMode}\n features={config.floatingMenuOptions}\n // add features props and we can define which all features we want to use here\n />\n )}\n </>\n )}\n {/* {false && <TreeViewPlugin />} */}\n </ToolbarContext>\n </HtmlViewProvider>\n <CommentSidebar\n isOpen={isCommentSidebarOpen}\n onClose={() => setIsCommentSidebarOpen(false)}\n onCommentCountChange={setCommentCount}\n />\n </LexicalComposer>\n </CommentProvider>\n </>\n );\n};\n\nexport default ConfigurableEditor;\n","interface ScopedEditorWrapperProps {\n children: React.ReactNode;\n className?: string;\n darkMode?: boolean;\n}\n// import \"./index.css\";\n// import \"./pages/ConfigurableEditor/ConfigurableEditor.css\";\nimport \"./../globals.css\";\n// import \"./App.css\";\nimport \"./../styles/EditorTheme.css\";\nimport \"./../styles/PlaygroundEditorTheme.css\";\nimport \"./../styles/AIChatPlugin.css\";\n\nexport const ScopedEditorWrapper: React.FC<ScopedEditorWrapperProps> = ({\n children,\n className = \"\",\n darkMode = false,\n}) => {\n return (\n <div id=\"ct-editor-f47ac10b\">\n <div className=\"cteditor-p-2 \">{children}</div>\n </div>\n );\n};\n\nexport default ScopedEditorWrapper;\n","import \"./../globals.css\";\n// import \"./App.css\";\nimport \"./../styles/EditorTheme.css\";\nimport \"./../styles/PlaygroundEditorTheme.css\";\nimport \"./../styles/AIChatPlugin.css\";\n\nimport styled from \"@emotion/styled\";\nimport React, { useEffect, useRef } from \"react\";\n\nimport { ApiResponse } from \"../api/auth\";\nimport { editorConfig as defaultEditorConfig } from \"../editorConfig\";\nimport ConfigurableEditor from \"../pages/ConfigurableEditor/ConfigurableEditor\";\nimport { useEditor } from \"../Provider/EditorProvider\";\nimport ScopedEditorWrapper from \"./ScopedEditor\";\n\n// Styled components for error and loading states\nconst MessageContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n padding: 20px;\n border-radius: 8px;\n margin: 20px;\n font-size: 16px;\n font-weight: 500;\n`;\n\nconst LoadingMessage = styled(MessageContainer)`\n background-color: #f8f9fa;\n color: #495057;\n border: 1px solid #dee2e6;\n`;\n\nconst ErrorMessage = styled(MessageContainer)`\n background-color: #fff5f5;\n color: #e53e3e;\n border: 1px solid #feb2b2;\n`;\n\nconst AuthMessage = styled(MessageContainer)`\n background-color: #ebf8ff;\n color: #2b6cb0;\n border: 1px solid #bee3f8;\n`;\n\ninterface ConfigurableEditorWithAuthProps {\n apiKey: string;\n initialContent?: string;\n onChange?: (html: string) => void;\n defaultFontFamilies?: string[];\n mentionUserList?: string[];\n onAuthSuccess?: () => void;\n onAuthError?: (error: string) => void;\n customVerifyKey?: (apiKey: string) => Promise<ApiResponse>;\n}\n\nconst ConfigurableEditorWithAuth: React.FC<ConfigurableEditorWithAuthProps> = ({\n apiKey,\n initialContent,\n onChange,\n defaultFontFamilies = defaultEditorConfig.defaultFontFamilies || [],\n mentionUserList = defaultEditorConfig.mentionUserList || [],\n onAuthSuccess,\n onAuthError,\n customVerifyKey,\n}) => {\n const { isAuthenticated, isLoading, error, editorConfig, verifyKey } =\n useEditor();\n console.log(editorConfig, \"editorConfig\");\n const successRef = useRef(onAuthSuccess);\n const errorRef = useRef(onAuthError);\n\n // ✅ New ref to track if auth attempt is already made\n const hasAttemptedAuthRef = useRef(false);\n\n useEffect(() => {\n successRef.current = onAuthSuccess;\n errorRef.current = onAuthError;\n }, [onAuthSuccess, onAuthError]);\n\n useEffect(() => {\n if (!apiKey || hasAttemptedAuthRef.current) return;\n\n hasAttemptedAuthRef.current = true;\n\n const authenticate = async () => {\n try {\n if (customVerifyKey) {\n console.log(\"Inside\");\n const response = await customVerifyKey(apiKey);\n console.log(response, \"response\");\n if (response.success) {\n successRef.current?.();\n } else {\n errorRef.current?.(response.message);\n }\n } else {\n await verifyKey(apiKey);\n }\n } catch (err: any) {\n console.log(err, \"error\");\n errorRef.current?.(err.message || \"Failed to verify API key\");\n }\n };\n\n authenticate();\n }, [apiKey, customVerifyKey, verifyKey]);\n\n useEffect(() => {\n if (isAuthenticated) {\n successRef.current?.();\n }\n if (error) {\n errorRef.current?.(error);\n }\n }, [isAuthenticated, error]);\n\n if (isLoading) {\n return (\n <ScopedEditorWrapper>\n <LoadingMessage>\n <span>Loading editor...</span>\n </LoadingMessage>\n </ScopedEditorWrapper>\n );\n }\n\n if (error) {\n return (\n <ScopedEditorWrapper>\n <ErrorMessage>\n <span>Error: {error}</span>\n </ErrorMessage>\n </ScopedEditorWrapper>\n );\n }\n\n if (!isAuthenticated || !editorConfig) {\n return (\n <ScopedEditorWrapper>\n <AuthMessage>\n <span>Please provide a valid API key to access the editor</span>\n </AuthMessage>\n </ScopedEditorWrapper>\n );\n }\n\n return (\n <ScopedEditorWrapper>\n <ConfigurableEditor\n config={{\n ...editorConfig,\n htmlViewOption: true,\n }}\n defaultFontFamilies={defaultFontFamilies}\n mentionUserList={mentionUserList}\n initialContent={initialContent}\n onChange={onChange}\n />\n </ScopedEditorWrapper>\n );\n};\n\nexport default ConfigurableEditorWithAuth;\n"],"names":["editorConfig","React","theme","freeGlobal","Symbol","root","objectProto","nativeObjectToString","symToStringTag","index","debounce","now","useDebounce","getMouseInfo","y","isHTMLElement","Component","size","X","Context","Provider","createContextScope","composeContextScopes","useCallbackRef","useLayoutEffect2","setRef","composeRefs","i","useComposedRefs","Slot","isSlottable","getElementRef","mergeProps","Fragment2","NODES","Primitive","Node","dispatchDiscreteCustomEvent","Avatar","AvatarImage","useLayoutEffect","AvatarFallback","Root","Image","f","classGroup","AvatarPrimitive.Root","AvatarPrimitive.Image","AvatarPrimitive.Fallback","param","SlotClone","NAME","Separator","SeparatorPrimitive.Root","composeEventHandlers","useReactId","count","useId","useControllableState","useUncontrolledState","useEscapeKeydown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","usePointerDownOutside","useFocusOutside","dispatchUpdate","BRANCH_NAME","DismissableLayerBranch","handleAndDispatchCustomEvent","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","focus","focusScopesStack","focusFirst","removeLinks","getTabbableCandidates","getTabbableEdges","findVisible","isHidden","isSelectableInput","createFocusScopesStack","arrayRemove","PORTAL_NAME","Portal","ReactDOM","useStateMachine","Presence","usePresence","React2","getAnimationName","useFocusGuards","createFocusGuard","__assign","s","p","x","cbs","SideCar","RemoveScroll","Sheet","Style","Dialog","TRIGGER_NAME","getState","PortalProvider","usePortalContext","DialogPortal","PortalPrimitive","DialogOverlay","CONTENT_NAME","DialogContent","DialogTitle","DialogDescription","CLOSE_NAME","createContext","Content","SheetPrimitive.Root","SheetPrimitive.Portal","SheetPrimitive.Overlay","SheetPrimitive.Content","SheetPrimitive.Close","SheetPrimitive.Title","SheetPrimitive.Description","PROVIDER_NAME","createCollectionScope","useCollection","b","GROUP_NAME","Collection","ITEM_NAME","wrapArray","Item","useRovingFocusGroupScope","Tabs","TabsList","RovingFocusGroup.Root","TabsTrigger","RovingFocusGroup.Item","TabsContent","Root2","Trigger","TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content","replyText","c","ReplyIcon","Edit3","LucideCornerDownLeft","v","clamp","computePosition","platform","arrow","max","offset","flip","sides","side","d","placement","overflow","hide","shift","min","limitShift","getComputedStyle","$","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","data","Arrow","useSize","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","ANCHOR_NAME","PopperAnchor","PopperContentProvider","useContentContext","PopperContent","isNotNull","floatingUIarrow","transformOrigin","getSideAndAlignFromPlacement","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","ArrowPrimitive.Root","Anchor","usePopperScope","TooltipProvider","Tooltip","PopperPrimitive.Root","TooltipTrigger","PopperPrimitive.Anchor","TooltipContent","isPointInPolygon","handleScroll","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","PopperPrimitive.Arrow","q","r","Root3","Content2","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","TooltipPrimitive.Portal","TooltipPrimitive.Content","htmlContent","self","thumbnailUrl","url","BaseHorizontalRuleNode","DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","Input","Label","LabelPrimitive.Root","parent","SELECTION_KEYS","LABEL_NAME","CHECKBOX_ITEM_NAME","RADIO_GROUP_NAME","RADIO_ITEM_NAME","ITEM_INDICATOR_NAME","SEPARATOR_NAME","SUB_TRIGGER_NAME","SUB_CONTENT_NAME","Item2","ItemIndicator","DropdownMenu","MenuPrimitive.Root","DropdownMenuTrigger","MenuPrimitive.Anchor","MenuPrimitive.Portal","DropdownMenuContent","MenuPrimitive.Content","MenuPrimitive.Group","DropdownMenuLabel","MenuPrimitive.Label","DropdownMenuItem","MenuPrimitive.Item","DropdownMenuCheckboxItem","MenuPrimitive.CheckboxItem","MenuPrimitive.RadioGroup","DropdownMenuRadioItem","MenuPrimitive.RadioItem","MenuPrimitive.ItemIndicator","DropdownMenuSeparator","MenuPrimitive.Separator","MenuPrimitive.Arrow","DropdownMenuSubTrigger","MenuPrimitive.SubTrigger","DropdownMenuSubContent","MenuPrimitive.SubContent","DropdownMenuPrimitive.Root","DropdownMenuPrimitive.Trigger","DropdownMenuPrimitive.SubTrigger","DropdownMenuPrimitive.SubContent","DropdownMenuPrimitive.Portal","DropdownMenuPrimitive.Content","DropdownMenuPrimitive.Item","DropdownMenuPrimitive.CheckboxItem","DropdownMenuPrimitive.ItemIndicator","DropdownMenuPrimitive.RadioItem","DropdownMenuPrimitive.Label","DropdownMenuPrimitive.Separator","e","t","m","g","o","a","C","n","u","l","h","PopperArrow2","Popover","PopoverTrigger","PopoverContent","PopoverPrimitive.Root","PopoverPrimitive.Trigger","PopoverPrimitive.Portal","PopoverPrimitive.Content","ColorPicker","_a","_b","HexColorPicker","Select","SelectTrigger","SelectValue","SelectContent","SelectLabel","SelectItem","SelectScrollUpButton","SelectScrollDownButton","SelectSeparator","SelectPrimitive.Root","SelectPrimitive.Value","SelectPrimitive.Trigger","SelectPrimitive.Icon","SelectPrimitive.ScrollUpButton","SelectPrimitive.ScrollDownButton","SelectPrimitive.Portal","SelectPrimitive.Content","SelectPrimitive.Viewport","SelectPrimitive.Label","SelectPrimitive.Item","SelectPrimitive.ItemIndicator","SelectPrimitive.ItemText","SelectPrimitive.Separator","uploadedUrl","validateUrl","objectWithoutPropertiesLoose","setPrototypeOf","_isNativeReflectConstruct","assertThisInitialized","isNativeReflectConstruct","getPrototypeOf","possibleConstructorReturn","ReactPropTypesSecret","require$$0","propTypesModule","cx","later","this","SignatureCanvas","useModal","useStyles","isLinkActive","selectedText","LinkIcon","CodeIcon","VERTICAL_GAP","HORIZONTAL_OFFSET","Edit2","LexicalLinkPlugin","LocalStoragePlugin","defaultEditorConfig"],"mappings":"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","x_google_ignoreList":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,75,76,77,78,79,80,81,82,83,86,88,89,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,133,134,135,136,137,138,139,140,141,142,156,172,173,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,199,200,201,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234]}