@liveblocks/react-tiptap 2.25.0-aiprivatebeta8 → 2.25.0-aiprivatebeta9

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.
@@ -291,7 +291,7 @@ function AiToolbarThinking() {
291
291
  const editor = context.useCurrentEditor("AiToolbarThinking", "AiToolbar");
292
292
  const contentRef = react.useRef(null);
293
293
  const aiName = editor.storage.liveblocksAi.name;
294
- const handleCancel = react.useCallback(() => {
294
+ const handleAbort = react.useCallback(() => {
295
295
  editor.commands.$cancelAiToolbarThinking();
296
296
  }, [editor]);
297
297
  _private$1.useLayoutEffect(() => {
@@ -318,14 +318,14 @@ function AiToolbarThinking() {
318
318
  /* @__PURE__ */ jsxRuntime.jsx("div", {
319
319
  className: "lb-tiptap-ai-toolbar-actions",
320
320
  children: /* @__PURE__ */ jsxRuntime.jsx(_private.ShortcutTooltip, {
321
- content: "Cancel",
321
+ content: "Abort response",
322
322
  shortcut: "Escape",
323
323
  children: /* @__PURE__ */ jsxRuntime.jsx(_private.Button, {
324
324
  className: "lb-tiptap-ai-toolbar-action",
325
325
  variant: "secondary",
326
- "aria-label": "Cancel",
326
+ "aria-label": "Abort response",
327
327
  icon: /* @__PURE__ */ jsxRuntime.jsx(_private.StopIcon, {}),
328
- onClick: handleCancel
328
+ onClick: handleAbort
329
329
  })
330
330
  })
331
331
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AiToolbar.cjs","sources":["../../src/ai/AiToolbar.tsx"],"sourcesContent":["import {\n autoUpdate,\n type DetectOverflowOptions,\n hide,\n limitShift,\n type Middleware,\n offset,\n shift,\n useFloating,\n type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n ArrowCornerDownRightIcon,\n Button,\n CheckIcon,\n CrossIcon,\n EditIcon,\n LengthenIcon,\n QuestionMarkIcon,\n SendIcon,\n ShortcutTooltip,\n ShortenIcon,\n SparklesIcon,\n SparklesTextIcon,\n StopIcon,\n TooltipProvider,\n UndoIcon,\n useRefs,\n WarningIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport { type Editor, useEditorState } from \"@tiptap/react\";\nimport { Command, useCommandState } from \"cmdk\";\nimport type {\n ComponentProps,\n ComponentType,\n KeyboardEvent as ReactKeyboardEvent,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from \"react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type {\n AiCommands,\n AiExtensionStorage,\n AiToolbarState,\n ChainedAiCommands,\n} from \"../types\";\nimport { getDomRangeFromSelection } from \"../utils\";\nimport { DEFAULT_STATE, isContextualPromptDiffResponse } from \"./AiExtension\";\n\nexport const AI_TOOLBAR_COLLISION_PADDING = 10;\n\nexport interface AiToolbarProps\n extends Omit<ComponentProps<\"div\">, \"value\" | \"defaultValue\" | \"children\"> {\n /**\n * The Tiptap editor.\n */\n editor: Editor | null;\n\n /**\n * The vertical offset of the AI toolbar from the selection.\n */\n offset?: number;\n\n /**\n * The prompt suggestions to display below the AI toolbar.\n */\n suggestions?: ReactNode | ComponentType<PropsWithChildren>;\n}\n\ntype AiToolbarDropdownSeparatorProps = ComponentProps<\"div\">;\n\ninterface AiToolbarDropdownItemProps\n extends ComponentProps<typeof Command.Item> {\n icon?: ReactNode;\n}\n\ntype AiToolbarSuggestionsSeparatorProps = AiToolbarDropdownSeparatorProps;\n\ntype AiToolbarSuggestionsLabelProps = ComponentProps<\"span\">;\n\ninterface AiToolbarSuggestionProps extends ComponentProps<\"div\"> {\n prompt?: string;\n icon?: ReactNode;\n}\n\ninterface AiToolbarContext {\n state: AiToolbarState;\n toolbarRef: RefObject<HTMLDivElement>;\n dropdownRef: RefObject<HTMLDivElement>;\n isDropdownHidden: boolean;\n}\n\nconst AiToolbarContext = createContext<AiToolbarContext | null>(null);\n\nfunction useAiToolbarContext() {\n const context = useContext(AiToolbarContext);\n\n if (!context) {\n throw new Error(\"useAiToolbarContext must be used within an AiToolbar\");\n }\n\n return context;\n}\n\n/**\n * A custom Floating UI middleware to position/scale the toolbar:\n * - Vertically: relative to the reference (e.g. selection)\n * - Horizontally: relative to the editor\n * - Width: relative to the editor\n */\nfunction tiptapFloating(editor: Editor | null): Middleware {\n return {\n name: \"tiptap\",\n options: editor,\n fn({ elements }) {\n if (!editor) {\n return {};\n }\n\n const editorRect = editor.view.dom.getBoundingClientRect();\n\n elements.floating.style.setProperty(\n \"--lb-tiptap-editor-width\",\n `${editorRect.width}px`\n );\n elements.floating.style.setProperty(\n \"--lb-tiptap-editor-height\",\n `${editorRect.height}px`\n );\n\n return {\n x: editorRect.x,\n };\n },\n };\n}\n\n/**\n * A custom Floating UI middleware to flip the toolbar/dropdown when shifted more than 100%.\n */\nfunction flipToolbar(): Middleware {\n return {\n name: \"flipToolbar\",\n fn({ elements, middlewareData, rects }) {\n const shiftOffsetY = middlewareData.shift?.y ?? 0;\n\n if (Math.abs(shiftOffsetY) >= rects.floating.height) {\n elements.floating.setAttribute(\"data-liveblocks-ai-toolbar-flip\", \"\");\n } else {\n elements.floating.removeAttribute(\"data-liveblocks-ai-toolbar-flip\");\n }\n\n return {};\n },\n };\n}\n\nconst AiToolbarDropdownSeparator = forwardRef<\n HTMLDivElement,\n AiToolbarDropdownSeparatorProps\n>(({ className, ...props }, forwardedRef) => {\n return (\n <Command.Separator\n className={classNames(\"lb-dropdown-separator\", className)}\n {...props}\n ref={forwardedRef}\n />\n );\n});\n\nconst AiToolbarSuggestionsSeparator = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionsSeparatorProps\n>((props, forwardedRef) => {\n return <AiToolbarDropdownSeparator ref={forwardedRef} {...props} />;\n});\n\nconst AiToolbarDropdownItem = forwardRef<\n HTMLDivElement,\n AiToolbarDropdownItemProps\n>(({ children, onSelect, icon, className, ...props }, forwardedRef) => {\n return (\n <Command.Item\n className={classNames(\"lb-dropdown-item\", className)}\n onSelect={onSelect}\n {...props}\n ref={forwardedRef}\n >\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? (\n <span className=\"lb-dropdown-item-label\">{children}</span>\n ) : null}\n </Command.Item>\n );\n});\n\nconst AiToolbarSuggestionsLabel = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionsLabelProps\n>(({ children, className, ...props }, forwardedRef) => {\n return (\n <span\n ref={forwardedRef}\n className={classNames(\"lb-dropdown-label\", className)}\n {...props}\n >\n {children}\n </span>\n );\n});\n\nconst AiToolbarSuggestion = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionProps\n>(({ prompt: manualPrompt, ...props }, forwardedRef) => {\n const editor = useCurrentEditor(\"Suggestion\", \"AiToolbar\");\n\n const handleSelect = useCallback(\n (prompt: string) => {\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n manualPrompt ?? prompt\n );\n },\n [editor, manualPrompt]\n );\n\n return (\n <AiToolbarDropdownItem\n {...props}\n onSelect={handleSelect}\n ref={forwardedRef}\n />\n );\n});\n\nfunction AiToolbarReviewingSuggestions() {\n const editor = useCurrentEditor(\"ReviewingSuggestions\", \"AiToolbar\");\n const { state } = useAiToolbarContext();\n const { response } = state as Extract<AiToolbarState, { phase: \"reviewing\" }>;\n\n if (isContextualPromptDiffResponse(response)) {\n return (\n <>\n <AiToolbarDropdownItem\n icon={<CheckIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$acceptAiToolbarResponse\n }\n >\n Accept\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<UndoIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking\n }\n >\n Try again\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<CrossIcon />}\n onSelect={(editor.commands as unknown as AiCommands).$closeAiToolbar}\n >\n Discard\n </AiToolbarDropdownItem>\n </>\n );\n } else {\n return (\n <>\n <AiToolbarDropdownItem\n icon={<ArrowCornerDownRightIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$acceptAiToolbarResponse\n }\n >\n Insert below\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<UndoIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking\n }\n >\n Try again\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<CrossIcon />}\n onSelect={(editor.commands as unknown as AiCommands).$closeAiToolbar}\n >\n Discard\n </AiToolbarDropdownItem>\n </>\n );\n }\n}\n\nfunction AiToolbarCustomPromptContent() {\n const editor = useCurrentEditor(\"CustomPromptContent\", \"AiToolbar\");\n const aiName = (editor.storage.liveblocksAi as AiExtensionStorage).name;\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const { state, dropdownRef, isDropdownHidden } = useAiToolbarContext();\n const { customPrompt } = state as Exclude<\n AiToolbarState,\n { phase: \"closed\" }\n >;\n const isCustomPromptEmpty = useMemo(\n () => customPrompt.trim() === \"\",\n [customPrompt]\n );\n\n useLayoutEffect(\n () => {\n requestAnimationFrame(() => {\n const textArea = textAreaRef.current;\n\n if (!textArea) {\n return;\n }\n\n textArea.focus();\n textArea.setSelectionRange(\n textArea.value.length,\n textArea.value.length\n );\n });\n },\n [] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const handlePromptKeyDown = (\n event: ReactKeyboardEvent<HTMLTextAreaElement>\n ) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n\n if (event.shiftKey) {\n // If the shift key is pressed, add a new line\n (editor.commands as unknown as AiCommands)._updateAiToolbarCustomPrompt(\n (customPrompt) => customPrompt + \"\\n\"\n );\n } else {\n const selectedDropdownItem = dropdownRef.current?.querySelector(\n \"[role='option'][data-selected='true']\"\n ) as HTMLElement | null;\n\n if (!isDropdownHidden && selectedDropdownItem) {\n // If there's a selected dropdown item, select it\n selectedDropdownItem.click();\n } else if (!isCustomPromptEmpty) {\n // Otherwise, submit the custom prompt\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n customPrompt,\n state.phase === \"reviewing\"\n );\n }\n }\n }\n };\n\n const handleCustomPromptChange = useCallback(\n (customPrompt: string) => {\n (editor.commands as unknown as AiCommands)._updateAiToolbarCustomPrompt(\n customPrompt\n );\n },\n [editor]\n );\n\n const handleSendClick = useCallback(() => {\n if (isCustomPromptEmpty) {\n return;\n }\n\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n customPrompt,\n state.phase === \"reviewing\"\n );\n }, [editor, customPrompt, isCustomPromptEmpty, state.phase]);\n\n return (\n <div className=\"lb-tiptap-ai-toolbar-content\">\n <span className=\"lb-icon-container lb-tiptap-ai-toolbar-icon-container\">\n <SparklesIcon />\n </span>\n <div\n className=\"lb-tiptap-ai-toolbar-custom-prompt-container\"\n data-value={customPrompt}\n >\n <Command.Input\n value={customPrompt}\n onValueChange={handleCustomPromptChange}\n asChild\n >\n <textarea\n ref={textAreaRef}\n className=\"lb-tiptap-ai-toolbar-custom-prompt\"\n placeholder={`Ask ${aiName} anything…`}\n onKeyDown={handlePromptKeyDown}\n rows={1}\n autoFocus\n />\n </Command.Input>\n </div>\n <div className=\"lb-tiptap-ai-toolbar-actions\">\n <ShortcutTooltip content={`Ask ${aiName}`} shortcut=\"Enter\">\n <Button\n className=\"lb-tiptap-ai-toolbar-action\"\n variant=\"primary\"\n aria-label={`Ask ${aiName}`}\n icon={<SendIcon />}\n disabled={isCustomPromptEmpty}\n onClick={handleSendClick}\n />\n </ShortcutTooltip>\n </div>\n </div>\n );\n}\n\nfunction AiToolbarAsking() {\n const { state } = useAiToolbarContext();\n const { error } = state as Exclude<AiToolbarState, { phase: \"closed\" }>;\n\n return (\n <>\n <AiToolbarCustomPromptContent />\n {error ? (\n <div className=\"lb-tiptap-ai-toolbar-error\">\n <span className=\"lb-icon-container\">\n <WarningIcon />\n </span>\n There was a problem with your request.\n </div>\n ) : null}\n </>\n );\n}\n\nfunction AiToolbarThinking() {\n const editor = useCurrentEditor(\"AiToolbarThinking\", \"AiToolbar\");\n const contentRef = useRef<HTMLDivElement>(null);\n const aiName = (editor.storage.liveblocksAi as AiExtensionStorage).name;\n\n const handleCancel = useCallback(() => {\n (editor.commands as unknown as AiCommands).$cancelAiToolbarThinking();\n }, [editor]);\n\n // Focus the toolbar content and clear the current window selection while thinking\n useLayoutEffect(() => {\n contentRef.current?.focus();\n window.getSelection()?.removeAllRanges();\n }, []);\n\n return (\n <>\n <div\n className=\"lb-tiptap-ai-toolbar-content\"\n tabIndex={0}\n ref={contentRef}\n >\n <span className=\"lb-icon-container lb-tiptap-ai-toolbar-icon-container\">\n <SparklesIcon />\n </span>\n <div className=\"lb-tiptap-ai-toolbar-thinking\">\n {aiName} is thinking…\n </div>\n <div className=\"lb-tiptap-ai-toolbar-actions\">\n <ShortcutTooltip content=\"Cancel\" shortcut=\"Escape\">\n <Button\n className=\"lb-tiptap-ai-toolbar-action\"\n variant=\"secondary\"\n aria-label=\"Cancel\"\n icon={<StopIcon />}\n onClick={handleCancel}\n />\n </ShortcutTooltip>\n </div>\n </div>\n </>\n );\n}\n\nfunction AiToolbarReviewing() {\n const { state } = useAiToolbarContext();\n const { response } = state as Extract<AiToolbarState, { phase: \"reviewing\" }>;\n\n return (\n <>\n {response.type === \"other\" ? (\n <div className=\"lb-tiptap-ai-toolbar-response-container\">\n <div className=\"lb-tiptap-ai-toolbar-response\">{response.text}</div>\n </div>\n ) : null}\n <AiToolbarCustomPromptContent />\n </>\n );\n}\n\nfunction AiToolbarContainer({\n state,\n toolbarRef,\n dropdownRef,\n children,\n}: PropsWithChildren<{\n state: AiToolbarState;\n toolbarRef: RefObject<HTMLDivElement>;\n dropdownRef: RefObject<HTMLDivElement>;\n}>) {\n const editor = useCurrentEditor(\"AiToolbarContainer\", \"AiToolbar\");\n const customPrompt = state.customPrompt;\n const isCustomPromptMultiline = useMemo(\n () => customPrompt?.includes(\"\\n\"),\n [customPrompt]\n );\n const hasDropdownItems = useCommandState(\n (state) => state.filtered.count > 0\n ) as boolean;\n const isDropdownHidden = isCustomPromptMultiline || !hasDropdownItems;\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!event.defaultPrevented && event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n\n if (state.phase === \"thinking\") {\n (editor.commands as unknown as AiCommands).$cancelAiToolbarThinking();\n } else {\n (editor.chain() as ChainedAiCommands).$closeAiToolbar().focus().run();\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [editor, state.phase]);\n\n return (\n <AiToolbarContext.Provider\n value={{\n state,\n toolbarRef,\n dropdownRef,\n isDropdownHidden,\n }}\n >\n <div className=\"lb-tiptap-ai-toolbar-container\">\n <div className=\"lb-elevation lb-tiptap-ai-toolbar\">\n {state.phase === \"asking\" ? (\n <AiToolbarAsking />\n ) : state.phase === \"thinking\" ? (\n <AiToolbarThinking />\n ) : state.phase === \"reviewing\" ? (\n <AiToolbarReviewing />\n ) : null}\n </div>\n <div\n className=\"lb-tiptap-ai-toolbar-halo\"\n data-active={state.phase === \"thinking\" ? \"\" : undefined}\n aria-hidden\n >\n <div className=\"lb-tiptap-ai-toolbar-halo-horizontal\" />\n <div className=\"lb-tiptap-ai-toolbar-halo-vertical\" />\n </div>\n </div>\n {state.phase === \"asking\" || state.phase === \"reviewing\" ? (\n <Command.List\n className=\"lb-elevation lb-dropdown lb-tiptap-ai-toolbar-dropdown\"\n data-hidden={isDropdownHidden ? \"\" : undefined}\n ref={dropdownRef}\n >\n {state.phase === \"reviewing\" ? (\n <AiToolbarReviewingSuggestions />\n ) : (\n children\n )}\n </Command.List>\n ) : null}\n </AiToolbarContext.Provider>\n );\n}\n\nconst defaultSuggestions = (\n <>\n <AiToolbarSuggestion\n icon={<EditIcon />}\n prompt=\"Improve the quality of the text\"\n >\n Improve writing\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<CheckIcon />}\n prompt=\"Fix spelling & grammar errors in the text\"\n >\n Fix mistakes\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<ShortenIcon />}\n prompt=\"Shorten the text, simplifying it\"\n >\n Simplify\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<LengthenIcon />}\n prompt=\"Lengthen the text, going into more detail\"\n >\n Add more detail\n </AiToolbarSuggestion>\n <AiToolbarSuggestionsSeparator />\n <AiToolbarSuggestion\n icon={<SparklesTextIcon />}\n prompt=\"Continue writing from the text's end\"\n >\n Continue writing\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<QuestionMarkIcon />}\n prompt=\"Explain what the text is about\"\n >\n Explain\n </AiToolbarSuggestion>\n </>\n);\n\n/**\n * @beta\n *\n * A floating AI toolbar attached to the editor.\n */\nexport const AiToolbar = Object.assign(\n forwardRef<HTMLDivElement, AiToolbarProps>(\n (\n {\n offset: sideOffset = 6,\n editor,\n className,\n suggestions: Suggestions = defaultSuggestions,\n ...props\n },\n forwardedRef\n ) => {\n const state =\n useEditorState({\n editor,\n selector: (ctx) => {\n return (\n ctx.editor?.storage.liveblocksAi as AiExtensionStorage | undefined\n )?.state;\n },\n }) ?? DEFAULT_STATE;\n const selection = editor?.state.selection;\n const floatingOptions: UseFloatingOptions = useMemo(() => {\n const detectOverflowOptions: DetectOverflowOptions = {\n padding: AI_TOOLBAR_COLLISION_PADDING,\n };\n\n return {\n strategy: \"fixed\",\n placement: \"bottom\",\n middleware: [\n tiptapFloating(editor),\n hide(detectOverflowOptions),\n offset(sideOffset),\n shift({\n ...detectOverflowOptions,\n mainAxis: false,\n crossAxis: true,\n limiter: limitShift(),\n }),\n flipToolbar(),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n };\n }, [editor, sideOffset]);\n const isOpen = selection !== undefined && state.phase !== \"closed\";\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n isPositioned,\n } = useFloating({\n ...floatingOptions,\n open: isOpen,\n });\n const toolbarRef = useRef<HTMLDivElement>(null);\n const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [selectedDropdownValue, setSelectedDropdownValue] = useState(\"\");\n\n // Reset the selected dropdown value when the toolbar is closed\n useEffect(() => {\n if (state.phase === \"closed\") {\n setSelectedDropdownValue(\"\");\n }\n }, [state.phase]);\n\n useEffect(() => {\n // Reset the selected dropdown value when the dropdown is closed\n if (state.phase === \"closed\") {\n setSelectedDropdownValue(\"\");\n\n return;\n }\n\n // Otherwise, make sure a dropdown item is selected when moving between phases\n const selectedDropdownItem = dropdownRef.current?.querySelector(\n \"[role='option'][data-selected='true']\"\n );\n\n if (selectedDropdownItem) {\n return;\n }\n\n const firstDropdownItem =\n dropdownRef.current?.querySelector(\"[role='option']\");\n\n setSelectedDropdownValue(\n (firstDropdownItem as HTMLElement | null)?.dataset.value ?? \"\"\n );\n }, [state.phase, dropdownRef, setSelectedDropdownValue]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (!selection && state.phase !== \"closed\") {\n (editor.commands as unknown as AiCommands).$closeAiToolbar();\n }\n }, [state.phase, editor, selection]);\n\n useLayoutEffect(() => {\n if (!editor || !isOpen) {\n return;\n }\n\n setReference(null);\n\n setTimeout(() => {\n if (\n state.phase === \"reviewing\" &&\n isContextualPromptDiffResponse(state.response)\n ) {\n const changes = editor.view.dom.querySelectorAll(\n \"ychange[data-liveblocks]\"\n );\n\n // When diffs are displayed, we manually calculate bounds around all the\n // rendered changes instead of using the selection\n setReference({\n getBoundingClientRect: () => {\n const rects: DOMRect[] = [];\n\n changes.forEach((change) => {\n rects.push(change.getBoundingClientRect());\n });\n\n const minX = Math.min(...rects.map((rect) => rect.left));\n const minY = Math.min(...rects.map((rect) => rect.top));\n const maxX = Math.max(...rects.map((rect) => rect.right));\n const maxY = Math.max(...rects.map((rect) => rect.bottom));\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n top: minY,\n left: minX,\n bottom: maxY,\n right: maxX,\n };\n },\n });\n } else if (selection) {\n const domRange = getDomRangeFromSelection(editor, selection);\n setReference(domRange);\n } else {\n setReference(null);\n }\n }, 0);\n }, [\n selection,\n editor,\n isOpen,\n setReference,\n state.phase,\n state.response,\n ]);\n\n // Close the toolbar when clicking anywhere outside of it\n useEffect(() => {\n if (!editor || !isOpen) {\n return;\n }\n\n const handleOutsideEvent = (event: MouseEvent) => {\n if (!toolbarRef.current) {\n return;\n }\n\n if (\n event.target &&\n !toolbarRef.current.contains(event.target as Node) &&\n (dropdownRef.current\n ? !dropdownRef.current.contains(event.target as Node)\n : true)\n ) {\n (editor.commands as unknown as AiCommands).$closeAiToolbar();\n }\n };\n\n setTimeout(() => {\n document.addEventListener(\"pointerdown\", handleOutsideEvent);\n }, 0);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handleOutsideEvent);\n };\n }, [editor, isOpen]);\n\n if (!editor || !isOpen) {\n return null;\n }\n\n return createPortal(\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <Command\n role=\"toolbar\"\n label=\"AI toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\n \"lb-root lb-portal lb-tiptap-ai-toolbar-portal\",\n className\n )}\n ref={mergedRefs}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n }}\n value={selectedDropdownValue}\n onValueChange={setSelectedDropdownValue}\n {...props}\n >\n <AiToolbarContainer\n state={state}\n dropdownRef={dropdownRef}\n toolbarRef={toolbarRef}\n >\n {typeof Suggestions === \"function\" ? (\n <Suggestions children={defaultSuggestions} />\n ) : (\n Suggestions\n )}\n </AiToolbarContainer>\n </Command>\n </EditorProvider>\n </TooltipProvider>,\n document.body\n );\n }\n ),\n {\n /**\n * @beta\n *\n * A prompt suggestion displayed in the AI toolbar.\n */\n Suggestion: AiToolbarSuggestion,\n\n /**\n * @beta\n *\n * A label to describe a group of prompt suggestions displayed in the AI toolbar.\n */\n SuggestionsLabel: AiToolbarSuggestionsLabel,\n\n /**\n * @beta\n *\n * A separator between groups of prompt suggestions displayed in the AI toolbar.\n */\n SuggestionsSeparator: AiToolbarSuggestionsSeparator,\n }\n);\n"],"names":["createContext","useContext","forwardRef","jsx","Command","classNames","jsxs","useCurrentEditor","useCallback","isContextualPromptDiffResponse","Fragment","CheckIcon","UndoIcon","CrossIcon","ArrowCornerDownRightIcon","useRef","useMemo","useLayoutEffect","customPrompt","SparklesIcon","ShortcutTooltip","Button","SendIcon","WarningIcon","StopIcon","useCommandState","state","useEffect","EditIcon","ShortenIcon","LengthenIcon","SparklesTextIcon","QuestionMarkIcon","useEditorState","DEFAULT_STATE","hide","offset","shift","limitShift","autoUpdate","useFloating","useRefs","useState","getDomRangeFromSelection","createPortal","TooltipProvider","EditorProvider"],"mappings":";;;;;;;;;;;;;;;AAgEO,MAAM,4BAA+B,GAAA,GAAA;AA2C5C,MAAM,gBAAA,GAAmBA,oBAAuC,IAAI,CAAA,CAAA;AAEpE,SAAS,mBAAsB,GAAA;AAC7B,EAAM,MAAA,OAAA,GAAUC,iBAAW,gBAAgB,CAAA,CAAA;AAE3C,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAM,MAAA,IAAI,MAAM,sDAAsD,CAAA,CAAA;AAAA,GACxE;AAEA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;AAQA,SAAS,eAAe,MAAmC,EAAA;AACzD,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,QAAA;AAAA,IACN,OAAS,EAAA,MAAA;AAAA,IACT,EAAA,CAAG,EAAE,QAAA,EAAY,EAAA;AACf,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAA,OAAO,EAAC,CAAA;AAAA,OACV;AAEA,MAAA,MAAM,UAAa,GAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,qBAAsB,EAAA,CAAA;AAEzD,MAAA,QAAA,CAAS,SAAS,KAAM,CAAA,WAAA;AAAA,QACtB,0BAAA;AAAA,QACA,GAAG,UAAW,CAAA,KAAA,CAAA,EAAA,CAAA;AAAA,OAChB,CAAA;AACA,MAAA,QAAA,CAAS,SAAS,KAAM,CAAA,WAAA;AAAA,QACtB,2BAAA;AAAA,QACA,GAAG,UAAW,CAAA,MAAA,CAAA,EAAA,CAAA;AAAA,OAChB,CAAA;AAEA,MAAO,OAAA;AAAA,QACL,GAAG,UAAW,CAAA,CAAA;AAAA,OAChB,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA;AAKA,SAAS,WAA0B,GAAA;AACjC,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,aAAA;AAAA,IACN,EAAG,CAAA,EAAE,QAAU,EAAA,cAAA,EAAgB,OAAS,EAAA;AACtC,MAAM,MAAA,YAAA,GAAe,cAAe,CAAA,KAAA,EAAO,CAAK,IAAA,CAAA,CAAA;AAEhD,MAAA,IAAI,KAAK,GAAI,CAAA,YAAY,CAAK,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA;AACnD,QAAS,QAAA,CAAA,QAAA,CAAS,YAAa,CAAA,iCAAA,EAAmC,EAAE,CAAA,CAAA;AAAA,OAC/D,MAAA;AACL,QAAS,QAAA,CAAA,QAAA,CAAS,gBAAgB,iCAAiC,CAAA,CAAA;AAAA,OACrE;AAEA,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAAA,GACF,CAAA;AACF,CAAA;AAEA,MAAM,6BAA6BC,gBAGjC,CAAA,CAAC,EAAE,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AAC3C,EACE,uBAAAC,cAAA,CAACC,aAAQ,SAAR,EAAA;AAAA,IACC,SAAA,EAAWC,qBAAW,CAAA,uBAAA,EAAyB,SAAS,CAAA;AAAA,IACvD,GAAG,KAAA;AAAA,IACJ,GAAK,EAAA,YAAA;AAAA,GACP,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,MAAM,6BAAgC,GAAAH,gBAAA,CAGpC,CAAC,KAAA,EAAO,YAAiB,KAAA;AACzB,EAAA,uBAAQC,cAAA,CAAA,0BAAA,EAAA;AAAA,IAA2B,GAAK,EAAA,YAAA;AAAA,IAAe,GAAG,KAAA;AAAA,GAAO,CAAA,CAAA;AACnE,CAAC,CAAA,CAAA;AAED,MAAM,qBAAA,GAAwBD,gBAG5B,CAAA,CAAC,EAAE,QAAA,EAAU,UAAU,IAAM,EAAA,SAAA,EAAA,GAAc,KAAM,EAAA,EAAG,YAAiB,KAAA;AACrE,EACE,uBAAAI,eAAA,CAACF,aAAQ,IAAR,EAAA;AAAA,IACC,SAAA,EAAWC,qBAAW,CAAA,kBAAA,EAAoB,SAAS,CAAA;AAAA,IACnD,QAAA;AAAA,IACC,GAAG,KAAA;AAAA,IACJ,GAAK,EAAA,YAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,MAAA,IAAA,mBAAQF,cAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAU,EAAA,mBAAA;AAAA,QAAqB,QAAA,EAAA,IAAA;AAAA,OAAK,CAAU,GAAA,IAAA;AAAA,MAC3D,2BACEA,cAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAU,EAAA,wBAAA;AAAA,QAA0B,QAAA;AAAA,OAAS,CACjD,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,MAAM,yBAAA,GAA4BD,iBAGhC,CAAC,EAAE,UAAU,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACrD,EAAA,uBACGC,cAAA,CAAA,MAAA,EAAA;AAAA,IACC,GAAK,EAAA,YAAA;AAAA,IACL,SAAA,EAAWE,qBAAW,CAAA,mBAAA,EAAqB,SAAS,CAAA;AAAA,IACnD,GAAG,KAAA;AAAA,IAEH,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,MAAM,mBAAA,GAAsBH,iBAG1B,CAAC,EAAE,QAAQ,YAAiB,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACtD,EAAM,MAAA,MAAA,GAASK,wBAAiB,CAAA,YAAA,EAAc,WAAW,CAAA,CAAA;AAEzD,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAAC,MAAmB,KAAA;AAClB,MAAC,OAAO,QAAmC,CAAA,uBAAA;AAAA,QACzC,YAAgB,IAAA,MAAA;AAAA,OAClB,CAAA;AAAA,KACF;AAAA,IACA,CAAC,QAAQ,YAAY,CAAA;AAAA,GACvB,CAAA;AAEA,EAAA,uBACGL,cAAA,CAAA,qBAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,QAAU,EAAA,YAAA;AAAA,IACV,GAAK,EAAA,YAAA;AAAA,GACP,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,SAAS,6BAAgC,GAAA;AACvC,EAAM,MAAA,MAAA,GAASI,wBAAiB,CAAA,sBAAA,EAAwB,WAAW,CAAA,CAAA;AACnE,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACtC,EAAM,MAAA,EAAE,UAAa,GAAA,KAAA,CAAA;AAErB,EAAI,IAAAE,0CAAA,CAA+B,QAAQ,CAAG,EAAA;AAC5C,IACE,uBAAAH,eAAA,CAAAI,mBAAA,EAAA;AAAA,MACE,QAAA,EAAA;AAAA,wBAACP,cAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,iCAAOQ,kBAAU,EAAA,EAAA,CAAA;AAAA,UACjB,QAAA,EACG,OAAO,QAAmC,CAAA,wBAAA;AAAA,UAE9C,QAAA,EAAA,QAAA;AAAA,SAED,CAAA;AAAA,wBACCR,cAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,iCAAOS,iBAAS,EAAA,EAAA,CAAA;AAAA,UAChB,QAAA,EACG,OAAO,QAAmC,CAAA,uBAAA;AAAA,UAE9C,QAAA,EAAA,WAAA;AAAA,SAED,CAAA;AAAA,wBACCT,cAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,iCAAOU,kBAAU,EAAA,EAAA,CAAA;AAAA,UACjB,QAAA,EAAW,OAAO,QAAmC,CAAA,eAAA;AAAA,UACtD,QAAA,EAAA,SAAA;AAAA,SAED,CAAA;AAAA,OAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEG,MAAA;AACL,IACE,uBAAAP,eAAA,CAAAI,mBAAA,EAAA;AAAA,MACE,QAAA,EAAA;AAAA,wBAACP,cAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,iCAAOW,iCAAyB,EAAA,EAAA,CAAA;AAAA,UAChC,QAAA,EACG,OAAO,QAAmC,CAAA,wBAAA;AAAA,UAE9C,QAAA,EAAA,cAAA;AAAA,SAED,CAAA;AAAA,wBACCX,cAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,iCAAOS,iBAAS,EAAA,EAAA,CAAA;AAAA,UAChB,QAAA,EACG,OAAO,QAAmC,CAAA,uBAAA;AAAA,UAE9C,QAAA,EAAA,WAAA;AAAA,SAED,CAAA;AAAA,wBACCT,cAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,iCAAOU,kBAAU,EAAA,EAAA,CAAA;AAAA,UACjB,QAAA,EAAW,OAAO,QAAmC,CAAA,eAAA;AAAA,UACtD,QAAA,EAAA,SAAA;AAAA,SAED,CAAA;AAAA,OAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF,CAAA;AAEA,SAAS,4BAA+B,GAAA;AACtC,EAAM,MAAA,MAAA,GAASN,wBAAiB,CAAA,qBAAA,EAAuB,WAAW,CAAA,CAAA;AAClE,EAAM,MAAA,MAAA,GAAU,MAAO,CAAA,OAAA,CAAQ,YAAoC,CAAA,IAAA,CAAA;AACnE,EAAM,MAAA,WAAA,GAAcQ,aAA4B,IAAI,CAAA,CAAA;AACpD,EAAA,MAAM,EAAE,KAAA,EAAO,WAAa,EAAA,gBAAA,KAAqB,mBAAoB,EAAA,CAAA;AACrE,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA,CAAA;AAIzB,EAAA,MAAM,mBAAsB,GAAAC,aAAA;AAAA,IAC1B,MAAM,YAAa,CAAA,IAAA,EAAW,KAAA,EAAA;AAAA,IAC9B,CAAC,YAAY,CAAA;AAAA,GACf,CAAA;AAEA,EAAAC,0BAAA;AAAA,IACE,MAAM;AACJ,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,MAAM,WAAW,WAAY,CAAA,OAAA,CAAA;AAE7B,QAAA,IAAI,CAAC,QAAU,EAAA;AACb,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,QAAA,CAAS,KAAM,EAAA,CAAA;AACf,QAAS,QAAA,CAAA,iBAAA;AAAA,UACP,SAAS,KAAM,CAAA,MAAA;AAAA,UACf,SAAS,KAAM,CAAA,MAAA;AAAA,SACjB,CAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,mBAAA,GAAsB,CAC1B,KACG,KAAA;AACH,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAEtB,MAAA,IAAI,MAAM,QAAU,EAAA;AAElB,QAAC,OAAO,QAAmC,CAAA,4BAAA;AAAA,UACzC,CAACC,kBAAiBA,aAAe,GAAA,IAAA;AAAA,SACnC,CAAA;AAAA,OACK,MAAA;AACL,QAAM,MAAA,oBAAA,GAAuB,YAAY,OAAS,EAAA,aAAA;AAAA,UAChD,uCAAA;AAAA,SACF,CAAA;AAEA,QAAI,IAAA,CAAC,oBAAoB,oBAAsB,EAAA;AAE7C,UAAA,oBAAA,CAAqB,KAAM,EAAA,CAAA;AAAA,SAC7B,MAAA,IAAW,CAAC,mBAAqB,EAAA;AAE/B,UAAC,OAAO,QAAmC,CAAA,uBAAA;AAAA,YACzC,YAAA;AAAA,YACA,MAAM,KAAU,KAAA,WAAA;AAAA,WAClB,CAAA;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,wBAA2B,GAAAV,iBAAA;AAAA,IAC/B,CAACU,aAAyB,KAAA;AACxB,MAAC,OAAO,QAAmC,CAAA,4BAAA;AAAA,QACzCA,aAAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,IACA,CAAC,MAAM,CAAA;AAAA,GACT,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkBV,kBAAY,MAAM;AACxC,IAAA,IAAI,mBAAqB,EAAA;AACvB,MAAA,OAAA;AAAA,KACF;AAEA,IAAC,OAAO,QAAmC,CAAA,uBAAA;AAAA,MACzC,YAAA;AAAA,MACA,MAAM,KAAU,KAAA,WAAA;AAAA,KAClB,CAAA;AAAA,KACC,CAAC,MAAA,EAAQ,cAAc,mBAAqB,EAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAE3D,EAAA,uBACGF,eAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,8BAAA;AAAA,IACb,QAAA,EAAA;AAAA,sBAACH,cAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAU,EAAA,uDAAA;AAAA,QACd,yCAACgB,qBAAa,EAAA,EAAA,CAAA;AAAA,OAChB,CAAA;AAAA,sBACChB,cAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAU,EAAA,8CAAA;AAAA,QACV,YAAY,EAAA,YAAA;AAAA,QAEZ,QAAA,kBAAAA,cAAA,CAACC,aAAQ,KAAR,EAAA;AAAA,UACC,KAAO,EAAA,YAAA;AAAA,UACP,aAAe,EAAA,wBAAA;AAAA,UACf,OAAO,EAAA,IAAA;AAAA,UAEP,QAAC,kBAAAD,cAAA,CAAA,UAAA,EAAA;AAAA,YACC,GAAK,EAAA,WAAA;AAAA,YACL,SAAU,EAAA,oCAAA;AAAA,YACV,aAAa,CAAO,IAAA,EAAA,MAAA,CAAA,eAAA,CAAA;AAAA,YACpB,SAAW,EAAA,mBAAA;AAAA,YACX,IAAM,EAAA,CAAA;AAAA,YACN,SAAS,EAAA,IAAA;AAAA,WACX,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,sBACCA,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,8BAAA;AAAA,QACb,QAAC,kBAAAA,cAAA,CAAAiB,wBAAA,EAAA;AAAA,UAAgB,SAAS,CAAO,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,UAAU,QAAS,EAAA,OAAA;AAAA,UAClD,QAAC,kBAAAjB,cAAA,CAAAkB,eAAA,EAAA;AAAA,YACC,SAAU,EAAA,6BAAA;AAAA,YACV,OAAQ,EAAA,SAAA;AAAA,YACR,cAAY,CAAO,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,YACnB,IAAA,iCAAOC,iBAAS,EAAA,EAAA,CAAA;AAAA,YAChB,QAAU,EAAA,mBAAA;AAAA,YACV,OAAS,EAAA,eAAA;AAAA,WACX,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,eAAkB,GAAA;AACzB,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACtC,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAElB,EACE,uBAAAhB,eAAA,CAAAI,mBAAA,EAAA;AAAA,IACE,QAAA,EAAA;AAAA,sBAAAP,cAAA,CAAC,4BAA6B,EAAA,EAAA,CAAA;AAAA,MAC7B,wBACEG,eAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,4BAAA;AAAA,QACb,QAAA,EAAA;AAAA,0BAACH,cAAA,CAAA,MAAA,EAAA;AAAA,YAAK,SAAU,EAAA,mBAAA;AAAA,YACd,yCAACoB,oBAAY,EAAA,EAAA,CAAA;AAAA,WACf,CAAA;AAAA,UAAO,wCAAA;AAAA,SAAA;AAAA,OAET,CACE,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAM,MAAA,MAAA,GAAShB,wBAAiB,CAAA,mBAAA,EAAqB,WAAW,CAAA,CAAA;AAChE,EAAM,MAAA,UAAA,GAAaQ,aAAuB,IAAI,CAAA,CAAA;AAC9C,EAAM,MAAA,MAAA,GAAU,MAAO,CAAA,OAAA,CAAQ,YAAoC,CAAA,IAAA,CAAA;AAEnE,EAAM,MAAA,YAAA,GAAeP,kBAAY,MAAM;AACrC,IAAC,MAAA,CAAO,SAAmC,wBAAyB,EAAA,CAAA;AAAA,GACtE,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAGX,EAAAS,0BAAA,CAAgB,MAAM;AACpB,IAAA,UAAA,CAAW,SAAS,KAAM,EAAA,CAAA;AAC1B,IAAO,MAAA,CAAA,YAAA,IAAgB,eAAgB,EAAA,CAAA;AAAA,GACzC,EAAG,EAAE,CAAA,CAAA;AAEL,EACE,uBAAAd,cAAA,CAAAO,mBAAA,EAAA;AAAA,IACE,QAAC,kBAAAJ,eAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAU,EAAA,8BAAA;AAAA,MACV,QAAU,EAAA,CAAA;AAAA,MACV,GAAK,EAAA,UAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAACH,cAAA,CAAA,MAAA,EAAA;AAAA,UAAK,SAAU,EAAA,uDAAA;AAAA,UACd,yCAACgB,qBAAa,EAAA,EAAA,CAAA;AAAA,SAChB,CAAA;AAAA,wBACCb,eAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,+BAAA;AAAA,UACZ,QAAA,EAAA;AAAA,YAAA,MAAA;AAAA,YAAO,oBAAA;AAAA,WAAA;AAAA,SACV,CAAA;AAAA,wBACCH,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,8BAAA;AAAA,UACb,QAAC,kBAAAA,cAAA,CAAAiB,wBAAA,EAAA;AAAA,YAAgB,OAAQ,EAAA,QAAA;AAAA,YAAS,QAAS,EAAA,QAAA;AAAA,YACzC,QAAC,kBAAAjB,cAAA,CAAAkB,eAAA,EAAA;AAAA,cACC,SAAU,EAAA,6BAAA;AAAA,cACV,OAAQ,EAAA,WAAA;AAAA,cACR,YAAW,EAAA,QAAA;AAAA,cACX,IAAA,iCAAOG,iBAAS,EAAA,EAAA,CAAA;AAAA,cAChB,OAAS,EAAA,YAAA;AAAA,aACX,CAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,kBAAqB,GAAA;AAC5B,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACtC,EAAM,MAAA,EAAE,UAAa,GAAA,KAAA,CAAA;AAErB,EACE,uBAAAlB,eAAA,CAAAI,mBAAA,EAAA;AAAA,IACG,QAAA,EAAA;AAAA,MAAS,QAAA,CAAA,IAAA,KAAS,0BAChBP,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,yCAAA;AAAA,QACb,QAAC,kBAAAA,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,+BAAA;AAAA,UAAiC,QAAS,EAAA,QAAA,CAAA,IAAA;AAAA,SAAK,CAAA;AAAA,OAChE,CACE,GAAA,IAAA;AAAA,qCACH,4BAA6B,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GAChC,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,kBAAmB,CAAA;AAAA,EAC1B,KAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AACF,CAII,EAAA;AACF,EAAM,MAAA,MAAA,GAASI,wBAAiB,CAAA,oBAAA,EAAsB,WAAW,CAAA,CAAA;AACjE,EAAA,MAAM,eAAe,KAAM,CAAA,YAAA,CAAA;AAC3B,EAAA,MAAM,uBAA0B,GAAAS,aAAA;AAAA,IAC9B,MAAM,YAAc,EAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACjC,CAAC,YAAY,CAAA;AAAA,GACf,CAAA;AACA,EAAA,MAAM,gBAAmB,GAAAS,oBAAA;AAAA,IACvB,CAACC,MAAAA,KAAUA,MAAM,CAAA,QAAA,CAAS,KAAQ,GAAA,CAAA;AAAA,GACpC,CAAA;AACA,EAAM,MAAA,gBAAA,GAAmB,2BAA2B,CAAC,gBAAA,CAAA;AAErD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,OAAA;AAAA,KACF;AAEA,IAAM,MAAA,aAAA,GAAgB,CAAC,KAAyB,KAAA;AAC9C,MAAA,IAAI,CAAC,KAAA,CAAM,gBAAoB,IAAA,KAAA,CAAM,QAAQ,QAAU,EAAA;AACrD,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAEtB,QAAI,IAAA,KAAA,CAAM,UAAU,UAAY,EAAA;AAC9B,UAAC,MAAA,CAAO,SAAmC,wBAAyB,EAAA,CAAA;AAAA,SAC/D,MAAA;AACL,UAAC,OAAO,KAAM,EAAA,CAAwB,iBAAkB,CAAA,KAAA,GAAQ,GAAI,EAAA,CAAA;AAAA,SACtE;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAS,QAAA,CAAA,gBAAA,CAAiB,WAAW,aAAa,CAAA,CAAA;AAElD,IAAA,OAAO,MAAM;AACX,MAAS,QAAA,CAAA,mBAAA,CAAoB,WAAW,aAAa,CAAA,CAAA;AAAA,KACvD,CAAA;AAAA,GACC,EAAA,CAAC,MAAQ,EAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAExB,EACE,uBAAArB,eAAA,CAAC,iBAAiB,QAAjB,EAAA;AAAA,IACC,KAAO,EAAA;AAAA,MACL,KAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,KACF;AAAA,IAEA,QAAA,EAAA;AAAA,sBAACA,eAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,gCAAA;AAAA,QACb,QAAA,EAAA;AAAA,0BAACH,cAAA,CAAA,KAAA,EAAA;AAAA,YAAI,SAAU,EAAA,mCAAA;AAAA,YACZ,gBAAM,KAAU,KAAA,QAAA,mBACdA,cAAA,CAAA,eAAA,EAAA,EAAgB,IACf,KAAM,CAAA,KAAA,KAAU,UAClB,mBAAAA,cAAA,CAAC,qBAAkB,CACjB,GAAA,KAAA,CAAM,UAAU,WAClB,mBAAAA,cAAA,CAAC,sBAAmB,CAClB,GAAA,IAAA;AAAA,WACN,CAAA;AAAA,0BACCG,eAAA,CAAA,KAAA,EAAA;AAAA,YACC,SAAU,EAAA,2BAAA;AAAA,YACV,aAAa,EAAA,KAAA,CAAM,KAAU,KAAA,UAAA,GAAa,EAAK,GAAA,KAAA,CAAA;AAAA,YAC/C,aAAW,EAAA,IAAA;AAAA,YAEX,QAAA,EAAA;AAAA,8BAACH,cAAA,CAAA,KAAA,EAAA;AAAA,gBAAI,SAAU,EAAA,sCAAA;AAAA,eAAuC,CAAA;AAAA,8BACrDA,cAAA,CAAA,KAAA,EAAA;AAAA,gBAAI,SAAU,EAAA,oCAAA;AAAA,eAAqC,CAAA;AAAA,aAAA;AAAA,WACtD,CAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,MACC,KAAA,CAAM,UAAU,QAAY,IAAA,KAAA,CAAM,UAAU,WAC3C,mBAAAA,cAAA,CAACC,aAAQ,IAAR,EAAA;AAAA,QACC,SAAU,EAAA,wDAAA;AAAA,QACV,aAAA,EAAa,mBAAmB,EAAK,GAAA,KAAA,CAAA;AAAA,QACrC,GAAK,EAAA,WAAA;AAAA,QAEJ,QAAM,EAAA,KAAA,CAAA,KAAA,KAAU,WACf,mBAAAD,cAAA,CAAC,iCAA8B,CAE/B,GAAA,QAAA;AAAA,OAEJ,CACE,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAA;AAEA,MAAM,kBACJ,mBAAAG,eAAA,CAAAI,mBAAA,EAAA;AAAA,EACE,QAAA,EAAA;AAAA,oBAACP,cAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,iCAAOyB,iBAAS,EAAA,EAAA,CAAA;AAAA,MAChB,MAAO,EAAA,iCAAA;AAAA,MACR,QAAA,EAAA,iBAAA;AAAA,KAED,CAAA;AAAA,oBACCzB,cAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,iCAAOQ,kBAAU,EAAA,EAAA,CAAA;AAAA,MACjB,MAAO,EAAA,2CAAA;AAAA,MACR,QAAA,EAAA,cAAA;AAAA,KAED,CAAA;AAAA,oBACCR,cAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,iCAAO0B,oBAAY,EAAA,EAAA,CAAA;AAAA,MACnB,MAAO,EAAA,kCAAA;AAAA,MACR,QAAA,EAAA,UAAA;AAAA,KAED,CAAA;AAAA,oBACC1B,cAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,iCAAO2B,qBAAa,EAAA,EAAA,CAAA;AAAA,MACpB,MAAO,EAAA,2CAAA;AAAA,MACR,QAAA,EAAA,iBAAA;AAAA,KAED,CAAA;AAAA,mCACC,6BAA8B,EAAA,EAAA,CAAA;AAAA,oBAC9B3B,cAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,iCAAO4B,yBAAiB,EAAA,EAAA,CAAA;AAAA,MACxB,MAAO,EAAA,sCAAA;AAAA,MACR,QAAA,EAAA,kBAAA;AAAA,KAED,CAAA;AAAA,oBACC5B,cAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,iCAAO6B,yBAAiB,EAAA,EAAA,CAAA;AAAA,MACxB,MAAO,EAAA,gCAAA;AAAA,MACR,QAAA,EAAA,SAAA;AAAA,KAED,CAAA;AAAA,GAAA;AAAA,CACF,CAAA,CAAA;AAQK,MAAM,YAAY,MAAO,CAAA,MAAA;AAAA,EAC9B9B,gBAAA;AAAA,IACE,CACE;AAAA,MACE,QAAQ,UAAa,GAAA,CAAA;AAAA,MACrB,MAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAa,WAAc,GAAA,kBAAA;AAAA,MACxB,GAAA,KAAA;AAAA,OAEL,YACG,KAAA;AACH,MAAA,MAAM,QACJ+B,sBAAe,CAAA;AAAA,QACb,MAAA;AAAA,QACA,QAAA,EAAU,CAAC,GAAQ,KAAA;AACjB,UACE,OAAA,GAAA,CAAI,MAAQ,EAAA,OAAA,CAAQ,YACnB,EAAA,KAAA,CAAA;AAAA,SACL;AAAA,OACD,CAAK,IAAAC,yBAAA,CAAA;AACR,MAAM,MAAA,SAAA,GAAY,QAAQ,KAAM,CAAA,SAAA,CAAA;AAChC,MAAM,MAAA,eAAA,GAAsClB,cAAQ,MAAM;AACxD,QAAA,MAAM,qBAA+C,GAAA;AAAA,UACnD,OAAS,EAAA,4BAAA;AAAA,SACX,CAAA;AAEA,QAAO,OAAA;AAAA,UACL,QAAU,EAAA,OAAA;AAAA,UACV,SAAW,EAAA,QAAA;AAAA,UACX,UAAY,EAAA;AAAA,YACV,eAAe,MAAM,CAAA;AAAA,YACrBmB,cAAK,qBAAqB,CAAA;AAAA,YAC1BC,gBAAO,UAAU,CAAA;AAAA,YACjBC,cAAM,CAAA;AAAA,cACJ,GAAG,qBAAA;AAAA,cACH,QAAU,EAAA,KAAA;AAAA,cACV,SAAW,EAAA,IAAA;AAAA,cACX,SAASC,mBAAW,EAAA;AAAA,aACrB,CAAA;AAAA,YACD,WAAY,EAAA;AAAA,WACd;AAAA,UACA,oBAAA,EAAsB,IAAI,IAAS,KAAA;AACjC,YAAO,OAAAC,mBAAA,CAAW,GAAG,IAAM,EAAA;AAAA,cACzB,cAAgB,EAAA,IAAA;AAAA,aACjB,CAAA,CAAA;AAAA,WACH;AAAA,SACF,CAAA;AAAA,OACC,EAAA,CAAC,MAAQ,EAAA,UAAU,CAAC,CAAA,CAAA;AACvB,MAAA,MAAM,MAAS,GAAA,SAAA,KAAc,KAAa,CAAA,IAAA,KAAA,CAAM,KAAU,KAAA,QAAA,CAAA;AAC1D,MAAM,MAAA;AAAA,QACJ,IAAA,EAAM,EAAE,YAAA,EAAc,WAAY,EAAA;AAAA,QAClC,QAAA;AAAA,QACA,CAAA;AAAA,QACA,CAAA;AAAA,QACA,YAAA;AAAA,UACEC,oBAAY,CAAA;AAAA,QACd,GAAG,eAAA;AAAA,QACH,IAAM,EAAA,MAAA;AAAA,OACP,CAAA,CAAA;AACD,MAAM,MAAA,UAAA,GAAazB,aAAuB,IAAI,CAAA,CAAA;AAC9C,MAAA,MAAM,UAAa,GAAA0B,gBAAA,CAAQ,YAAc,EAAA,UAAA,EAAY,WAAW,CAAA,CAAA;AAChE,MAAM,MAAA,WAAA,GAAc1B,aAAuB,IAAI,CAAA,CAAA;AAC/C,MAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI2B,eAAS,EAAE,CAAA,CAAA;AAGrE,MAAAf,eAAA,CAAU,MAAM;AACd,QAAI,IAAA,KAAA,CAAM,UAAU,QAAU,EAAA;AAC5B,UAAA,wBAAA,CAAyB,EAAE,CAAA,CAAA;AAAA,SAC7B;AAAA,OACC,EAAA,CAAC,KAAM,CAAA,KAAK,CAAC,CAAA,CAAA;AAEhB,MAAAA,eAAA,CAAU,MAAM;AAEd,QAAI,IAAA,KAAA,CAAM,UAAU,QAAU,EAAA;AAC5B,UAAA,wBAAA,CAAyB,EAAE,CAAA,CAAA;AAE3B,UAAA,OAAA;AAAA,SACF;AAGA,QAAM,MAAA,oBAAA,GAAuB,YAAY,OAAS,EAAA,aAAA;AAAA,UAChD,uCAAA;AAAA,SACF,CAAA;AAEA,QAAA,IAAI,oBAAsB,EAAA;AACxB,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAM,iBACJ,GAAA,WAAA,CAAY,OAAS,EAAA,aAAA,CAAc,iBAAiB,CAAA,CAAA;AAEtD,QAAA,wBAAA;AAAA,UACG,iBAAA,EAA0C,QAAQ,KAAS,IAAA,EAAA;AAAA,SAC9D,CAAA;AAAA,SACC,CAAC,KAAA,CAAM,KAAO,EAAA,WAAA,EAAa,wBAAwB,CAAC,CAAA,CAAA;AAEvD,MAAAA,eAAA,CAAU,MAAM;AACd,QAAA,IAAI,CAAC,MAAQ,EAAA;AACX,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,IAAI,CAAC,SAAA,IAAa,KAAM,CAAA,KAAA,KAAU,QAAU,EAAA;AAC1C,UAAC,MAAA,CAAO,SAAmC,eAAgB,EAAA,CAAA;AAAA,SAC7D;AAAA,SACC,CAAC,KAAA,CAAM,KAAO,EAAA,MAAA,EAAQ,SAAS,CAAC,CAAA,CAAA;AAEnC,MAAAV,0BAAA,CAAgB,MAAM;AACpB,QAAI,IAAA,CAAC,MAAU,IAAA,CAAC,MAAQ,EAAA;AACtB,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AAEjB,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,IACE,MAAM,KAAU,KAAA,WAAA,IAChBR,0CAA+B,CAAA,KAAA,CAAM,QAAQ,CAC7C,EAAA;AACA,YAAM,MAAA,OAAA,GAAU,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,gBAAA;AAAA,cAC9B,0BAAA;AAAA,aACF,CAAA;AAIA,YAAa,YAAA,CAAA;AAAA,cACX,uBAAuB,MAAM;AAC3B,gBAAA,MAAM,QAAmB,EAAC,CAAA;AAE1B,gBAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC1B,kBAAM,KAAA,CAAA,IAAA,CAAK,MAAO,CAAA,qBAAA,EAAuB,CAAA,CAAA;AAAA,iBAC1C,CAAA,CAAA;AAED,gBAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA;AACvD,gBAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAK,CAAA,GAAG,CAAC,CAAA,CAAA;AACtD,gBAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAK,CAAA,KAAK,CAAC,CAAA,CAAA;AACxD,gBAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAK,CAAA,MAAM,CAAC,CAAA,CAAA;AAEzD,gBAAO,OAAA;AAAA,kBACL,CAAG,EAAA,IAAA;AAAA,kBACH,CAAG,EAAA,IAAA;AAAA,kBACH,OAAO,IAAO,GAAA,IAAA;AAAA,kBACd,QAAQ,IAAO,GAAA,IAAA;AAAA,kBACf,GAAK,EAAA,IAAA;AAAA,kBACL,IAAM,EAAA,IAAA;AAAA,kBACN,MAAQ,EAAA,IAAA;AAAA,kBACR,KAAO,EAAA,IAAA;AAAA,iBACT,CAAA;AAAA,eACF;AAAA,aACD,CAAA,CAAA;AAAA,qBACQ,SAAW,EAAA;AACpB,YAAM,MAAA,QAAA,GAAWkC,8BAAyB,CAAA,MAAA,EAAQ,SAAS,CAAA,CAAA;AAC3D,YAAA,YAAA,CAAa,QAAQ,CAAA,CAAA;AAAA,WAChB,MAAA;AACL,YAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AAAA,WACnB;AAAA,WACC,CAAC,CAAA,CAAA;AAAA,OACH,EAAA;AAAA,QACD,SAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA;AAAA,QACA,KAAM,CAAA,KAAA;AAAA,QACN,KAAM,CAAA,QAAA;AAAA,OACP,CAAA,CAAA;AAGD,MAAAhB,eAAA,CAAU,MAAM;AACd,QAAI,IAAA,CAAC,MAAU,IAAA,CAAC,MAAQ,EAAA;AACtB,UAAA,OAAA;AAAA,SACF;AAEA,QAAM,MAAA,kBAAA,GAAqB,CAAC,KAAsB,KAAA;AAChD,UAAI,IAAA,CAAC,WAAW,OAAS,EAAA;AACvB,YAAA,OAAA;AAAA,WACF;AAEA,UAAA,IACE,MAAM,MACN,IAAA,CAAC,WAAW,OAAQ,CAAA,QAAA,CAAS,MAAM,MAAc,CAAA,KAChD,WAAY,CAAA,OAAA,GACT,CAAC,WAAY,CAAA,OAAA,CAAQ,SAAS,KAAM,CAAA,MAAc,IAClD,IACJ,CAAA,EAAA;AACA,YAAC,MAAA,CAAO,SAAmC,eAAgB,EAAA,CAAA;AAAA,WAC7D;AAAA,SACF,CAAA;AAEA,QAAA,UAAA,CAAW,MAAM;AACf,UAAS,QAAA,CAAA,gBAAA,CAAiB,eAAe,kBAAkB,CAAA,CAAA;AAAA,WAC1D,CAAC,CAAA,CAAA;AAEJ,QAAA,OAAO,MAAM;AACX,UAAS,QAAA,CAAA,mBAAA,CAAoB,eAAe,kBAAkB,CAAA,CAAA;AAAA,SAChE,CAAA;AAAA,OACC,EAAA,CAAC,MAAQ,EAAA,MAAM,CAAC,CAAA,CAAA;AAEnB,MAAI,IAAA,CAAC,MAAU,IAAA,CAAC,MAAQ,EAAA;AACtB,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAO,OAAAiB,uBAAA;AAAA,wBACJzC,cAAA,CAAA0C,wBAAA,EAAA;AAAA,UACC,QAAC,kBAAA1C,cAAA,CAAA2C,sBAAA,EAAA;AAAA,YAAe,MAAA;AAAA,YACd,QAAC,kBAAA3C,cAAA,CAAAC,YAAA,EAAA;AAAA,cACC,IAAK,EAAA,SAAA;AAAA,cACL,KAAM,EAAA,YAAA;AAAA,cACN,kBAAiB,EAAA,YAAA;AAAA,cACjB,SAAW,EAAAC,qBAAA;AAAA,gBACT,+CAAA;AAAA,gBACA,SAAA;AAAA,eACF;AAAA,cACA,GAAK,EAAA,UAAA;AAAA,cACL,KAAO,EAAA;AAAA,gBACL,QAAU,EAAA,QAAA;AAAA,gBACV,GAAK,EAAA,CAAA;AAAA,gBACL,IAAM,EAAA,CAAA;AAAA,gBACN,SAAA,EAAW,YACP,GAAA,CAAA,YAAA,EAAe,IAAK,CAAA,KAAA,CAAM,CAAC,CAAQ,CAAA,IAAA,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAC/C,CAAA,MAAA,CAAA,GAAA,0BAAA;AAAA,eACN;AAAA,cACA,KAAO,EAAA,qBAAA;AAAA,cACP,aAAe,EAAA,wBAAA;AAAA,cACd,GAAG,KAAA;AAAA,cAEJ,QAAC,kBAAAF,cAAA,CAAA,kBAAA,EAAA;AAAA,gBACC,KAAA;AAAA,gBACA,WAAA;AAAA,gBACA,UAAA;AAAA,gBAEC,QAAA,EAAA,OAAO,WAAgB,KAAA,UAAA,mBACrBA,cAAA,CAAA,WAAA,EAAA;AAAA,kBAAY,QAAU,EAAA,kBAAA;AAAA,iBAAoB,CAE3C,GAAA,WAAA;AAAA,eAEJ,CAAA;AAAA,aACF,CAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,QACA,QAAS,CAAA,IAAA;AAAA,OACX,CAAA;AAAA,KACF;AAAA,GACF;AAAA,EACA;AAAA,IAME,UAAY,EAAA,mBAAA;AAAA,IAOZ,gBAAkB,EAAA,yBAAA;AAAA,IAOlB,oBAAsB,EAAA,6BAAA;AAAA,GACxB;AACF;;;;;"}
1
+ {"version":3,"file":"AiToolbar.cjs","sources":["../../src/ai/AiToolbar.tsx"],"sourcesContent":["import {\n autoUpdate,\n type DetectOverflowOptions,\n hide,\n limitShift,\n type Middleware,\n offset,\n shift,\n useFloating,\n type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n ArrowCornerDownRightIcon,\n Button,\n CheckIcon,\n CrossIcon,\n EditIcon,\n LengthenIcon,\n QuestionMarkIcon,\n SendIcon,\n ShortcutTooltip,\n ShortenIcon,\n SparklesIcon,\n SparklesTextIcon,\n StopIcon,\n TooltipProvider,\n UndoIcon,\n useRefs,\n WarningIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport { type Editor, useEditorState } from \"@tiptap/react\";\nimport { Command, useCommandState } from \"cmdk\";\nimport type {\n ComponentProps,\n ComponentType,\n KeyboardEvent as ReactKeyboardEvent,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from \"react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type {\n AiCommands,\n AiExtensionStorage,\n AiToolbarState,\n ChainedAiCommands,\n} from \"../types\";\nimport { getDomRangeFromSelection } from \"../utils\";\nimport { DEFAULT_STATE, isContextualPromptDiffResponse } from \"./AiExtension\";\n\nexport const AI_TOOLBAR_COLLISION_PADDING = 10;\n\nexport interface AiToolbarProps\n extends Omit<ComponentProps<\"div\">, \"value\" | \"defaultValue\" | \"children\"> {\n /**\n * The Tiptap editor.\n */\n editor: Editor | null;\n\n /**\n * The vertical offset of the AI toolbar from the selection.\n */\n offset?: number;\n\n /**\n * The prompt suggestions to display below the AI toolbar.\n */\n suggestions?: ReactNode | ComponentType<PropsWithChildren>;\n}\n\ntype AiToolbarDropdownSeparatorProps = ComponentProps<\"div\">;\n\ninterface AiToolbarDropdownItemProps\n extends ComponentProps<typeof Command.Item> {\n icon?: ReactNode;\n}\n\ntype AiToolbarSuggestionsSeparatorProps = AiToolbarDropdownSeparatorProps;\n\ntype AiToolbarSuggestionsLabelProps = ComponentProps<\"span\">;\n\ninterface AiToolbarSuggestionProps extends ComponentProps<\"div\"> {\n prompt?: string;\n icon?: ReactNode;\n}\n\ninterface AiToolbarContext {\n state: AiToolbarState;\n toolbarRef: RefObject<HTMLDivElement>;\n dropdownRef: RefObject<HTMLDivElement>;\n isDropdownHidden: boolean;\n}\n\nconst AiToolbarContext = createContext<AiToolbarContext | null>(null);\n\nfunction useAiToolbarContext() {\n const context = useContext(AiToolbarContext);\n\n if (!context) {\n throw new Error(\"useAiToolbarContext must be used within an AiToolbar\");\n }\n\n return context;\n}\n\n/**\n * A custom Floating UI middleware to position/scale the toolbar:\n * - Vertically: relative to the reference (e.g. selection)\n * - Horizontally: relative to the editor\n * - Width: relative to the editor\n */\nfunction tiptapFloating(editor: Editor | null): Middleware {\n return {\n name: \"tiptap\",\n options: editor,\n fn({ elements }) {\n if (!editor) {\n return {};\n }\n\n const editorRect = editor.view.dom.getBoundingClientRect();\n\n elements.floating.style.setProperty(\n \"--lb-tiptap-editor-width\",\n `${editorRect.width}px`\n );\n elements.floating.style.setProperty(\n \"--lb-tiptap-editor-height\",\n `${editorRect.height}px`\n );\n\n return {\n x: editorRect.x,\n };\n },\n };\n}\n\n/**\n * A custom Floating UI middleware to flip the toolbar/dropdown when shifted more than 100%.\n */\nfunction flipToolbar(): Middleware {\n return {\n name: \"flipToolbar\",\n fn({ elements, middlewareData, rects }) {\n const shiftOffsetY = middlewareData.shift?.y ?? 0;\n\n if (Math.abs(shiftOffsetY) >= rects.floating.height) {\n elements.floating.setAttribute(\"data-liveblocks-ai-toolbar-flip\", \"\");\n } else {\n elements.floating.removeAttribute(\"data-liveblocks-ai-toolbar-flip\");\n }\n\n return {};\n },\n };\n}\n\nconst AiToolbarDropdownSeparator = forwardRef<\n HTMLDivElement,\n AiToolbarDropdownSeparatorProps\n>(({ className, ...props }, forwardedRef) => {\n return (\n <Command.Separator\n className={classNames(\"lb-dropdown-separator\", className)}\n {...props}\n ref={forwardedRef}\n />\n );\n});\n\nconst AiToolbarSuggestionsSeparator = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionsSeparatorProps\n>((props, forwardedRef) => {\n return <AiToolbarDropdownSeparator ref={forwardedRef} {...props} />;\n});\n\nconst AiToolbarDropdownItem = forwardRef<\n HTMLDivElement,\n AiToolbarDropdownItemProps\n>(({ children, onSelect, icon, className, ...props }, forwardedRef) => {\n return (\n <Command.Item\n className={classNames(\"lb-dropdown-item\", className)}\n onSelect={onSelect}\n {...props}\n ref={forwardedRef}\n >\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? (\n <span className=\"lb-dropdown-item-label\">{children}</span>\n ) : null}\n </Command.Item>\n );\n});\n\nconst AiToolbarSuggestionsLabel = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionsLabelProps\n>(({ children, className, ...props }, forwardedRef) => {\n return (\n <span\n ref={forwardedRef}\n className={classNames(\"lb-dropdown-label\", className)}\n {...props}\n >\n {children}\n </span>\n );\n});\n\nconst AiToolbarSuggestion = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionProps\n>(({ prompt: manualPrompt, ...props }, forwardedRef) => {\n const editor = useCurrentEditor(\"Suggestion\", \"AiToolbar\");\n\n const handleSelect = useCallback(\n (prompt: string) => {\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n manualPrompt ?? prompt\n );\n },\n [editor, manualPrompt]\n );\n\n return (\n <AiToolbarDropdownItem\n {...props}\n onSelect={handleSelect}\n ref={forwardedRef}\n />\n );\n});\n\nfunction AiToolbarReviewingSuggestions() {\n const editor = useCurrentEditor(\"ReviewingSuggestions\", \"AiToolbar\");\n const { state } = useAiToolbarContext();\n const { response } = state as Extract<AiToolbarState, { phase: \"reviewing\" }>;\n\n if (isContextualPromptDiffResponse(response)) {\n return (\n <>\n <AiToolbarDropdownItem\n icon={<CheckIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$acceptAiToolbarResponse\n }\n >\n Accept\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<UndoIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking\n }\n >\n Try again\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<CrossIcon />}\n onSelect={(editor.commands as unknown as AiCommands).$closeAiToolbar}\n >\n Discard\n </AiToolbarDropdownItem>\n </>\n );\n } else {\n return (\n <>\n <AiToolbarDropdownItem\n icon={<ArrowCornerDownRightIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$acceptAiToolbarResponse\n }\n >\n Insert below\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<UndoIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking\n }\n >\n Try again\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<CrossIcon />}\n onSelect={(editor.commands as unknown as AiCommands).$closeAiToolbar}\n >\n Discard\n </AiToolbarDropdownItem>\n </>\n );\n }\n}\n\nfunction AiToolbarCustomPromptContent() {\n const editor = useCurrentEditor(\"CustomPromptContent\", \"AiToolbar\");\n const aiName = (editor.storage.liveblocksAi as AiExtensionStorage).name;\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const { state, dropdownRef, isDropdownHidden } = useAiToolbarContext();\n const { customPrompt } = state as Exclude<\n AiToolbarState,\n { phase: \"closed\" }\n >;\n const isCustomPromptEmpty = useMemo(\n () => customPrompt.trim() === \"\",\n [customPrompt]\n );\n\n useLayoutEffect(\n () => {\n requestAnimationFrame(() => {\n const textArea = textAreaRef.current;\n\n if (!textArea) {\n return;\n }\n\n textArea.focus();\n textArea.setSelectionRange(\n textArea.value.length,\n textArea.value.length\n );\n });\n },\n [] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const handlePromptKeyDown = (\n event: ReactKeyboardEvent<HTMLTextAreaElement>\n ) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n\n if (event.shiftKey) {\n // If the shift key is pressed, add a new line\n (editor.commands as unknown as AiCommands)._updateAiToolbarCustomPrompt(\n (customPrompt) => customPrompt + \"\\n\"\n );\n } else {\n const selectedDropdownItem = dropdownRef.current?.querySelector(\n \"[role='option'][data-selected='true']\"\n ) as HTMLElement | null;\n\n if (!isDropdownHidden && selectedDropdownItem) {\n // If there's a selected dropdown item, select it\n selectedDropdownItem.click();\n } else if (!isCustomPromptEmpty) {\n // Otherwise, submit the custom prompt\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n customPrompt,\n state.phase === \"reviewing\"\n );\n }\n }\n }\n };\n\n const handleCustomPromptChange = useCallback(\n (customPrompt: string) => {\n (editor.commands as unknown as AiCommands)._updateAiToolbarCustomPrompt(\n customPrompt\n );\n },\n [editor]\n );\n\n const handleSendClick = useCallback(() => {\n if (isCustomPromptEmpty) {\n return;\n }\n\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n customPrompt,\n state.phase === \"reviewing\"\n );\n }, [editor, customPrompt, isCustomPromptEmpty, state.phase]);\n\n return (\n <div className=\"lb-tiptap-ai-toolbar-content\">\n <span className=\"lb-icon-container lb-tiptap-ai-toolbar-icon-container\">\n <SparklesIcon />\n </span>\n <div\n className=\"lb-tiptap-ai-toolbar-custom-prompt-container\"\n data-value={customPrompt}\n >\n <Command.Input\n value={customPrompt}\n onValueChange={handleCustomPromptChange}\n asChild\n >\n <textarea\n ref={textAreaRef}\n className=\"lb-tiptap-ai-toolbar-custom-prompt\"\n placeholder={`Ask ${aiName} anything…`}\n onKeyDown={handlePromptKeyDown}\n rows={1}\n autoFocus\n />\n </Command.Input>\n </div>\n <div className=\"lb-tiptap-ai-toolbar-actions\">\n <ShortcutTooltip content={`Ask ${aiName}`} shortcut=\"Enter\">\n <Button\n className=\"lb-tiptap-ai-toolbar-action\"\n variant=\"primary\"\n aria-label={`Ask ${aiName}`}\n icon={<SendIcon />}\n disabled={isCustomPromptEmpty}\n onClick={handleSendClick}\n />\n </ShortcutTooltip>\n </div>\n </div>\n );\n}\n\nfunction AiToolbarAsking() {\n const { state } = useAiToolbarContext();\n const { error } = state as Exclude<AiToolbarState, { phase: \"closed\" }>;\n\n return (\n <>\n <AiToolbarCustomPromptContent />\n {error ? (\n <div className=\"lb-tiptap-ai-toolbar-error\">\n <span className=\"lb-icon-container\">\n <WarningIcon />\n </span>\n There was a problem with your request.\n </div>\n ) : null}\n </>\n );\n}\n\nfunction AiToolbarThinking() {\n const editor = useCurrentEditor(\"AiToolbarThinking\", \"AiToolbar\");\n const contentRef = useRef<HTMLDivElement>(null);\n const aiName = (editor.storage.liveblocksAi as AiExtensionStorage).name;\n\n const handleAbort = useCallback(() => {\n (editor.commands as unknown as AiCommands).$cancelAiToolbarThinking();\n }, [editor]);\n\n // Focus the toolbar content and clear the current window selection while thinking\n useLayoutEffect(() => {\n contentRef.current?.focus();\n window.getSelection()?.removeAllRanges();\n }, []);\n\n return (\n <>\n <div\n className=\"lb-tiptap-ai-toolbar-content\"\n tabIndex={0}\n ref={contentRef}\n >\n <span className=\"lb-icon-container lb-tiptap-ai-toolbar-icon-container\">\n <SparklesIcon />\n </span>\n <div className=\"lb-tiptap-ai-toolbar-thinking\">\n {aiName} is thinking…\n </div>\n <div className=\"lb-tiptap-ai-toolbar-actions\">\n <ShortcutTooltip content=\"Abort response\" shortcut=\"Escape\">\n <Button\n className=\"lb-tiptap-ai-toolbar-action\"\n variant=\"secondary\"\n aria-label=\"Abort response\"\n icon={<StopIcon />}\n onClick={handleAbort}\n />\n </ShortcutTooltip>\n </div>\n </div>\n </>\n );\n}\n\nfunction AiToolbarReviewing() {\n const { state } = useAiToolbarContext();\n const { response } = state as Extract<AiToolbarState, { phase: \"reviewing\" }>;\n\n return (\n <>\n {response.type === \"other\" ? (\n <div className=\"lb-tiptap-ai-toolbar-response-container\">\n <div className=\"lb-tiptap-ai-toolbar-response\">{response.text}</div>\n </div>\n ) : null}\n <AiToolbarCustomPromptContent />\n </>\n );\n}\n\nfunction AiToolbarContainer({\n state,\n toolbarRef,\n dropdownRef,\n children,\n}: PropsWithChildren<{\n state: AiToolbarState;\n toolbarRef: RefObject<HTMLDivElement>;\n dropdownRef: RefObject<HTMLDivElement>;\n}>) {\n const editor = useCurrentEditor(\"AiToolbarContainer\", \"AiToolbar\");\n const customPrompt = state.customPrompt;\n const isCustomPromptMultiline = useMemo(\n () => customPrompt?.includes(\"\\n\"),\n [customPrompt]\n );\n const hasDropdownItems = useCommandState(\n (state) => state.filtered.count > 0\n ) as boolean;\n const isDropdownHidden = isCustomPromptMultiline || !hasDropdownItems;\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!event.defaultPrevented && event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n\n if (state.phase === \"thinking\") {\n (editor.commands as unknown as AiCommands).$cancelAiToolbarThinking();\n } else {\n (editor.chain() as ChainedAiCommands).$closeAiToolbar().focus().run();\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [editor, state.phase]);\n\n return (\n <AiToolbarContext.Provider\n value={{\n state,\n toolbarRef,\n dropdownRef,\n isDropdownHidden,\n }}\n >\n <div className=\"lb-tiptap-ai-toolbar-container\">\n <div className=\"lb-elevation lb-tiptap-ai-toolbar\">\n {state.phase === \"asking\" ? (\n <AiToolbarAsking />\n ) : state.phase === \"thinking\" ? (\n <AiToolbarThinking />\n ) : state.phase === \"reviewing\" ? (\n <AiToolbarReviewing />\n ) : null}\n </div>\n <div\n className=\"lb-tiptap-ai-toolbar-halo\"\n data-active={state.phase === \"thinking\" ? \"\" : undefined}\n aria-hidden\n >\n <div className=\"lb-tiptap-ai-toolbar-halo-horizontal\" />\n <div className=\"lb-tiptap-ai-toolbar-halo-vertical\" />\n </div>\n </div>\n {state.phase === \"asking\" || state.phase === \"reviewing\" ? (\n <Command.List\n className=\"lb-elevation lb-dropdown lb-tiptap-ai-toolbar-dropdown\"\n data-hidden={isDropdownHidden ? \"\" : undefined}\n ref={dropdownRef}\n >\n {state.phase === \"reviewing\" ? (\n <AiToolbarReviewingSuggestions />\n ) : (\n children\n )}\n </Command.List>\n ) : null}\n </AiToolbarContext.Provider>\n );\n}\n\nconst defaultSuggestions = (\n <>\n <AiToolbarSuggestion\n icon={<EditIcon />}\n prompt=\"Improve the quality of the text\"\n >\n Improve writing\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<CheckIcon />}\n prompt=\"Fix spelling & grammar errors in the text\"\n >\n Fix mistakes\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<ShortenIcon />}\n prompt=\"Shorten the text, simplifying it\"\n >\n Simplify\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<LengthenIcon />}\n prompt=\"Lengthen the text, going into more detail\"\n >\n Add more detail\n </AiToolbarSuggestion>\n <AiToolbarSuggestionsSeparator />\n <AiToolbarSuggestion\n icon={<SparklesTextIcon />}\n prompt=\"Continue writing from the text's end\"\n >\n Continue writing\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<QuestionMarkIcon />}\n prompt=\"Explain what the text is about\"\n >\n Explain\n </AiToolbarSuggestion>\n </>\n);\n\n/**\n * @beta\n *\n * A floating AI toolbar attached to the editor.\n */\nexport const AiToolbar = Object.assign(\n forwardRef<HTMLDivElement, AiToolbarProps>(\n (\n {\n offset: sideOffset = 6,\n editor,\n className,\n suggestions: Suggestions = defaultSuggestions,\n ...props\n },\n forwardedRef\n ) => {\n const state =\n useEditorState({\n editor,\n selector: (ctx) => {\n return (\n ctx.editor?.storage.liveblocksAi as AiExtensionStorage | undefined\n )?.state;\n },\n }) ?? DEFAULT_STATE;\n const selection = editor?.state.selection;\n const floatingOptions: UseFloatingOptions = useMemo(() => {\n const detectOverflowOptions: DetectOverflowOptions = {\n padding: AI_TOOLBAR_COLLISION_PADDING,\n };\n\n return {\n strategy: \"fixed\",\n placement: \"bottom\",\n middleware: [\n tiptapFloating(editor),\n hide(detectOverflowOptions),\n offset(sideOffset),\n shift({\n ...detectOverflowOptions,\n mainAxis: false,\n crossAxis: true,\n limiter: limitShift(),\n }),\n flipToolbar(),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n };\n }, [editor, sideOffset]);\n const isOpen = selection !== undefined && state.phase !== \"closed\";\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n isPositioned,\n } = useFloating({\n ...floatingOptions,\n open: isOpen,\n });\n const toolbarRef = useRef<HTMLDivElement>(null);\n const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [selectedDropdownValue, setSelectedDropdownValue] = useState(\"\");\n\n // Reset the selected dropdown value when the toolbar is closed\n useEffect(() => {\n if (state.phase === \"closed\") {\n setSelectedDropdownValue(\"\");\n }\n }, [state.phase]);\n\n useEffect(() => {\n // Reset the selected dropdown value when the dropdown is closed\n if (state.phase === \"closed\") {\n setSelectedDropdownValue(\"\");\n\n return;\n }\n\n // Otherwise, make sure a dropdown item is selected when moving between phases\n const selectedDropdownItem = dropdownRef.current?.querySelector(\n \"[role='option'][data-selected='true']\"\n );\n\n if (selectedDropdownItem) {\n return;\n }\n\n const firstDropdownItem =\n dropdownRef.current?.querySelector(\"[role='option']\");\n\n setSelectedDropdownValue(\n (firstDropdownItem as HTMLElement | null)?.dataset.value ?? \"\"\n );\n }, [state.phase, dropdownRef, setSelectedDropdownValue]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (!selection && state.phase !== \"closed\") {\n (editor.commands as unknown as AiCommands).$closeAiToolbar();\n }\n }, [state.phase, editor, selection]);\n\n useLayoutEffect(() => {\n if (!editor || !isOpen) {\n return;\n }\n\n setReference(null);\n\n setTimeout(() => {\n if (\n state.phase === \"reviewing\" &&\n isContextualPromptDiffResponse(state.response)\n ) {\n const changes = editor.view.dom.querySelectorAll(\n \"ychange[data-liveblocks]\"\n );\n\n // When diffs are displayed, we manually calculate bounds around all the\n // rendered changes instead of using the selection\n setReference({\n getBoundingClientRect: () => {\n const rects: DOMRect[] = [];\n\n changes.forEach((change) => {\n rects.push(change.getBoundingClientRect());\n });\n\n const minX = Math.min(...rects.map((rect) => rect.left));\n const minY = Math.min(...rects.map((rect) => rect.top));\n const maxX = Math.max(...rects.map((rect) => rect.right));\n const maxY = Math.max(...rects.map((rect) => rect.bottom));\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n top: minY,\n left: minX,\n bottom: maxY,\n right: maxX,\n };\n },\n });\n } else if (selection) {\n const domRange = getDomRangeFromSelection(editor, selection);\n setReference(domRange);\n } else {\n setReference(null);\n }\n }, 0);\n }, [\n selection,\n editor,\n isOpen,\n setReference,\n state.phase,\n state.response,\n ]);\n\n // Close the toolbar when clicking anywhere outside of it\n useEffect(() => {\n if (!editor || !isOpen) {\n return;\n }\n\n const handleOutsideEvent = (event: MouseEvent) => {\n if (!toolbarRef.current) {\n return;\n }\n\n if (\n event.target &&\n !toolbarRef.current.contains(event.target as Node) &&\n (dropdownRef.current\n ? !dropdownRef.current.contains(event.target as Node)\n : true)\n ) {\n (editor.commands as unknown as AiCommands).$closeAiToolbar();\n }\n };\n\n setTimeout(() => {\n document.addEventListener(\"pointerdown\", handleOutsideEvent);\n }, 0);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handleOutsideEvent);\n };\n }, [editor, isOpen]);\n\n if (!editor || !isOpen) {\n return null;\n }\n\n return createPortal(\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <Command\n role=\"toolbar\"\n label=\"AI toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\n \"lb-root lb-portal lb-tiptap-ai-toolbar-portal\",\n className\n )}\n ref={mergedRefs}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n }}\n value={selectedDropdownValue}\n onValueChange={setSelectedDropdownValue}\n {...props}\n >\n <AiToolbarContainer\n state={state}\n dropdownRef={dropdownRef}\n toolbarRef={toolbarRef}\n >\n {typeof Suggestions === \"function\" ? (\n <Suggestions children={defaultSuggestions} />\n ) : (\n Suggestions\n )}\n </AiToolbarContainer>\n </Command>\n </EditorProvider>\n </TooltipProvider>,\n document.body\n );\n }\n ),\n {\n /**\n * @beta\n *\n * A prompt suggestion displayed in the AI toolbar.\n */\n Suggestion: AiToolbarSuggestion,\n\n /**\n * @beta\n *\n * A label to describe a group of prompt suggestions displayed in the AI toolbar.\n */\n SuggestionsLabel: AiToolbarSuggestionsLabel,\n\n /**\n * @beta\n *\n * A separator between groups of prompt suggestions displayed in the AI toolbar.\n */\n SuggestionsSeparator: AiToolbarSuggestionsSeparator,\n }\n);\n"],"names":["createContext","useContext","forwardRef","jsx","Command","classNames","jsxs","useCurrentEditor","useCallback","isContextualPromptDiffResponse","Fragment","CheckIcon","UndoIcon","CrossIcon","ArrowCornerDownRightIcon","useRef","useMemo","useLayoutEffect","customPrompt","SparklesIcon","ShortcutTooltip","Button","SendIcon","WarningIcon","StopIcon","useCommandState","state","useEffect","EditIcon","ShortenIcon","LengthenIcon","SparklesTextIcon","QuestionMarkIcon","useEditorState","DEFAULT_STATE","hide","offset","shift","limitShift","autoUpdate","useFloating","useRefs","useState","getDomRangeFromSelection","createPortal","TooltipProvider","EditorProvider"],"mappings":"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"}
@@ -289,7 +289,7 @@ function AiToolbarThinking() {
289
289
  const editor = useCurrentEditor("AiToolbarThinking", "AiToolbar");
290
290
  const contentRef = useRef(null);
291
291
  const aiName = editor.storage.liveblocksAi.name;
292
- const handleCancel = useCallback(() => {
292
+ const handleAbort = useCallback(() => {
293
293
  editor.commands.$cancelAiToolbarThinking();
294
294
  }, [editor]);
295
295
  useLayoutEffect(() => {
@@ -316,14 +316,14 @@ function AiToolbarThinking() {
316
316
  /* @__PURE__ */ jsx("div", {
317
317
  className: "lb-tiptap-ai-toolbar-actions",
318
318
  children: /* @__PURE__ */ jsx(ShortcutTooltip, {
319
- content: "Cancel",
319
+ content: "Abort response",
320
320
  shortcut: "Escape",
321
321
  children: /* @__PURE__ */ jsx(Button, {
322
322
  className: "lb-tiptap-ai-toolbar-action",
323
323
  variant: "secondary",
324
- "aria-label": "Cancel",
324
+ "aria-label": "Abort response",
325
325
  icon: /* @__PURE__ */ jsx(StopIcon, {}),
326
- onClick: handleCancel
326
+ onClick: handleAbort
327
327
  })
328
328
  })
329
329
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AiToolbar.js","sources":["../../src/ai/AiToolbar.tsx"],"sourcesContent":["import {\n autoUpdate,\n type DetectOverflowOptions,\n hide,\n limitShift,\n type Middleware,\n offset,\n shift,\n useFloating,\n type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n ArrowCornerDownRightIcon,\n Button,\n CheckIcon,\n CrossIcon,\n EditIcon,\n LengthenIcon,\n QuestionMarkIcon,\n SendIcon,\n ShortcutTooltip,\n ShortenIcon,\n SparklesIcon,\n SparklesTextIcon,\n StopIcon,\n TooltipProvider,\n UndoIcon,\n useRefs,\n WarningIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport { type Editor, useEditorState } from \"@tiptap/react\";\nimport { Command, useCommandState } from \"cmdk\";\nimport type {\n ComponentProps,\n ComponentType,\n KeyboardEvent as ReactKeyboardEvent,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from \"react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type {\n AiCommands,\n AiExtensionStorage,\n AiToolbarState,\n ChainedAiCommands,\n} from \"../types\";\nimport { getDomRangeFromSelection } from \"../utils\";\nimport { DEFAULT_STATE, isContextualPromptDiffResponse } from \"./AiExtension\";\n\nexport const AI_TOOLBAR_COLLISION_PADDING = 10;\n\nexport interface AiToolbarProps\n extends Omit<ComponentProps<\"div\">, \"value\" | \"defaultValue\" | \"children\"> {\n /**\n * The Tiptap editor.\n */\n editor: Editor | null;\n\n /**\n * The vertical offset of the AI toolbar from the selection.\n */\n offset?: number;\n\n /**\n * The prompt suggestions to display below the AI toolbar.\n */\n suggestions?: ReactNode | ComponentType<PropsWithChildren>;\n}\n\ntype AiToolbarDropdownSeparatorProps = ComponentProps<\"div\">;\n\ninterface AiToolbarDropdownItemProps\n extends ComponentProps<typeof Command.Item> {\n icon?: ReactNode;\n}\n\ntype AiToolbarSuggestionsSeparatorProps = AiToolbarDropdownSeparatorProps;\n\ntype AiToolbarSuggestionsLabelProps = ComponentProps<\"span\">;\n\ninterface AiToolbarSuggestionProps extends ComponentProps<\"div\"> {\n prompt?: string;\n icon?: ReactNode;\n}\n\ninterface AiToolbarContext {\n state: AiToolbarState;\n toolbarRef: RefObject<HTMLDivElement>;\n dropdownRef: RefObject<HTMLDivElement>;\n isDropdownHidden: boolean;\n}\n\nconst AiToolbarContext = createContext<AiToolbarContext | null>(null);\n\nfunction useAiToolbarContext() {\n const context = useContext(AiToolbarContext);\n\n if (!context) {\n throw new Error(\"useAiToolbarContext must be used within an AiToolbar\");\n }\n\n return context;\n}\n\n/**\n * A custom Floating UI middleware to position/scale the toolbar:\n * - Vertically: relative to the reference (e.g. selection)\n * - Horizontally: relative to the editor\n * - Width: relative to the editor\n */\nfunction tiptapFloating(editor: Editor | null): Middleware {\n return {\n name: \"tiptap\",\n options: editor,\n fn({ elements }) {\n if (!editor) {\n return {};\n }\n\n const editorRect = editor.view.dom.getBoundingClientRect();\n\n elements.floating.style.setProperty(\n \"--lb-tiptap-editor-width\",\n `${editorRect.width}px`\n );\n elements.floating.style.setProperty(\n \"--lb-tiptap-editor-height\",\n `${editorRect.height}px`\n );\n\n return {\n x: editorRect.x,\n };\n },\n };\n}\n\n/**\n * A custom Floating UI middleware to flip the toolbar/dropdown when shifted more than 100%.\n */\nfunction flipToolbar(): Middleware {\n return {\n name: \"flipToolbar\",\n fn({ elements, middlewareData, rects }) {\n const shiftOffsetY = middlewareData.shift?.y ?? 0;\n\n if (Math.abs(shiftOffsetY) >= rects.floating.height) {\n elements.floating.setAttribute(\"data-liveblocks-ai-toolbar-flip\", \"\");\n } else {\n elements.floating.removeAttribute(\"data-liveblocks-ai-toolbar-flip\");\n }\n\n return {};\n },\n };\n}\n\nconst AiToolbarDropdownSeparator = forwardRef<\n HTMLDivElement,\n AiToolbarDropdownSeparatorProps\n>(({ className, ...props }, forwardedRef) => {\n return (\n <Command.Separator\n className={classNames(\"lb-dropdown-separator\", className)}\n {...props}\n ref={forwardedRef}\n />\n );\n});\n\nconst AiToolbarSuggestionsSeparator = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionsSeparatorProps\n>((props, forwardedRef) => {\n return <AiToolbarDropdownSeparator ref={forwardedRef} {...props} />;\n});\n\nconst AiToolbarDropdownItem = forwardRef<\n HTMLDivElement,\n AiToolbarDropdownItemProps\n>(({ children, onSelect, icon, className, ...props }, forwardedRef) => {\n return (\n <Command.Item\n className={classNames(\"lb-dropdown-item\", className)}\n onSelect={onSelect}\n {...props}\n ref={forwardedRef}\n >\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? (\n <span className=\"lb-dropdown-item-label\">{children}</span>\n ) : null}\n </Command.Item>\n );\n});\n\nconst AiToolbarSuggestionsLabel = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionsLabelProps\n>(({ children, className, ...props }, forwardedRef) => {\n return (\n <span\n ref={forwardedRef}\n className={classNames(\"lb-dropdown-label\", className)}\n {...props}\n >\n {children}\n </span>\n );\n});\n\nconst AiToolbarSuggestion = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionProps\n>(({ prompt: manualPrompt, ...props }, forwardedRef) => {\n const editor = useCurrentEditor(\"Suggestion\", \"AiToolbar\");\n\n const handleSelect = useCallback(\n (prompt: string) => {\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n manualPrompt ?? prompt\n );\n },\n [editor, manualPrompt]\n );\n\n return (\n <AiToolbarDropdownItem\n {...props}\n onSelect={handleSelect}\n ref={forwardedRef}\n />\n );\n});\n\nfunction AiToolbarReviewingSuggestions() {\n const editor = useCurrentEditor(\"ReviewingSuggestions\", \"AiToolbar\");\n const { state } = useAiToolbarContext();\n const { response } = state as Extract<AiToolbarState, { phase: \"reviewing\" }>;\n\n if (isContextualPromptDiffResponse(response)) {\n return (\n <>\n <AiToolbarDropdownItem\n icon={<CheckIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$acceptAiToolbarResponse\n }\n >\n Accept\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<UndoIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking\n }\n >\n Try again\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<CrossIcon />}\n onSelect={(editor.commands as unknown as AiCommands).$closeAiToolbar}\n >\n Discard\n </AiToolbarDropdownItem>\n </>\n );\n } else {\n return (\n <>\n <AiToolbarDropdownItem\n icon={<ArrowCornerDownRightIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$acceptAiToolbarResponse\n }\n >\n Insert below\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<UndoIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking\n }\n >\n Try again\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<CrossIcon />}\n onSelect={(editor.commands as unknown as AiCommands).$closeAiToolbar}\n >\n Discard\n </AiToolbarDropdownItem>\n </>\n );\n }\n}\n\nfunction AiToolbarCustomPromptContent() {\n const editor = useCurrentEditor(\"CustomPromptContent\", \"AiToolbar\");\n const aiName = (editor.storage.liveblocksAi as AiExtensionStorage).name;\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const { state, dropdownRef, isDropdownHidden } = useAiToolbarContext();\n const { customPrompt } = state as Exclude<\n AiToolbarState,\n { phase: \"closed\" }\n >;\n const isCustomPromptEmpty = useMemo(\n () => customPrompt.trim() === \"\",\n [customPrompt]\n );\n\n useLayoutEffect(\n () => {\n requestAnimationFrame(() => {\n const textArea = textAreaRef.current;\n\n if (!textArea) {\n return;\n }\n\n textArea.focus();\n textArea.setSelectionRange(\n textArea.value.length,\n textArea.value.length\n );\n });\n },\n [] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const handlePromptKeyDown = (\n event: ReactKeyboardEvent<HTMLTextAreaElement>\n ) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n\n if (event.shiftKey) {\n // If the shift key is pressed, add a new line\n (editor.commands as unknown as AiCommands)._updateAiToolbarCustomPrompt(\n (customPrompt) => customPrompt + \"\\n\"\n );\n } else {\n const selectedDropdownItem = dropdownRef.current?.querySelector(\n \"[role='option'][data-selected='true']\"\n ) as HTMLElement | null;\n\n if (!isDropdownHidden && selectedDropdownItem) {\n // If there's a selected dropdown item, select it\n selectedDropdownItem.click();\n } else if (!isCustomPromptEmpty) {\n // Otherwise, submit the custom prompt\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n customPrompt,\n state.phase === \"reviewing\"\n );\n }\n }\n }\n };\n\n const handleCustomPromptChange = useCallback(\n (customPrompt: string) => {\n (editor.commands as unknown as AiCommands)._updateAiToolbarCustomPrompt(\n customPrompt\n );\n },\n [editor]\n );\n\n const handleSendClick = useCallback(() => {\n if (isCustomPromptEmpty) {\n return;\n }\n\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n customPrompt,\n state.phase === \"reviewing\"\n );\n }, [editor, customPrompt, isCustomPromptEmpty, state.phase]);\n\n return (\n <div className=\"lb-tiptap-ai-toolbar-content\">\n <span className=\"lb-icon-container lb-tiptap-ai-toolbar-icon-container\">\n <SparklesIcon />\n </span>\n <div\n className=\"lb-tiptap-ai-toolbar-custom-prompt-container\"\n data-value={customPrompt}\n >\n <Command.Input\n value={customPrompt}\n onValueChange={handleCustomPromptChange}\n asChild\n >\n <textarea\n ref={textAreaRef}\n className=\"lb-tiptap-ai-toolbar-custom-prompt\"\n placeholder={`Ask ${aiName} anything…`}\n onKeyDown={handlePromptKeyDown}\n rows={1}\n autoFocus\n />\n </Command.Input>\n </div>\n <div className=\"lb-tiptap-ai-toolbar-actions\">\n <ShortcutTooltip content={`Ask ${aiName}`} shortcut=\"Enter\">\n <Button\n className=\"lb-tiptap-ai-toolbar-action\"\n variant=\"primary\"\n aria-label={`Ask ${aiName}`}\n icon={<SendIcon />}\n disabled={isCustomPromptEmpty}\n onClick={handleSendClick}\n />\n </ShortcutTooltip>\n </div>\n </div>\n );\n}\n\nfunction AiToolbarAsking() {\n const { state } = useAiToolbarContext();\n const { error } = state as Exclude<AiToolbarState, { phase: \"closed\" }>;\n\n return (\n <>\n <AiToolbarCustomPromptContent />\n {error ? (\n <div className=\"lb-tiptap-ai-toolbar-error\">\n <span className=\"lb-icon-container\">\n <WarningIcon />\n </span>\n There was a problem with your request.\n </div>\n ) : null}\n </>\n );\n}\n\nfunction AiToolbarThinking() {\n const editor = useCurrentEditor(\"AiToolbarThinking\", \"AiToolbar\");\n const contentRef = useRef<HTMLDivElement>(null);\n const aiName = (editor.storage.liveblocksAi as AiExtensionStorage).name;\n\n const handleCancel = useCallback(() => {\n (editor.commands as unknown as AiCommands).$cancelAiToolbarThinking();\n }, [editor]);\n\n // Focus the toolbar content and clear the current window selection while thinking\n useLayoutEffect(() => {\n contentRef.current?.focus();\n window.getSelection()?.removeAllRanges();\n }, []);\n\n return (\n <>\n <div\n className=\"lb-tiptap-ai-toolbar-content\"\n tabIndex={0}\n ref={contentRef}\n >\n <span className=\"lb-icon-container lb-tiptap-ai-toolbar-icon-container\">\n <SparklesIcon />\n </span>\n <div className=\"lb-tiptap-ai-toolbar-thinking\">\n {aiName} is thinking…\n </div>\n <div className=\"lb-tiptap-ai-toolbar-actions\">\n <ShortcutTooltip content=\"Cancel\" shortcut=\"Escape\">\n <Button\n className=\"lb-tiptap-ai-toolbar-action\"\n variant=\"secondary\"\n aria-label=\"Cancel\"\n icon={<StopIcon />}\n onClick={handleCancel}\n />\n </ShortcutTooltip>\n </div>\n </div>\n </>\n );\n}\n\nfunction AiToolbarReviewing() {\n const { state } = useAiToolbarContext();\n const { response } = state as Extract<AiToolbarState, { phase: \"reviewing\" }>;\n\n return (\n <>\n {response.type === \"other\" ? (\n <div className=\"lb-tiptap-ai-toolbar-response-container\">\n <div className=\"lb-tiptap-ai-toolbar-response\">{response.text}</div>\n </div>\n ) : null}\n <AiToolbarCustomPromptContent />\n </>\n );\n}\n\nfunction AiToolbarContainer({\n state,\n toolbarRef,\n dropdownRef,\n children,\n}: PropsWithChildren<{\n state: AiToolbarState;\n toolbarRef: RefObject<HTMLDivElement>;\n dropdownRef: RefObject<HTMLDivElement>;\n}>) {\n const editor = useCurrentEditor(\"AiToolbarContainer\", \"AiToolbar\");\n const customPrompt = state.customPrompt;\n const isCustomPromptMultiline = useMemo(\n () => customPrompt?.includes(\"\\n\"),\n [customPrompt]\n );\n const hasDropdownItems = useCommandState(\n (state) => state.filtered.count > 0\n ) as boolean;\n const isDropdownHidden = isCustomPromptMultiline || !hasDropdownItems;\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!event.defaultPrevented && event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n\n if (state.phase === \"thinking\") {\n (editor.commands as unknown as AiCommands).$cancelAiToolbarThinking();\n } else {\n (editor.chain() as ChainedAiCommands).$closeAiToolbar().focus().run();\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [editor, state.phase]);\n\n return (\n <AiToolbarContext.Provider\n value={{\n state,\n toolbarRef,\n dropdownRef,\n isDropdownHidden,\n }}\n >\n <div className=\"lb-tiptap-ai-toolbar-container\">\n <div className=\"lb-elevation lb-tiptap-ai-toolbar\">\n {state.phase === \"asking\" ? (\n <AiToolbarAsking />\n ) : state.phase === \"thinking\" ? (\n <AiToolbarThinking />\n ) : state.phase === \"reviewing\" ? (\n <AiToolbarReviewing />\n ) : null}\n </div>\n <div\n className=\"lb-tiptap-ai-toolbar-halo\"\n data-active={state.phase === \"thinking\" ? \"\" : undefined}\n aria-hidden\n >\n <div className=\"lb-tiptap-ai-toolbar-halo-horizontal\" />\n <div className=\"lb-tiptap-ai-toolbar-halo-vertical\" />\n </div>\n </div>\n {state.phase === \"asking\" || state.phase === \"reviewing\" ? (\n <Command.List\n className=\"lb-elevation lb-dropdown lb-tiptap-ai-toolbar-dropdown\"\n data-hidden={isDropdownHidden ? \"\" : undefined}\n ref={dropdownRef}\n >\n {state.phase === \"reviewing\" ? (\n <AiToolbarReviewingSuggestions />\n ) : (\n children\n )}\n </Command.List>\n ) : null}\n </AiToolbarContext.Provider>\n );\n}\n\nconst defaultSuggestions = (\n <>\n <AiToolbarSuggestion\n icon={<EditIcon />}\n prompt=\"Improve the quality of the text\"\n >\n Improve writing\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<CheckIcon />}\n prompt=\"Fix spelling & grammar errors in the text\"\n >\n Fix mistakes\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<ShortenIcon />}\n prompt=\"Shorten the text, simplifying it\"\n >\n Simplify\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<LengthenIcon />}\n prompt=\"Lengthen the text, going into more detail\"\n >\n Add more detail\n </AiToolbarSuggestion>\n <AiToolbarSuggestionsSeparator />\n <AiToolbarSuggestion\n icon={<SparklesTextIcon />}\n prompt=\"Continue writing from the text's end\"\n >\n Continue writing\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<QuestionMarkIcon />}\n prompt=\"Explain what the text is about\"\n >\n Explain\n </AiToolbarSuggestion>\n </>\n);\n\n/**\n * @beta\n *\n * A floating AI toolbar attached to the editor.\n */\nexport const AiToolbar = Object.assign(\n forwardRef<HTMLDivElement, AiToolbarProps>(\n (\n {\n offset: sideOffset = 6,\n editor,\n className,\n suggestions: Suggestions = defaultSuggestions,\n ...props\n },\n forwardedRef\n ) => {\n const state =\n useEditorState({\n editor,\n selector: (ctx) => {\n return (\n ctx.editor?.storage.liveblocksAi as AiExtensionStorage | undefined\n )?.state;\n },\n }) ?? DEFAULT_STATE;\n const selection = editor?.state.selection;\n const floatingOptions: UseFloatingOptions = useMemo(() => {\n const detectOverflowOptions: DetectOverflowOptions = {\n padding: AI_TOOLBAR_COLLISION_PADDING,\n };\n\n return {\n strategy: \"fixed\",\n placement: \"bottom\",\n middleware: [\n tiptapFloating(editor),\n hide(detectOverflowOptions),\n offset(sideOffset),\n shift({\n ...detectOverflowOptions,\n mainAxis: false,\n crossAxis: true,\n limiter: limitShift(),\n }),\n flipToolbar(),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n };\n }, [editor, sideOffset]);\n const isOpen = selection !== undefined && state.phase !== \"closed\";\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n isPositioned,\n } = useFloating({\n ...floatingOptions,\n open: isOpen,\n });\n const toolbarRef = useRef<HTMLDivElement>(null);\n const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [selectedDropdownValue, setSelectedDropdownValue] = useState(\"\");\n\n // Reset the selected dropdown value when the toolbar is closed\n useEffect(() => {\n if (state.phase === \"closed\") {\n setSelectedDropdownValue(\"\");\n }\n }, [state.phase]);\n\n useEffect(() => {\n // Reset the selected dropdown value when the dropdown is closed\n if (state.phase === \"closed\") {\n setSelectedDropdownValue(\"\");\n\n return;\n }\n\n // Otherwise, make sure a dropdown item is selected when moving between phases\n const selectedDropdownItem = dropdownRef.current?.querySelector(\n \"[role='option'][data-selected='true']\"\n );\n\n if (selectedDropdownItem) {\n return;\n }\n\n const firstDropdownItem =\n dropdownRef.current?.querySelector(\"[role='option']\");\n\n setSelectedDropdownValue(\n (firstDropdownItem as HTMLElement | null)?.dataset.value ?? \"\"\n );\n }, [state.phase, dropdownRef, setSelectedDropdownValue]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (!selection && state.phase !== \"closed\") {\n (editor.commands as unknown as AiCommands).$closeAiToolbar();\n }\n }, [state.phase, editor, selection]);\n\n useLayoutEffect(() => {\n if (!editor || !isOpen) {\n return;\n }\n\n setReference(null);\n\n setTimeout(() => {\n if (\n state.phase === \"reviewing\" &&\n isContextualPromptDiffResponse(state.response)\n ) {\n const changes = editor.view.dom.querySelectorAll(\n \"ychange[data-liveblocks]\"\n );\n\n // When diffs are displayed, we manually calculate bounds around all the\n // rendered changes instead of using the selection\n setReference({\n getBoundingClientRect: () => {\n const rects: DOMRect[] = [];\n\n changes.forEach((change) => {\n rects.push(change.getBoundingClientRect());\n });\n\n const minX = Math.min(...rects.map((rect) => rect.left));\n const minY = Math.min(...rects.map((rect) => rect.top));\n const maxX = Math.max(...rects.map((rect) => rect.right));\n const maxY = Math.max(...rects.map((rect) => rect.bottom));\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n top: minY,\n left: minX,\n bottom: maxY,\n right: maxX,\n };\n },\n });\n } else if (selection) {\n const domRange = getDomRangeFromSelection(editor, selection);\n setReference(domRange);\n } else {\n setReference(null);\n }\n }, 0);\n }, [\n selection,\n editor,\n isOpen,\n setReference,\n state.phase,\n state.response,\n ]);\n\n // Close the toolbar when clicking anywhere outside of it\n useEffect(() => {\n if (!editor || !isOpen) {\n return;\n }\n\n const handleOutsideEvent = (event: MouseEvent) => {\n if (!toolbarRef.current) {\n return;\n }\n\n if (\n event.target &&\n !toolbarRef.current.contains(event.target as Node) &&\n (dropdownRef.current\n ? !dropdownRef.current.contains(event.target as Node)\n : true)\n ) {\n (editor.commands as unknown as AiCommands).$closeAiToolbar();\n }\n };\n\n setTimeout(() => {\n document.addEventListener(\"pointerdown\", handleOutsideEvent);\n }, 0);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handleOutsideEvent);\n };\n }, [editor, isOpen]);\n\n if (!editor || !isOpen) {\n return null;\n }\n\n return createPortal(\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <Command\n role=\"toolbar\"\n label=\"AI toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\n \"lb-root lb-portal lb-tiptap-ai-toolbar-portal\",\n className\n )}\n ref={mergedRefs}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n }}\n value={selectedDropdownValue}\n onValueChange={setSelectedDropdownValue}\n {...props}\n >\n <AiToolbarContainer\n state={state}\n dropdownRef={dropdownRef}\n toolbarRef={toolbarRef}\n >\n {typeof Suggestions === \"function\" ? (\n <Suggestions children={defaultSuggestions} />\n ) : (\n Suggestions\n )}\n </AiToolbarContainer>\n </Command>\n </EditorProvider>\n </TooltipProvider>,\n document.body\n );\n }\n ),\n {\n /**\n * @beta\n *\n * A prompt suggestion displayed in the AI toolbar.\n */\n Suggestion: AiToolbarSuggestion,\n\n /**\n * @beta\n *\n * A label to describe a group of prompt suggestions displayed in the AI toolbar.\n */\n SuggestionsLabel: AiToolbarSuggestionsLabel,\n\n /**\n * @beta\n *\n * A separator between groups of prompt suggestions displayed in the AI toolbar.\n */\n SuggestionsSeparator: AiToolbarSuggestionsSeparator,\n }\n);\n"],"names":["customPrompt","state"],"mappings":";;;;;;;;;;;;;AAgEO,MAAM,4BAA+B,GAAA,GAAA;AA2C5C,MAAM,gBAAA,GAAmB,cAAuC,IAAI,CAAA,CAAA;AAEpE,SAAS,mBAAsB,GAAA;AAC7B,EAAM,MAAA,OAAA,GAAU,WAAW,gBAAgB,CAAA,CAAA;AAE3C,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAM,MAAA,IAAI,MAAM,sDAAsD,CAAA,CAAA;AAAA,GACxE;AAEA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;AAQA,SAAS,eAAe,MAAmC,EAAA;AACzD,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,QAAA;AAAA,IACN,OAAS,EAAA,MAAA;AAAA,IACT,EAAA,CAAG,EAAE,QAAA,EAAY,EAAA;AACf,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAA,OAAO,EAAC,CAAA;AAAA,OACV;AAEA,MAAA,MAAM,UAAa,GAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,qBAAsB,EAAA,CAAA;AAEzD,MAAA,QAAA,CAAS,SAAS,KAAM,CAAA,WAAA;AAAA,QACtB,0BAAA;AAAA,QACA,GAAG,UAAW,CAAA,KAAA,CAAA,EAAA,CAAA;AAAA,OAChB,CAAA;AACA,MAAA,QAAA,CAAS,SAAS,KAAM,CAAA,WAAA;AAAA,QACtB,2BAAA;AAAA,QACA,GAAG,UAAW,CAAA,MAAA,CAAA,EAAA,CAAA;AAAA,OAChB,CAAA;AAEA,MAAO,OAAA;AAAA,QACL,GAAG,UAAW,CAAA,CAAA;AAAA,OAChB,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA;AAKA,SAAS,WAA0B,GAAA;AACjC,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,aAAA;AAAA,IACN,EAAG,CAAA,EAAE,QAAU,EAAA,cAAA,EAAgB,OAAS,EAAA;AACtC,MAAM,MAAA,YAAA,GAAe,cAAe,CAAA,KAAA,EAAO,CAAK,IAAA,CAAA,CAAA;AAEhD,MAAA,IAAI,KAAK,GAAI,CAAA,YAAY,CAAK,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA;AACnD,QAAS,QAAA,CAAA,QAAA,CAAS,YAAa,CAAA,iCAAA,EAAmC,EAAE,CAAA,CAAA;AAAA,OAC/D,MAAA;AACL,QAAS,QAAA,CAAA,QAAA,CAAS,gBAAgB,iCAAiC,CAAA,CAAA;AAAA,OACrE;AAEA,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAAA,GACF,CAAA;AACF,CAAA;AAEA,MAAM,6BAA6B,UAGjC,CAAA,CAAC,EAAE,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AAC3C,EACE,uBAAA,GAAA,CAAC,QAAQ,SAAR,EAAA;AAAA,IACC,SAAA,EAAW,UAAW,CAAA,uBAAA,EAAyB,SAAS,CAAA;AAAA,IACvD,GAAG,KAAA;AAAA,IACJ,GAAK,EAAA,YAAA;AAAA,GACP,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,MAAM,6BAAgC,GAAA,UAAA,CAGpC,CAAC,KAAA,EAAO,YAAiB,KAAA;AACzB,EAAA,uBAAQ,GAAA,CAAA,0BAAA,EAAA;AAAA,IAA2B,GAAK,EAAA,YAAA;AAAA,IAAe,GAAG,KAAA;AAAA,GAAO,CAAA,CAAA;AACnE,CAAC,CAAA,CAAA;AAED,MAAM,qBAAA,GAAwB,UAG5B,CAAA,CAAC,EAAE,QAAA,EAAU,UAAU,IAAM,EAAA,SAAA,EAAA,GAAc,KAAM,EAAA,EAAG,YAAiB,KAAA;AACrE,EACE,uBAAA,IAAA,CAAC,QAAQ,IAAR,EAAA;AAAA,IACC,SAAA,EAAW,UAAW,CAAA,kBAAA,EAAoB,SAAS,CAAA;AAAA,IACnD,QAAA;AAAA,IACC,GAAG,KAAA;AAAA,IACJ,GAAK,EAAA,YAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,MAAA,IAAA,mBAAQ,GAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAU,EAAA,mBAAA;AAAA,QAAqB,QAAA,EAAA,IAAA;AAAA,OAAK,CAAU,GAAA,IAAA;AAAA,MAC3D,2BACE,GAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAU,EAAA,wBAAA;AAAA,QAA0B,QAAA;AAAA,OAAS,CACjD,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,MAAM,yBAAA,GAA4B,WAGhC,CAAC,EAAE,UAAU,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACrD,EAAA,uBACG,GAAA,CAAA,MAAA,EAAA;AAAA,IACC,GAAK,EAAA,YAAA;AAAA,IACL,SAAA,EAAW,UAAW,CAAA,mBAAA,EAAqB,SAAS,CAAA;AAAA,IACnD,GAAG,KAAA;AAAA,IAEH,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,MAAM,mBAAA,GAAsB,WAG1B,CAAC,EAAE,QAAQ,YAAiB,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACtD,EAAM,MAAA,MAAA,GAAS,gBAAiB,CAAA,YAAA,EAAc,WAAW,CAAA,CAAA;AAEzD,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,MAAmB,KAAA;AAClB,MAAC,OAAO,QAAmC,CAAA,uBAAA;AAAA,QACzC,YAAgB,IAAA,MAAA;AAAA,OAClB,CAAA;AAAA,KACF;AAAA,IACA,CAAC,QAAQ,YAAY,CAAA;AAAA,GACvB,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,qBAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,QAAU,EAAA,YAAA;AAAA,IACV,GAAK,EAAA,YAAA;AAAA,GACP,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,SAAS,6BAAgC,GAAA;AACvC,EAAM,MAAA,MAAA,GAAS,gBAAiB,CAAA,sBAAA,EAAwB,WAAW,CAAA,CAAA;AACnE,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACtC,EAAM,MAAA,EAAE,UAAa,GAAA,KAAA,CAAA;AAErB,EAAI,IAAA,8BAAA,CAA+B,QAAQ,CAAG,EAAA;AAC5C,IACE,uBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,MACE,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,sBAAO,SAAU,EAAA,EAAA,CAAA;AAAA,UACjB,QAAA,EACG,OAAO,QAAmC,CAAA,wBAAA;AAAA,UAE9C,QAAA,EAAA,QAAA;AAAA,SAED,CAAA;AAAA,wBACC,GAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,sBAAO,QAAS,EAAA,EAAA,CAAA;AAAA,UAChB,QAAA,EACG,OAAO,QAAmC,CAAA,uBAAA;AAAA,UAE9C,QAAA,EAAA,WAAA;AAAA,SAED,CAAA;AAAA,wBACC,GAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,sBAAO,SAAU,EAAA,EAAA,CAAA;AAAA,UACjB,QAAA,EAAW,OAAO,QAAmC,CAAA,eAAA;AAAA,UACtD,QAAA,EAAA,SAAA;AAAA,SAED,CAAA;AAAA,OAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEG,MAAA;AACL,IACE,uBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,MACE,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,sBAAO,wBAAyB,EAAA,EAAA,CAAA;AAAA,UAChC,QAAA,EACG,OAAO,QAAmC,CAAA,wBAAA;AAAA,UAE9C,QAAA,EAAA,cAAA;AAAA,SAED,CAAA;AAAA,wBACC,GAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,sBAAO,QAAS,EAAA,EAAA,CAAA;AAAA,UAChB,QAAA,EACG,OAAO,QAAmC,CAAA,uBAAA;AAAA,UAE9C,QAAA,EAAA,WAAA;AAAA,SAED,CAAA;AAAA,wBACC,GAAA,CAAA,qBAAA,EAAA;AAAA,UACC,IAAA,sBAAO,SAAU,EAAA,EAAA,CAAA;AAAA,UACjB,QAAA,EAAW,OAAO,QAAmC,CAAA,eAAA;AAAA,UACtD,QAAA,EAAA,SAAA;AAAA,SAED,CAAA;AAAA,OAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF,CAAA;AAEA,SAAS,4BAA+B,GAAA;AACtC,EAAM,MAAA,MAAA,GAAS,gBAAiB,CAAA,qBAAA,EAAuB,WAAW,CAAA,CAAA;AAClE,EAAM,MAAA,MAAA,GAAU,MAAO,CAAA,OAAA,CAAQ,YAAoC,CAAA,IAAA,CAAA;AACnE,EAAM,MAAA,WAAA,GAAc,OAA4B,IAAI,CAAA,CAAA;AACpD,EAAA,MAAM,EAAE,KAAA,EAAO,WAAa,EAAA,gBAAA,KAAqB,mBAAoB,EAAA,CAAA;AACrE,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA,CAAA;AAIzB,EAAA,MAAM,mBAAsB,GAAA,OAAA;AAAA,IAC1B,MAAM,YAAa,CAAA,IAAA,EAAW,KAAA,EAAA;AAAA,IAC9B,CAAC,YAAY,CAAA;AAAA,GACf,CAAA;AAEA,EAAA,eAAA;AAAA,IACE,MAAM;AACJ,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,MAAM,WAAW,WAAY,CAAA,OAAA,CAAA;AAE7B,QAAA,IAAI,CAAC,QAAU,EAAA;AACb,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,QAAA,CAAS,KAAM,EAAA,CAAA;AACf,QAAS,QAAA,CAAA,iBAAA;AAAA,UACP,SAAS,KAAM,CAAA,MAAA;AAAA,UACf,SAAS,KAAM,CAAA,MAAA;AAAA,SACjB,CAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,mBAAA,GAAsB,CAC1B,KACG,KAAA;AACH,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAEtB,MAAA,IAAI,MAAM,QAAU,EAAA;AAElB,QAAC,OAAO,QAAmC,CAAA,4BAAA;AAAA,UACzC,CAACA,kBAAiBA,aAAe,GAAA,IAAA;AAAA,SACnC,CAAA;AAAA,OACK,MAAA;AACL,QAAM,MAAA,oBAAA,GAAuB,YAAY,OAAS,EAAA,aAAA;AAAA,UAChD,uCAAA;AAAA,SACF,CAAA;AAEA,QAAI,IAAA,CAAC,oBAAoB,oBAAsB,EAAA;AAE7C,UAAA,oBAAA,CAAqB,KAAM,EAAA,CAAA;AAAA,SAC7B,MAAA,IAAW,CAAC,mBAAqB,EAAA;AAE/B,UAAC,OAAO,QAAmC,CAAA,uBAAA;AAAA,YACzC,YAAA;AAAA,YACA,MAAM,KAAU,KAAA,WAAA;AAAA,WAClB,CAAA;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,wBAA2B,GAAA,WAAA;AAAA,IAC/B,CAACA,aAAyB,KAAA;AACxB,MAAC,OAAO,QAAmC,CAAA,4BAAA;AAAA,QACzCA,aAAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,IACA,CAAC,MAAM,CAAA;AAAA,GACT,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,IAAI,mBAAqB,EAAA;AACvB,MAAA,OAAA;AAAA,KACF;AAEA,IAAC,OAAO,QAAmC,CAAA,uBAAA;AAAA,MACzC,YAAA;AAAA,MACA,MAAM,KAAU,KAAA,WAAA;AAAA,KAClB,CAAA;AAAA,KACC,CAAC,MAAA,EAAQ,cAAc,mBAAqB,EAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAE3D,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,8BAAA;AAAA,IACb,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAU,EAAA,uDAAA;AAAA,QACd,8BAAC,YAAa,EAAA,EAAA,CAAA;AAAA,OAChB,CAAA;AAAA,sBACC,GAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAU,EAAA,8CAAA;AAAA,QACV,YAAY,EAAA,YAAA;AAAA,QAEZ,QAAA,kBAAA,GAAA,CAAC,QAAQ,KAAR,EAAA;AAAA,UACC,KAAO,EAAA,YAAA;AAAA,UACP,aAAe,EAAA,wBAAA;AAAA,UACf,OAAO,EAAA,IAAA;AAAA,UAEP,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA;AAAA,YACC,GAAK,EAAA,WAAA;AAAA,YACL,SAAU,EAAA,oCAAA;AAAA,YACV,aAAa,CAAO,IAAA,EAAA,MAAA,CAAA,eAAA,CAAA;AAAA,YACpB,SAAW,EAAA,mBAAA;AAAA,YACX,IAAM,EAAA,CAAA;AAAA,YACN,SAAS,EAAA,IAAA;AAAA,WACX,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,sBACC,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,8BAAA;AAAA,QACb,QAAC,kBAAA,GAAA,CAAA,eAAA,EAAA;AAAA,UAAgB,SAAS,CAAO,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,UAAU,QAAS,EAAA,OAAA;AAAA,UAClD,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA;AAAA,YACC,SAAU,EAAA,6BAAA;AAAA,YACV,OAAQ,EAAA,SAAA;AAAA,YACR,cAAY,CAAO,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,YACnB,IAAA,sBAAO,QAAS,EAAA,EAAA,CAAA;AAAA,YAChB,QAAU,EAAA,mBAAA;AAAA,YACV,OAAS,EAAA,eAAA;AAAA,WACX,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,eAAkB,GAAA;AACzB,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACtC,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAElB,EACE,uBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,IACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,4BAA6B,EAAA,EAAA,CAAA;AAAA,MAC7B,wBACE,IAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,4BAAA;AAAA,QACb,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,MAAA,EAAA;AAAA,YAAK,SAAU,EAAA,mBAAA;AAAA,YACd,8BAAC,WAAY,EAAA,EAAA,CAAA;AAAA,WACf,CAAA;AAAA,UAAO,wCAAA;AAAA,SAAA;AAAA,OAET,CACE,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAM,MAAA,MAAA,GAAS,gBAAiB,CAAA,mBAAA,EAAqB,WAAW,CAAA,CAAA;AAChE,EAAM,MAAA,UAAA,GAAa,OAAuB,IAAI,CAAA,CAAA;AAC9C,EAAM,MAAA,MAAA,GAAU,MAAO,CAAA,OAAA,CAAQ,YAAoC,CAAA,IAAA,CAAA;AAEnE,EAAM,MAAA,YAAA,GAAe,YAAY,MAAM;AACrC,IAAC,MAAA,CAAO,SAAmC,wBAAyB,EAAA,CAAA;AAAA,GACtE,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAGX,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,UAAA,CAAW,SAAS,KAAM,EAAA,CAAA;AAC1B,IAAO,MAAA,CAAA,YAAA,IAAgB,eAAgB,EAAA,CAAA;AAAA,GACzC,EAAG,EAAE,CAAA,CAAA;AAEL,EACE,uBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,IACE,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAU,EAAA,8BAAA;AAAA,MACV,QAAU,EAAA,CAAA;AAAA,MACV,GAAK,EAAA,UAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,MAAA,EAAA;AAAA,UAAK,SAAU,EAAA,uDAAA;AAAA,UACd,8BAAC,YAAa,EAAA,EAAA,CAAA;AAAA,SAChB,CAAA;AAAA,wBACC,IAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,+BAAA;AAAA,UACZ,QAAA,EAAA;AAAA,YAAA,MAAA;AAAA,YAAO,oBAAA;AAAA,WAAA;AAAA,SACV,CAAA;AAAA,wBACC,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,8BAAA;AAAA,UACb,QAAC,kBAAA,GAAA,CAAA,eAAA,EAAA;AAAA,YAAgB,OAAQ,EAAA,QAAA;AAAA,YAAS,QAAS,EAAA,QAAA;AAAA,YACzC,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA;AAAA,cACC,SAAU,EAAA,6BAAA;AAAA,cACV,OAAQ,EAAA,WAAA;AAAA,cACR,YAAW,EAAA,QAAA;AAAA,cACX,IAAA,sBAAO,QAAS,EAAA,EAAA,CAAA;AAAA,cAChB,OAAS,EAAA,YAAA;AAAA,aACX,CAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,kBAAqB,GAAA;AAC5B,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACtC,EAAM,MAAA,EAAE,UAAa,GAAA,KAAA,CAAA;AAErB,EACE,uBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,IACG,QAAA,EAAA;AAAA,MAAS,QAAA,CAAA,IAAA,KAAS,0BAChB,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,yCAAA;AAAA,QACb,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,+BAAA;AAAA,UAAiC,QAAS,EAAA,QAAA,CAAA,IAAA;AAAA,SAAK,CAAA;AAAA,OAChE,CACE,GAAA,IAAA;AAAA,0BACH,4BAA6B,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GAChC,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,kBAAmB,CAAA;AAAA,EAC1B,KAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AACF,CAII,EAAA;AACF,EAAM,MAAA,MAAA,GAAS,gBAAiB,CAAA,oBAAA,EAAsB,WAAW,CAAA,CAAA;AACjE,EAAA,MAAM,eAAe,KAAM,CAAA,YAAA,CAAA;AAC3B,EAAA,MAAM,uBAA0B,GAAA,OAAA;AAAA,IAC9B,MAAM,YAAc,EAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACjC,CAAC,YAAY,CAAA;AAAA,GACf,CAAA;AACA,EAAA,MAAM,gBAAmB,GAAA,eAAA;AAAA,IACvB,CAACC,MAAAA,KAAUA,MAAM,CAAA,QAAA,CAAS,KAAQ,GAAA,CAAA;AAAA,GACpC,CAAA;AACA,EAAM,MAAA,gBAAA,GAAmB,2BAA2B,CAAC,gBAAA,CAAA;AAErD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,OAAA;AAAA,KACF;AAEA,IAAM,MAAA,aAAA,GAAgB,CAAC,KAAyB,KAAA;AAC9C,MAAA,IAAI,CAAC,KAAA,CAAM,gBAAoB,IAAA,KAAA,CAAM,QAAQ,QAAU,EAAA;AACrD,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAEtB,QAAI,IAAA,KAAA,CAAM,UAAU,UAAY,EAAA;AAC9B,UAAC,MAAA,CAAO,SAAmC,wBAAyB,EAAA,CAAA;AAAA,SAC/D,MAAA;AACL,UAAC,OAAO,KAAM,EAAA,CAAwB,iBAAkB,CAAA,KAAA,GAAQ,GAAI,EAAA,CAAA;AAAA,SACtE;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAS,QAAA,CAAA,gBAAA,CAAiB,WAAW,aAAa,CAAA,CAAA;AAElD,IAAA,OAAO,MAAM;AACX,MAAS,QAAA,CAAA,mBAAA,CAAoB,WAAW,aAAa,CAAA,CAAA;AAAA,KACvD,CAAA;AAAA,GACC,EAAA,CAAC,MAAQ,EAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAExB,EACE,uBAAA,IAAA,CAAC,iBAAiB,QAAjB,EAAA;AAAA,IACC,KAAO,EAAA;AAAA,MACL,KAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,KACF;AAAA,IAEA,QAAA,EAAA;AAAA,sBAAC,IAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,gCAAA;AAAA,QACb,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,KAAA,EAAA;AAAA,YAAI,SAAU,EAAA,mCAAA;AAAA,YACZ,gBAAM,KAAU,KAAA,QAAA,mBACd,GAAA,CAAA,eAAA,EAAA,EAAgB,IACf,KAAM,CAAA,KAAA,KAAU,UAClB,mBAAA,GAAA,CAAC,qBAAkB,CACjB,GAAA,KAAA,CAAM,UAAU,WAClB,mBAAA,GAAA,CAAC,sBAAmB,CAClB,GAAA,IAAA;AAAA,WACN,CAAA;AAAA,0BACC,IAAA,CAAA,KAAA,EAAA;AAAA,YACC,SAAU,EAAA,2BAAA;AAAA,YACV,aAAa,EAAA,KAAA,CAAM,KAAU,KAAA,UAAA,GAAa,EAAK,GAAA,KAAA,CAAA;AAAA,YAC/C,aAAW,EAAA,IAAA;AAAA,YAEX,QAAA,EAAA;AAAA,8BAAC,GAAA,CAAA,KAAA,EAAA;AAAA,gBAAI,SAAU,EAAA,sCAAA;AAAA,eAAuC,CAAA;AAAA,8BACrD,GAAA,CAAA,KAAA,EAAA;AAAA,gBAAI,SAAU,EAAA,oCAAA;AAAA,eAAqC,CAAA;AAAA,aAAA;AAAA,WACtD,CAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,MACC,KAAA,CAAM,UAAU,QAAY,IAAA,KAAA,CAAM,UAAU,WAC3C,mBAAA,GAAA,CAAC,QAAQ,IAAR,EAAA;AAAA,QACC,SAAU,EAAA,wDAAA;AAAA,QACV,aAAA,EAAa,mBAAmB,EAAK,GAAA,KAAA,CAAA;AAAA,QACrC,GAAK,EAAA,WAAA;AAAA,QAEJ,QAAM,EAAA,KAAA,CAAA,KAAA,KAAU,WACf,mBAAA,GAAA,CAAC,iCAA8B,CAE/B,GAAA,QAAA;AAAA,OAEJ,CACE,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAA;AAEA,MAAM,kBACJ,mBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,EACE,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,sBAAO,QAAS,EAAA,EAAA,CAAA;AAAA,MAChB,MAAO,EAAA,iCAAA;AAAA,MACR,QAAA,EAAA,iBAAA;AAAA,KAED,CAAA;AAAA,oBACC,GAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,sBAAO,SAAU,EAAA,EAAA,CAAA;AAAA,MACjB,MAAO,EAAA,2CAAA;AAAA,MACR,QAAA,EAAA,cAAA;AAAA,KAED,CAAA;AAAA,oBACC,GAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,sBAAO,WAAY,EAAA,EAAA,CAAA;AAAA,MACnB,MAAO,EAAA,kCAAA;AAAA,MACR,QAAA,EAAA,UAAA;AAAA,KAED,CAAA;AAAA,oBACC,GAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,sBAAO,YAAa,EAAA,EAAA,CAAA;AAAA,MACpB,MAAO,EAAA,2CAAA;AAAA,MACR,QAAA,EAAA,iBAAA;AAAA,KAED,CAAA;AAAA,wBACC,6BAA8B,EAAA,EAAA,CAAA;AAAA,oBAC9B,GAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,sBAAO,gBAAiB,EAAA,EAAA,CAAA;AAAA,MACxB,MAAO,EAAA,sCAAA;AAAA,MACR,QAAA,EAAA,kBAAA;AAAA,KAED,CAAA;AAAA,oBACC,GAAA,CAAA,mBAAA,EAAA;AAAA,MACC,IAAA,sBAAO,gBAAiB,EAAA,EAAA,CAAA;AAAA,MACxB,MAAO,EAAA,gCAAA;AAAA,MACR,QAAA,EAAA,SAAA;AAAA,KAED,CAAA;AAAA,GAAA;AAAA,CACF,CAAA,CAAA;AAQK,MAAM,YAAY,MAAO,CAAA,MAAA;AAAA,EAC9B,UAAA;AAAA,IACE,CACE;AAAA,MACE,QAAQ,UAAa,GAAA,CAAA;AAAA,MACrB,MAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAa,WAAc,GAAA,kBAAA;AAAA,MACxB,GAAA,KAAA;AAAA,OAEL,YACG,KAAA;AACH,MAAA,MAAM,QACJ,cAAe,CAAA;AAAA,QACb,MAAA;AAAA,QACA,QAAA,EAAU,CAAC,GAAQ,KAAA;AACjB,UACE,OAAA,GAAA,CAAI,MAAQ,EAAA,OAAA,CAAQ,YACnB,EAAA,KAAA,CAAA;AAAA,SACL;AAAA,OACD,CAAK,IAAA,aAAA,CAAA;AACR,MAAM,MAAA,SAAA,GAAY,QAAQ,KAAM,CAAA,SAAA,CAAA;AAChC,MAAM,MAAA,eAAA,GAAsC,QAAQ,MAAM;AACxD,QAAA,MAAM,qBAA+C,GAAA;AAAA,UACnD,OAAS,EAAA,4BAAA;AAAA,SACX,CAAA;AAEA,QAAO,OAAA;AAAA,UACL,QAAU,EAAA,OAAA;AAAA,UACV,SAAW,EAAA,QAAA;AAAA,UACX,UAAY,EAAA;AAAA,YACV,eAAe,MAAM,CAAA;AAAA,YACrB,KAAK,qBAAqB,CAAA;AAAA,YAC1B,OAAO,UAAU,CAAA;AAAA,YACjB,KAAM,CAAA;AAAA,cACJ,GAAG,qBAAA;AAAA,cACH,QAAU,EAAA,KAAA;AAAA,cACV,SAAW,EAAA,IAAA;AAAA,cACX,SAAS,UAAW,EAAA;AAAA,aACrB,CAAA;AAAA,YACD,WAAY,EAAA;AAAA,WACd;AAAA,UACA,oBAAA,EAAsB,IAAI,IAAS,KAAA;AACjC,YAAO,OAAA,UAAA,CAAW,GAAG,IAAM,EAAA;AAAA,cACzB,cAAgB,EAAA,IAAA;AAAA,aACjB,CAAA,CAAA;AAAA,WACH;AAAA,SACF,CAAA;AAAA,OACC,EAAA,CAAC,MAAQ,EAAA,UAAU,CAAC,CAAA,CAAA;AACvB,MAAA,MAAM,MAAS,GAAA,SAAA,KAAc,KAAa,CAAA,IAAA,KAAA,CAAM,KAAU,KAAA,QAAA,CAAA;AAC1D,MAAM,MAAA;AAAA,QACJ,IAAA,EAAM,EAAE,YAAA,EAAc,WAAY,EAAA;AAAA,QAClC,QAAA;AAAA,QACA,CAAA;AAAA,QACA,CAAA;AAAA,QACA,YAAA;AAAA,UACE,WAAY,CAAA;AAAA,QACd,GAAG,eAAA;AAAA,QACH,IAAM,EAAA,MAAA;AAAA,OACP,CAAA,CAAA;AACD,MAAM,MAAA,UAAA,GAAa,OAAuB,IAAI,CAAA,CAAA;AAC9C,MAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,YAAc,EAAA,UAAA,EAAY,WAAW,CAAA,CAAA;AAChE,MAAM,MAAA,WAAA,GAAc,OAAuB,IAAI,CAAA,CAAA;AAC/C,MAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,SAAS,EAAE,CAAA,CAAA;AAGrE,MAAA,SAAA,CAAU,MAAM;AACd,QAAI,IAAA,KAAA,CAAM,UAAU,QAAU,EAAA;AAC5B,UAAA,wBAAA,CAAyB,EAAE,CAAA,CAAA;AAAA,SAC7B;AAAA,OACC,EAAA,CAAC,KAAM,CAAA,KAAK,CAAC,CAAA,CAAA;AAEhB,MAAA,SAAA,CAAU,MAAM;AAEd,QAAI,IAAA,KAAA,CAAM,UAAU,QAAU,EAAA;AAC5B,UAAA,wBAAA,CAAyB,EAAE,CAAA,CAAA;AAE3B,UAAA,OAAA;AAAA,SACF;AAGA,QAAM,MAAA,oBAAA,GAAuB,YAAY,OAAS,EAAA,aAAA;AAAA,UAChD,uCAAA;AAAA,SACF,CAAA;AAEA,QAAA,IAAI,oBAAsB,EAAA;AACxB,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAM,iBACJ,GAAA,WAAA,CAAY,OAAS,EAAA,aAAA,CAAc,iBAAiB,CAAA,CAAA;AAEtD,QAAA,wBAAA;AAAA,UACG,iBAAA,EAA0C,QAAQ,KAAS,IAAA,EAAA;AAAA,SAC9D,CAAA;AAAA,SACC,CAAC,KAAA,CAAM,KAAO,EAAA,WAAA,EAAa,wBAAwB,CAAC,CAAA,CAAA;AAEvD,MAAA,SAAA,CAAU,MAAM;AACd,QAAA,IAAI,CAAC,MAAQ,EAAA;AACX,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,IAAI,CAAC,SAAA,IAAa,KAAM,CAAA,KAAA,KAAU,QAAU,EAAA;AAC1C,UAAC,MAAA,CAAO,SAAmC,eAAgB,EAAA,CAAA;AAAA,SAC7D;AAAA,SACC,CAAC,KAAA,CAAM,KAAO,EAAA,MAAA,EAAQ,SAAS,CAAC,CAAA,CAAA;AAEnC,MAAA,eAAA,CAAgB,MAAM;AACpB,QAAI,IAAA,CAAC,MAAU,IAAA,CAAC,MAAQ,EAAA;AACtB,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AAEjB,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,IACE,MAAM,KAAU,KAAA,WAAA,IAChB,8BAA+B,CAAA,KAAA,CAAM,QAAQ,CAC7C,EAAA;AACA,YAAM,MAAA,OAAA,GAAU,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,gBAAA;AAAA,cAC9B,0BAAA;AAAA,aACF,CAAA;AAIA,YAAa,YAAA,CAAA;AAAA,cACX,uBAAuB,MAAM;AAC3B,gBAAA,MAAM,QAAmB,EAAC,CAAA;AAE1B,gBAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC1B,kBAAM,KAAA,CAAA,IAAA,CAAK,MAAO,CAAA,qBAAA,EAAuB,CAAA,CAAA;AAAA,iBAC1C,CAAA,CAAA;AAED,gBAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA;AACvD,gBAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAK,CAAA,GAAG,CAAC,CAAA,CAAA;AACtD,gBAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAK,CAAA,KAAK,CAAC,CAAA,CAAA;AACxD,gBAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAK,CAAA,MAAM,CAAC,CAAA,CAAA;AAEzD,gBAAO,OAAA;AAAA,kBACL,CAAG,EAAA,IAAA;AAAA,kBACH,CAAG,EAAA,IAAA;AAAA,kBACH,OAAO,IAAO,GAAA,IAAA;AAAA,kBACd,QAAQ,IAAO,GAAA,IAAA;AAAA,kBACf,GAAK,EAAA,IAAA;AAAA,kBACL,IAAM,EAAA,IAAA;AAAA,kBACN,MAAQ,EAAA,IAAA;AAAA,kBACR,KAAO,EAAA,IAAA;AAAA,iBACT,CAAA;AAAA,eACF;AAAA,aACD,CAAA,CAAA;AAAA,qBACQ,SAAW,EAAA;AACpB,YAAM,MAAA,QAAA,GAAW,wBAAyB,CAAA,MAAA,EAAQ,SAAS,CAAA,CAAA;AAC3D,YAAA,YAAA,CAAa,QAAQ,CAAA,CAAA;AAAA,WAChB,MAAA;AACL,YAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AAAA,WACnB;AAAA,WACC,CAAC,CAAA,CAAA;AAAA,OACH,EAAA;AAAA,QACD,SAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA;AAAA,QACA,KAAM,CAAA,KAAA;AAAA,QACN,KAAM,CAAA,QAAA;AAAA,OACP,CAAA,CAAA;AAGD,MAAA,SAAA,CAAU,MAAM;AACd,QAAI,IAAA,CAAC,MAAU,IAAA,CAAC,MAAQ,EAAA;AACtB,UAAA,OAAA;AAAA,SACF;AAEA,QAAM,MAAA,kBAAA,GAAqB,CAAC,KAAsB,KAAA;AAChD,UAAI,IAAA,CAAC,WAAW,OAAS,EAAA;AACvB,YAAA,OAAA;AAAA,WACF;AAEA,UAAA,IACE,MAAM,MACN,IAAA,CAAC,WAAW,OAAQ,CAAA,QAAA,CAAS,MAAM,MAAc,CAAA,KAChD,WAAY,CAAA,OAAA,GACT,CAAC,WAAY,CAAA,OAAA,CAAQ,SAAS,KAAM,CAAA,MAAc,IAClD,IACJ,CAAA,EAAA;AACA,YAAC,MAAA,CAAO,SAAmC,eAAgB,EAAA,CAAA;AAAA,WAC7D;AAAA,SACF,CAAA;AAEA,QAAA,UAAA,CAAW,MAAM;AACf,UAAS,QAAA,CAAA,gBAAA,CAAiB,eAAe,kBAAkB,CAAA,CAAA;AAAA,WAC1D,CAAC,CAAA,CAAA;AAEJ,QAAA,OAAO,MAAM;AACX,UAAS,QAAA,CAAA,mBAAA,CAAoB,eAAe,kBAAkB,CAAA,CAAA;AAAA,SAChE,CAAA;AAAA,OACC,EAAA,CAAC,MAAQ,EAAA,MAAM,CAAC,CAAA,CAAA;AAEnB,MAAI,IAAA,CAAC,MAAU,IAAA,CAAC,MAAQ,EAAA;AACtB,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAO,OAAA,YAAA;AAAA,wBACJ,GAAA,CAAA,eAAA,EAAA;AAAA,UACC,QAAC,kBAAA,GAAA,CAAA,cAAA,EAAA;AAAA,YAAe,MAAA;AAAA,YACd,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA;AAAA,cACC,IAAK,EAAA,SAAA;AAAA,cACL,KAAM,EAAA,YAAA;AAAA,cACN,kBAAiB,EAAA,YAAA;AAAA,cACjB,SAAW,EAAA,UAAA;AAAA,gBACT,+CAAA;AAAA,gBACA,SAAA;AAAA,eACF;AAAA,cACA,GAAK,EAAA,UAAA;AAAA,cACL,KAAO,EAAA;AAAA,gBACL,QAAU,EAAA,QAAA;AAAA,gBACV,GAAK,EAAA,CAAA;AAAA,gBACL,IAAM,EAAA,CAAA;AAAA,gBACN,SAAA,EAAW,YACP,GAAA,CAAA,YAAA,EAAe,IAAK,CAAA,KAAA,CAAM,CAAC,CAAQ,CAAA,IAAA,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAC/C,CAAA,MAAA,CAAA,GAAA,0BAAA;AAAA,eACN;AAAA,cACA,KAAO,EAAA,qBAAA;AAAA,cACP,aAAe,EAAA,wBAAA;AAAA,cACd,GAAG,KAAA;AAAA,cAEJ,QAAC,kBAAA,GAAA,CAAA,kBAAA,EAAA;AAAA,gBACC,KAAA;AAAA,gBACA,WAAA;AAAA,gBACA,UAAA;AAAA,gBAEC,QAAA,EAAA,OAAO,WAAgB,KAAA,UAAA,mBACrB,GAAA,CAAA,WAAA,EAAA;AAAA,kBAAY,QAAU,EAAA,kBAAA;AAAA,iBAAoB,CAE3C,GAAA,WAAA;AAAA,eAEJ,CAAA;AAAA,aACF,CAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,QACA,QAAS,CAAA,IAAA;AAAA,OACX,CAAA;AAAA,KACF;AAAA,GACF;AAAA,EACA;AAAA,IAME,UAAY,EAAA,mBAAA;AAAA,IAOZ,gBAAkB,EAAA,yBAAA;AAAA,IAOlB,oBAAsB,EAAA,6BAAA;AAAA,GACxB;AACF;;;;"}
1
+ {"version":3,"file":"AiToolbar.js","sources":["../../src/ai/AiToolbar.tsx"],"sourcesContent":["import {\n autoUpdate,\n type DetectOverflowOptions,\n hide,\n limitShift,\n type Middleware,\n offset,\n shift,\n useFloating,\n type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n ArrowCornerDownRightIcon,\n Button,\n CheckIcon,\n CrossIcon,\n EditIcon,\n LengthenIcon,\n QuestionMarkIcon,\n SendIcon,\n ShortcutTooltip,\n ShortenIcon,\n SparklesIcon,\n SparklesTextIcon,\n StopIcon,\n TooltipProvider,\n UndoIcon,\n useRefs,\n WarningIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport { type Editor, useEditorState } from \"@tiptap/react\";\nimport { Command, useCommandState } from \"cmdk\";\nimport type {\n ComponentProps,\n ComponentType,\n KeyboardEvent as ReactKeyboardEvent,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from \"react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type {\n AiCommands,\n AiExtensionStorage,\n AiToolbarState,\n ChainedAiCommands,\n} from \"../types\";\nimport { getDomRangeFromSelection } from \"../utils\";\nimport { DEFAULT_STATE, isContextualPromptDiffResponse } from \"./AiExtension\";\n\nexport const AI_TOOLBAR_COLLISION_PADDING = 10;\n\nexport interface AiToolbarProps\n extends Omit<ComponentProps<\"div\">, \"value\" | \"defaultValue\" | \"children\"> {\n /**\n * The Tiptap editor.\n */\n editor: Editor | null;\n\n /**\n * The vertical offset of the AI toolbar from the selection.\n */\n offset?: number;\n\n /**\n * The prompt suggestions to display below the AI toolbar.\n */\n suggestions?: ReactNode | ComponentType<PropsWithChildren>;\n}\n\ntype AiToolbarDropdownSeparatorProps = ComponentProps<\"div\">;\n\ninterface AiToolbarDropdownItemProps\n extends ComponentProps<typeof Command.Item> {\n icon?: ReactNode;\n}\n\ntype AiToolbarSuggestionsSeparatorProps = AiToolbarDropdownSeparatorProps;\n\ntype AiToolbarSuggestionsLabelProps = ComponentProps<\"span\">;\n\ninterface AiToolbarSuggestionProps extends ComponentProps<\"div\"> {\n prompt?: string;\n icon?: ReactNode;\n}\n\ninterface AiToolbarContext {\n state: AiToolbarState;\n toolbarRef: RefObject<HTMLDivElement>;\n dropdownRef: RefObject<HTMLDivElement>;\n isDropdownHidden: boolean;\n}\n\nconst AiToolbarContext = createContext<AiToolbarContext | null>(null);\n\nfunction useAiToolbarContext() {\n const context = useContext(AiToolbarContext);\n\n if (!context) {\n throw new Error(\"useAiToolbarContext must be used within an AiToolbar\");\n }\n\n return context;\n}\n\n/**\n * A custom Floating UI middleware to position/scale the toolbar:\n * - Vertically: relative to the reference (e.g. selection)\n * - Horizontally: relative to the editor\n * - Width: relative to the editor\n */\nfunction tiptapFloating(editor: Editor | null): Middleware {\n return {\n name: \"tiptap\",\n options: editor,\n fn({ elements }) {\n if (!editor) {\n return {};\n }\n\n const editorRect = editor.view.dom.getBoundingClientRect();\n\n elements.floating.style.setProperty(\n \"--lb-tiptap-editor-width\",\n `${editorRect.width}px`\n );\n elements.floating.style.setProperty(\n \"--lb-tiptap-editor-height\",\n `${editorRect.height}px`\n );\n\n return {\n x: editorRect.x,\n };\n },\n };\n}\n\n/**\n * A custom Floating UI middleware to flip the toolbar/dropdown when shifted more than 100%.\n */\nfunction flipToolbar(): Middleware {\n return {\n name: \"flipToolbar\",\n fn({ elements, middlewareData, rects }) {\n const shiftOffsetY = middlewareData.shift?.y ?? 0;\n\n if (Math.abs(shiftOffsetY) >= rects.floating.height) {\n elements.floating.setAttribute(\"data-liveblocks-ai-toolbar-flip\", \"\");\n } else {\n elements.floating.removeAttribute(\"data-liveblocks-ai-toolbar-flip\");\n }\n\n return {};\n },\n };\n}\n\nconst AiToolbarDropdownSeparator = forwardRef<\n HTMLDivElement,\n AiToolbarDropdownSeparatorProps\n>(({ className, ...props }, forwardedRef) => {\n return (\n <Command.Separator\n className={classNames(\"lb-dropdown-separator\", className)}\n {...props}\n ref={forwardedRef}\n />\n );\n});\n\nconst AiToolbarSuggestionsSeparator = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionsSeparatorProps\n>((props, forwardedRef) => {\n return <AiToolbarDropdownSeparator ref={forwardedRef} {...props} />;\n});\n\nconst AiToolbarDropdownItem = forwardRef<\n HTMLDivElement,\n AiToolbarDropdownItemProps\n>(({ children, onSelect, icon, className, ...props }, forwardedRef) => {\n return (\n <Command.Item\n className={classNames(\"lb-dropdown-item\", className)}\n onSelect={onSelect}\n {...props}\n ref={forwardedRef}\n >\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? (\n <span className=\"lb-dropdown-item-label\">{children}</span>\n ) : null}\n </Command.Item>\n );\n});\n\nconst AiToolbarSuggestionsLabel = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionsLabelProps\n>(({ children, className, ...props }, forwardedRef) => {\n return (\n <span\n ref={forwardedRef}\n className={classNames(\"lb-dropdown-label\", className)}\n {...props}\n >\n {children}\n </span>\n );\n});\n\nconst AiToolbarSuggestion = forwardRef<\n HTMLDivElement,\n AiToolbarSuggestionProps\n>(({ prompt: manualPrompt, ...props }, forwardedRef) => {\n const editor = useCurrentEditor(\"Suggestion\", \"AiToolbar\");\n\n const handleSelect = useCallback(\n (prompt: string) => {\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n manualPrompt ?? prompt\n );\n },\n [editor, manualPrompt]\n );\n\n return (\n <AiToolbarDropdownItem\n {...props}\n onSelect={handleSelect}\n ref={forwardedRef}\n />\n );\n});\n\nfunction AiToolbarReviewingSuggestions() {\n const editor = useCurrentEditor(\"ReviewingSuggestions\", \"AiToolbar\");\n const { state } = useAiToolbarContext();\n const { response } = state as Extract<AiToolbarState, { phase: \"reviewing\" }>;\n\n if (isContextualPromptDiffResponse(response)) {\n return (\n <>\n <AiToolbarDropdownItem\n icon={<CheckIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$acceptAiToolbarResponse\n }\n >\n Accept\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<UndoIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking\n }\n >\n Try again\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<CrossIcon />}\n onSelect={(editor.commands as unknown as AiCommands).$closeAiToolbar}\n >\n Discard\n </AiToolbarDropdownItem>\n </>\n );\n } else {\n return (\n <>\n <AiToolbarDropdownItem\n icon={<ArrowCornerDownRightIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$acceptAiToolbarResponse\n }\n >\n Insert below\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<UndoIcon />}\n onSelect={\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking\n }\n >\n Try again\n </AiToolbarDropdownItem>\n <AiToolbarDropdownItem\n icon={<CrossIcon />}\n onSelect={(editor.commands as unknown as AiCommands).$closeAiToolbar}\n >\n Discard\n </AiToolbarDropdownItem>\n </>\n );\n }\n}\n\nfunction AiToolbarCustomPromptContent() {\n const editor = useCurrentEditor(\"CustomPromptContent\", \"AiToolbar\");\n const aiName = (editor.storage.liveblocksAi as AiExtensionStorage).name;\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const { state, dropdownRef, isDropdownHidden } = useAiToolbarContext();\n const { customPrompt } = state as Exclude<\n AiToolbarState,\n { phase: \"closed\" }\n >;\n const isCustomPromptEmpty = useMemo(\n () => customPrompt.trim() === \"\",\n [customPrompt]\n );\n\n useLayoutEffect(\n () => {\n requestAnimationFrame(() => {\n const textArea = textAreaRef.current;\n\n if (!textArea) {\n return;\n }\n\n textArea.focus();\n textArea.setSelectionRange(\n textArea.value.length,\n textArea.value.length\n );\n });\n },\n [] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const handlePromptKeyDown = (\n event: ReactKeyboardEvent<HTMLTextAreaElement>\n ) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n\n if (event.shiftKey) {\n // If the shift key is pressed, add a new line\n (editor.commands as unknown as AiCommands)._updateAiToolbarCustomPrompt(\n (customPrompt) => customPrompt + \"\\n\"\n );\n } else {\n const selectedDropdownItem = dropdownRef.current?.querySelector(\n \"[role='option'][data-selected='true']\"\n ) as HTMLElement | null;\n\n if (!isDropdownHidden && selectedDropdownItem) {\n // If there's a selected dropdown item, select it\n selectedDropdownItem.click();\n } else if (!isCustomPromptEmpty) {\n // Otherwise, submit the custom prompt\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n customPrompt,\n state.phase === \"reviewing\"\n );\n }\n }\n }\n };\n\n const handleCustomPromptChange = useCallback(\n (customPrompt: string) => {\n (editor.commands as unknown as AiCommands)._updateAiToolbarCustomPrompt(\n customPrompt\n );\n },\n [editor]\n );\n\n const handleSendClick = useCallback(() => {\n if (isCustomPromptEmpty) {\n return;\n }\n\n (editor.commands as unknown as AiCommands).$startAiToolbarThinking(\n customPrompt,\n state.phase === \"reviewing\"\n );\n }, [editor, customPrompt, isCustomPromptEmpty, state.phase]);\n\n return (\n <div className=\"lb-tiptap-ai-toolbar-content\">\n <span className=\"lb-icon-container lb-tiptap-ai-toolbar-icon-container\">\n <SparklesIcon />\n </span>\n <div\n className=\"lb-tiptap-ai-toolbar-custom-prompt-container\"\n data-value={customPrompt}\n >\n <Command.Input\n value={customPrompt}\n onValueChange={handleCustomPromptChange}\n asChild\n >\n <textarea\n ref={textAreaRef}\n className=\"lb-tiptap-ai-toolbar-custom-prompt\"\n placeholder={`Ask ${aiName} anything…`}\n onKeyDown={handlePromptKeyDown}\n rows={1}\n autoFocus\n />\n </Command.Input>\n </div>\n <div className=\"lb-tiptap-ai-toolbar-actions\">\n <ShortcutTooltip content={`Ask ${aiName}`} shortcut=\"Enter\">\n <Button\n className=\"lb-tiptap-ai-toolbar-action\"\n variant=\"primary\"\n aria-label={`Ask ${aiName}`}\n icon={<SendIcon />}\n disabled={isCustomPromptEmpty}\n onClick={handleSendClick}\n />\n </ShortcutTooltip>\n </div>\n </div>\n );\n}\n\nfunction AiToolbarAsking() {\n const { state } = useAiToolbarContext();\n const { error } = state as Exclude<AiToolbarState, { phase: \"closed\" }>;\n\n return (\n <>\n <AiToolbarCustomPromptContent />\n {error ? (\n <div className=\"lb-tiptap-ai-toolbar-error\">\n <span className=\"lb-icon-container\">\n <WarningIcon />\n </span>\n There was a problem with your request.\n </div>\n ) : null}\n </>\n );\n}\n\nfunction AiToolbarThinking() {\n const editor = useCurrentEditor(\"AiToolbarThinking\", \"AiToolbar\");\n const contentRef = useRef<HTMLDivElement>(null);\n const aiName = (editor.storage.liveblocksAi as AiExtensionStorage).name;\n\n const handleAbort = useCallback(() => {\n (editor.commands as unknown as AiCommands).$cancelAiToolbarThinking();\n }, [editor]);\n\n // Focus the toolbar content and clear the current window selection while thinking\n useLayoutEffect(() => {\n contentRef.current?.focus();\n window.getSelection()?.removeAllRanges();\n }, []);\n\n return (\n <>\n <div\n className=\"lb-tiptap-ai-toolbar-content\"\n tabIndex={0}\n ref={contentRef}\n >\n <span className=\"lb-icon-container lb-tiptap-ai-toolbar-icon-container\">\n <SparklesIcon />\n </span>\n <div className=\"lb-tiptap-ai-toolbar-thinking\">\n {aiName} is thinking…\n </div>\n <div className=\"lb-tiptap-ai-toolbar-actions\">\n <ShortcutTooltip content=\"Abort response\" shortcut=\"Escape\">\n <Button\n className=\"lb-tiptap-ai-toolbar-action\"\n variant=\"secondary\"\n aria-label=\"Abort response\"\n icon={<StopIcon />}\n onClick={handleAbort}\n />\n </ShortcutTooltip>\n </div>\n </div>\n </>\n );\n}\n\nfunction AiToolbarReviewing() {\n const { state } = useAiToolbarContext();\n const { response } = state as Extract<AiToolbarState, { phase: \"reviewing\" }>;\n\n return (\n <>\n {response.type === \"other\" ? (\n <div className=\"lb-tiptap-ai-toolbar-response-container\">\n <div className=\"lb-tiptap-ai-toolbar-response\">{response.text}</div>\n </div>\n ) : null}\n <AiToolbarCustomPromptContent />\n </>\n );\n}\n\nfunction AiToolbarContainer({\n state,\n toolbarRef,\n dropdownRef,\n children,\n}: PropsWithChildren<{\n state: AiToolbarState;\n toolbarRef: RefObject<HTMLDivElement>;\n dropdownRef: RefObject<HTMLDivElement>;\n}>) {\n const editor = useCurrentEditor(\"AiToolbarContainer\", \"AiToolbar\");\n const customPrompt = state.customPrompt;\n const isCustomPromptMultiline = useMemo(\n () => customPrompt?.includes(\"\\n\"),\n [customPrompt]\n );\n const hasDropdownItems = useCommandState(\n (state) => state.filtered.count > 0\n ) as boolean;\n const isDropdownHidden = isCustomPromptMultiline || !hasDropdownItems;\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!event.defaultPrevented && event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n\n if (state.phase === \"thinking\") {\n (editor.commands as unknown as AiCommands).$cancelAiToolbarThinking();\n } else {\n (editor.chain() as ChainedAiCommands).$closeAiToolbar().focus().run();\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [editor, state.phase]);\n\n return (\n <AiToolbarContext.Provider\n value={{\n state,\n toolbarRef,\n dropdownRef,\n isDropdownHidden,\n }}\n >\n <div className=\"lb-tiptap-ai-toolbar-container\">\n <div className=\"lb-elevation lb-tiptap-ai-toolbar\">\n {state.phase === \"asking\" ? (\n <AiToolbarAsking />\n ) : state.phase === \"thinking\" ? (\n <AiToolbarThinking />\n ) : state.phase === \"reviewing\" ? (\n <AiToolbarReviewing />\n ) : null}\n </div>\n <div\n className=\"lb-tiptap-ai-toolbar-halo\"\n data-active={state.phase === \"thinking\" ? \"\" : undefined}\n aria-hidden\n >\n <div className=\"lb-tiptap-ai-toolbar-halo-horizontal\" />\n <div className=\"lb-tiptap-ai-toolbar-halo-vertical\" />\n </div>\n </div>\n {state.phase === \"asking\" || state.phase === \"reviewing\" ? (\n <Command.List\n className=\"lb-elevation lb-dropdown lb-tiptap-ai-toolbar-dropdown\"\n data-hidden={isDropdownHidden ? \"\" : undefined}\n ref={dropdownRef}\n >\n {state.phase === \"reviewing\" ? (\n <AiToolbarReviewingSuggestions />\n ) : (\n children\n )}\n </Command.List>\n ) : null}\n </AiToolbarContext.Provider>\n );\n}\n\nconst defaultSuggestions = (\n <>\n <AiToolbarSuggestion\n icon={<EditIcon />}\n prompt=\"Improve the quality of the text\"\n >\n Improve writing\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<CheckIcon />}\n prompt=\"Fix spelling & grammar errors in the text\"\n >\n Fix mistakes\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<ShortenIcon />}\n prompt=\"Shorten the text, simplifying it\"\n >\n Simplify\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<LengthenIcon />}\n prompt=\"Lengthen the text, going into more detail\"\n >\n Add more detail\n </AiToolbarSuggestion>\n <AiToolbarSuggestionsSeparator />\n <AiToolbarSuggestion\n icon={<SparklesTextIcon />}\n prompt=\"Continue writing from the text's end\"\n >\n Continue writing\n </AiToolbarSuggestion>\n <AiToolbarSuggestion\n icon={<QuestionMarkIcon />}\n prompt=\"Explain what the text is about\"\n >\n Explain\n </AiToolbarSuggestion>\n </>\n);\n\n/**\n * @beta\n *\n * A floating AI toolbar attached to the editor.\n */\nexport const AiToolbar = Object.assign(\n forwardRef<HTMLDivElement, AiToolbarProps>(\n (\n {\n offset: sideOffset = 6,\n editor,\n className,\n suggestions: Suggestions = defaultSuggestions,\n ...props\n },\n forwardedRef\n ) => {\n const state =\n useEditorState({\n editor,\n selector: (ctx) => {\n return (\n ctx.editor?.storage.liveblocksAi as AiExtensionStorage | undefined\n )?.state;\n },\n }) ?? DEFAULT_STATE;\n const selection = editor?.state.selection;\n const floatingOptions: UseFloatingOptions = useMemo(() => {\n const detectOverflowOptions: DetectOverflowOptions = {\n padding: AI_TOOLBAR_COLLISION_PADDING,\n };\n\n return {\n strategy: \"fixed\",\n placement: \"bottom\",\n middleware: [\n tiptapFloating(editor),\n hide(detectOverflowOptions),\n offset(sideOffset),\n shift({\n ...detectOverflowOptions,\n mainAxis: false,\n crossAxis: true,\n limiter: limitShift(),\n }),\n flipToolbar(),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n };\n }, [editor, sideOffset]);\n const isOpen = selection !== undefined && state.phase !== \"closed\";\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n isPositioned,\n } = useFloating({\n ...floatingOptions,\n open: isOpen,\n });\n const toolbarRef = useRef<HTMLDivElement>(null);\n const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [selectedDropdownValue, setSelectedDropdownValue] = useState(\"\");\n\n // Reset the selected dropdown value when the toolbar is closed\n useEffect(() => {\n if (state.phase === \"closed\") {\n setSelectedDropdownValue(\"\");\n }\n }, [state.phase]);\n\n useEffect(() => {\n // Reset the selected dropdown value when the dropdown is closed\n if (state.phase === \"closed\") {\n setSelectedDropdownValue(\"\");\n\n return;\n }\n\n // Otherwise, make sure a dropdown item is selected when moving between phases\n const selectedDropdownItem = dropdownRef.current?.querySelector(\n \"[role='option'][data-selected='true']\"\n );\n\n if (selectedDropdownItem) {\n return;\n }\n\n const firstDropdownItem =\n dropdownRef.current?.querySelector(\"[role='option']\");\n\n setSelectedDropdownValue(\n (firstDropdownItem as HTMLElement | null)?.dataset.value ?? \"\"\n );\n }, [state.phase, dropdownRef, setSelectedDropdownValue]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (!selection && state.phase !== \"closed\") {\n (editor.commands as unknown as AiCommands).$closeAiToolbar();\n }\n }, [state.phase, editor, selection]);\n\n useLayoutEffect(() => {\n if (!editor || !isOpen) {\n return;\n }\n\n setReference(null);\n\n setTimeout(() => {\n if (\n state.phase === \"reviewing\" &&\n isContextualPromptDiffResponse(state.response)\n ) {\n const changes = editor.view.dom.querySelectorAll(\n \"ychange[data-liveblocks]\"\n );\n\n // When diffs are displayed, we manually calculate bounds around all the\n // rendered changes instead of using the selection\n setReference({\n getBoundingClientRect: () => {\n const rects: DOMRect[] = [];\n\n changes.forEach((change) => {\n rects.push(change.getBoundingClientRect());\n });\n\n const minX = Math.min(...rects.map((rect) => rect.left));\n const minY = Math.min(...rects.map((rect) => rect.top));\n const maxX = Math.max(...rects.map((rect) => rect.right));\n const maxY = Math.max(...rects.map((rect) => rect.bottom));\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n top: minY,\n left: minX,\n bottom: maxY,\n right: maxX,\n };\n },\n });\n } else if (selection) {\n const domRange = getDomRangeFromSelection(editor, selection);\n setReference(domRange);\n } else {\n setReference(null);\n }\n }, 0);\n }, [\n selection,\n editor,\n isOpen,\n setReference,\n state.phase,\n state.response,\n ]);\n\n // Close the toolbar when clicking anywhere outside of it\n useEffect(() => {\n if (!editor || !isOpen) {\n return;\n }\n\n const handleOutsideEvent = (event: MouseEvent) => {\n if (!toolbarRef.current) {\n return;\n }\n\n if (\n event.target &&\n !toolbarRef.current.contains(event.target as Node) &&\n (dropdownRef.current\n ? !dropdownRef.current.contains(event.target as Node)\n : true)\n ) {\n (editor.commands as unknown as AiCommands).$closeAiToolbar();\n }\n };\n\n setTimeout(() => {\n document.addEventListener(\"pointerdown\", handleOutsideEvent);\n }, 0);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handleOutsideEvent);\n };\n }, [editor, isOpen]);\n\n if (!editor || !isOpen) {\n return null;\n }\n\n return createPortal(\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <Command\n role=\"toolbar\"\n label=\"AI toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\n \"lb-root lb-portal lb-tiptap-ai-toolbar-portal\",\n className\n )}\n ref={mergedRefs}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n }}\n value={selectedDropdownValue}\n onValueChange={setSelectedDropdownValue}\n {...props}\n >\n <AiToolbarContainer\n state={state}\n dropdownRef={dropdownRef}\n toolbarRef={toolbarRef}\n >\n {typeof Suggestions === \"function\" ? (\n <Suggestions children={defaultSuggestions} />\n ) : (\n Suggestions\n )}\n </AiToolbarContainer>\n </Command>\n </EditorProvider>\n </TooltipProvider>,\n document.body\n );\n }\n ),\n {\n /**\n * @beta\n *\n * A prompt suggestion displayed in the AI toolbar.\n */\n Suggestion: AiToolbarSuggestion,\n\n /**\n * @beta\n *\n * A label to describe a group of prompt suggestions displayed in the AI toolbar.\n */\n SuggestionsLabel: AiToolbarSuggestionsLabel,\n\n /**\n * @beta\n *\n * A separator between groups of prompt suggestions displayed in the AI toolbar.\n */\n SuggestionsSeparator: AiToolbarSuggestionsSeparator,\n }\n);\n"],"names":["customPrompt","state"],"mappings":"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"}
package/dist/version.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const PKG_NAME = "@liveblocks/react-tiptap";
4
- const PKG_VERSION = typeof "2.25.0-aiprivatebeta8" === "string" && "2.25.0-aiprivatebeta8";
4
+ const PKG_VERSION = typeof "2.25.0-aiprivatebeta9" === "string" && "2.25.0-aiprivatebeta9";
5
5
  const PKG_FORMAT = typeof "cjs" === "string" && "cjs";
6
6
 
7
7
  exports.PKG_FORMAT = PKG_FORMAT;
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const PKG_NAME = "@liveblocks/react-tiptap";
2
- const PKG_VERSION = typeof "2.25.0-aiprivatebeta8" === "string" && "2.25.0-aiprivatebeta8";
2
+ const PKG_VERSION = typeof "2.25.0-aiprivatebeta9" === "string" && "2.25.0-aiprivatebeta9";
3
3
  const PKG_FORMAT = typeof "esm" === "string" && "esm";
4
4
 
5
5
  export { PKG_FORMAT, PKG_NAME, PKG_VERSION };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liveblocks/react-tiptap",
3
- "version": "2.25.0-aiprivatebeta8",
3
+ "version": "2.25.0-aiprivatebeta9",
4
4
  "description": "An integration of TipTap + React to enable collaboration, comments, live cursors, and more with Liveblocks.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -43,11 +43,11 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@floating-ui/react-dom": "^2.1.2",
46
- "@liveblocks/client": "2.25.0-aiprivatebeta8",
47
- "@liveblocks/core": "2.25.0-aiprivatebeta8",
48
- "@liveblocks/react": "2.25.0-aiprivatebeta8",
49
- "@liveblocks/react-ui": "2.25.0-aiprivatebeta8",
50
- "@liveblocks/yjs": "2.25.0-aiprivatebeta8",
46
+ "@liveblocks/client": "2.25.0-aiprivatebeta9",
47
+ "@liveblocks/core": "2.25.0-aiprivatebeta9",
48
+ "@liveblocks/react": "2.25.0-aiprivatebeta9",
49
+ "@liveblocks/react-ui": "2.25.0-aiprivatebeta9",
50
+ "@liveblocks/yjs": "2.25.0-aiprivatebeta9",
51
51
  "@radix-ui/react-select": "^2.1.2",
52
52
  "@radix-ui/react-toggle": "^1.1.0",
53
53
  "@tiptap/core": "^2.7.2",