{"version":3,"file":"index.mjs","names":["focusNextElement","focusableSelectors","focusableElements","Array","from","document","querySelectorAll","HTMLElement","join","filter","el","offsetParent","currentIndex","indexOf","activeElement","nextElement","focus","VariantProps","cva","toolbarVariants","variants","sticky","mobileOnly","allDevice","false","visible","always","custom","desktopOnly","defaultVariants","ToolbarVariantProps","defaultContentEditableStyle","chatContentEditableStyle","contentEditableStyles","normal","withoutToolbarOnMobile","ElementFormatType","ReactNode","createContext","useCallback","useContext","useMemo","useState","blockTypes","const","BlockType","elementFormats","initialToolbarState","canUndo","canRedo","isBold","isItalic","isUnderline","isLink","blockType","elementFormat","ToolbarState","ToolbarStateKey","ToolbarStateValue","Key","ContextShape","toolbarState","updateToolbarState","key","value","Context","undefined","ToolbarContext","t0","$","_c","children","setToolbarState","t1","Symbol","for","prev","t2","contextValue","t3","useToolbarState","context","Error","$isAtNodeEnd","ElementNode","RangeSelection","TextNode","getSelectedNode","selection","anchor","focus","anchorNode","getNode","focusNode","isBackward","INSERT_CHECK_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_UNORDERED_LIST_COMMAND","HeadingTagType","$createHeadingNode","$createQuoteNode","$setBlocksType","LexicalEditor","$createParagraphNode","$getSelection","formatParagraph","editor","update","selection","formatHeading","blockType","headingSize","formatBulletList","dispatchCommand","undefined","formatCheckList","formatNumberedList","formatQuote","LexicalEditor","BlockType","DropdownMenu","DropdownMenuItem","Button","clsx","formatBulletList","formatHeading","formatParagraph","formatQuote","useTranslate","Props","blockType","editor","isFocusable","icons","bullet","check","h1","h2","h3","number","paragraph","quote","BlockFormatDropdown","t0","$","_c","t1","undefined","translate","t2","t3","t4","t5","Symbol","for","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","ElementFormatType","LexicalEditor","FORMAT_ELEMENT_COMMAND","DropdownMenu","DropdownMenuItem","Button","useTranslate","clsx","Props","editor","value","isFocusable","icons","left","center","right","justify","start","end","ElementFormatDropdown","t0","$","_c","t1","undefined","translate","t2","t3","t4","t5","Symbol","for","t6","t7","t8","t9","dispatchCommand","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","useLexicalComposerContext","$findMatchingParent","$getNearestNodeOfType","mergeRegister","clsx","$getSelection","$isElementNode","$isRangeSelection","$isRootOrShadowRoot","CAN_REDO_COMMAND","CAN_UNDO_COMMAND","COMMAND_PRIORITY_CRITICAL","FORMAT_TEXT_COMMAND","REDO_COMMAND","SELECTION_CHANGE_COMMAND","UNDO_COMMAND","INSERT_HORIZONTAL_RULE_COMMAND","ButtonProps","Button","Dispatch","useCallback","useEffect","useRef","useState","useTranslate","focusNextElement","ToolbarVariantProps","toolbarVariants","BlockType","blockTypes","useToolbarState","getSelectedNode","$isLinkNode","TOGGLE_LINK_COMMAND","$isListNode","ListNode","$isHeadingNode","BlockFormatDropdown","ElementFormatDropdown","Divider","$","_c","t0","Symbol","for","buttonBaseProps","label","selected","isFocusable","tabIndex","color","variant","icon","type","Props","className","setIsLinkEditMode","extendedToolbar","ToolbarPlugin","sticky","visible","editor","toolbarRef","setIsFocusable","translate","toolbarState","updateToolbarState","t1","selection","anchorNode","anchor","getNode","element","getKey","_temp","getTopLevelElementOrThrow","elementKey","elementDOM","getElementByKey","node","parent_0","getParent","isLink","parent","parentList","getListType","type_0","getTag","getType","includes","matchingParent","_temp2","getFormatType","hasFormat","$updateToolbar","t2","t3","registerUpdateListener","t4","editorState","read","registerCommand","_payload","_newEditor","console","error","payload","payload_0","dispatchCommand","insertLink","t5","t6","t7","_temp3","t8","t9","t10","t11","canUndo","t12","undefined","t13","t14","t15","t16","canRedo","t17","t18","t19","t20","t21","blockType","elementFormat","t22","isBold","t23","t24","t25","t26","isItalic","t27","t28","t29","t30","isUnderline","t31","t32","t33","t34","t35","t36","t37","t38","f","parentNode","isInline","e","useLexicalComposerContext","useEffect","useRef","debounce","WysiwygValue","Props","wait","onChange","value","LazyOnChangePlugin","editor","onChangeRef","current","notifyChange","state","getEditorState","toJSON","debouncedNotifyChange","unregister","registerUpdateListener","cancel","AutoLinkPlugin","createLinkMatcherWithRegExp","URL_REGEX","EMAIL_REGEX","MATCHERS","text","startsWith","CustomAutoLinkPlugin","$","_c","t0","Symbol","for","SUPPORTED_URL_PROTOCOLS","Set","sanitizeUrl","url","parsedUrl","URL","has","protocol","urlRegExp","RegExp","validateUrl","test","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPositionForLinkEditor","targetRect","DOMRect","floatingElem","HTMLElement","anchorElem","verticalGap","horizontalOffset","scrollerElem","parentElement","style","opacity","transform","floatingElemRect","getBoundingClientRect","anchorElementRect","editorScrollerRect","top","left","height","width","right","useLexicalComposerContext","$findMatchingParent","mergeRegister","BaseSelection","LexicalEditor","$getSelection","$isLineBreakNode","$isNodeSelection","$isRangeSelection","CLICK_COMMAND","COMMAND_PRIORITY_CRITICAL","COMMAND_PRIORITY_HIGH","COMMAND_PRIORITY_LOW","getDOMSelection","KEY_ESCAPE_COMMAND","SELECTION_CHANGE_COMMAND","Dispatch","useCallback","useEffect","useRef","useState","getSelectedNode","$createLinkNode","$isAutoLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","createPortal","Input","sanitizeUrl","setFloatingElemPositionForLinkEditor","Button","proseLinkVariant","Dialog","clsx","FloatingOverlay","preventDefault","event","React","KeyboardEvent","HTMLInputElement","MouseEvent","HTMLElement","FloatingLinkEditorProps","floatingPosition","editor","isLink","setIsLink","anchorElem","isLinkEditMode","setIsLinkEditMode","FloatingLinkEditor","t0","$","_c","t1","undefined","editorRef","inputRef","linkUrl","setLinkUrl","editedLinkUrl","setEditedLinkUrl","lastSelection","setLastSelection","t2","selection","node","linkParent","getURL","nodes","getNodes","length","node_0","parent","getParent","editorElem","current","nativeSelection","_window","activeElement","document","rootElement","getRootElement","isEditable","domRect","nodes_0","element","getElementByKey","getKey","getBoundingClientRect","contains","anchorNode","focusNode","parentElement","y","className","$updateLinkEditor","t3","t4","scrollerElem","update","getEditorState","read","window","addEventListener","removeEventListener","t5","t6","registerUpdateListener","t7","editorState","registerCommand","t8","t9","focus","t10","handleLinkSubmission","monitorInputInteraction","key","event_0","dispatchCommand","selection_0","parent_0","linkNode","rel","__rel","target","__target","title","__title","replace","t11","onClickOverlay","t12","e","value","event_1","body","t13","FloatingLinkEditorPluginProps","HTMLDivElement","FloatingLinkEditorPlugin","$updateToolbar","focusLinkNode","focusAutoLinkNode","badNode","filter","_temp","find","autoLinkNode","is","getIsUnlinked","node_1","_temp2","payload","node_2","linkNode_0","metaKey","ctrlKey","open","LinkPlugin","LexicalLinkPlugin","validateUrl","Props","hasLinkAttributes","CustomLinkPlugin","t0","$","_c","t1","undefined","t2","rel","target","t3","AutoLinkNode","LinkNode","ListItemNode","ListNode","HeadingNode","QuoteNode","DOMExportOutput","DOMExportOutputMap","Klass","LexicalEditor","LexicalNode","isHTMLElement","ParagraphNode","TextNode","removeStylesExportDOM","editor","target","output","exportDOM","element","el","querySelectorAll","removeAttribute","style","getAttribute","textAlign","match","trim","HTMLElement","exportMap","Map","DOMConversionMap","$isTextNode","TextNode","MIN_ALLOWED_FONT_SIZE","MAX_ALLOWED_FONT_SIZE","parseAllowedFontSize","input","match","n","Number","parseAllowedColor","test","getExtraStyles","element","HTMLElement","extraStyles","fontSize","style","backgroundColor","color","constructImportMap","importMap","tag","fn","Object","entries","importDOM","importNode","importer","conversion","output","forChild","undefined","after","node","child","parent","textNode","setStyle","getStyle","InitialConfigType","exportMap","constructImportMap","ParagraphNode","HeadingNode","QuoteNode","LinkNode","AutoLinkNode","ListItemNode","ListNode","HorizontalRuleNode","editorConfig","Pick","html","export","import","namespace","nodes","onError","error","LexicalEditor","SerializedEditorState","$getRoot","$insertNodes","$setSelection","createEditor","$generateHtmlFromNodes","$generateNodesFromDOM","editorConfig","importHtmlIntoEditor","initialHtml","undefined","editor","update","$loadFromHtml","htmlContent","parser","DOMParser","dom","parseFromString","nodes","root","getChildren","forEach","node","remove","stateToHtml","state","namespace","theme","html","onError","error","parsedState","parseEditorState","setEditorState","read","ReactNode","RefObject","useEffect","useImperativeHandle","useRef","useState","clsx","LexicalEditor","SerializedEditorState","$getRoot","InitialConfigType","LexicalComposer","RichTextPlugin","ContentEditable","LexicalErrorBoundary","EditorRefPlugin","HistoryPlugin","ListPlugin","HorizontalRulePlugin","ToolbarPlugin","LazyOnChangePlugin","CustomAutoLinkPlugin","FloatingLinkEditorPlugin","CustomLinkPlugin","editorConfig","$loadFromHtml","ToolbarVariantProps","contentEditableStyles","ToolbarContext","WysiwygValue","Props","id","extendedToolbar","floatingPosition","defaultValue","disabled","readOnly","proseCompact","contentEditableBaseStyle","contentEditableClassName","containerClassName","toolbarSticky","toolbarVisible","ref","WysiwygRef","debounceChange","onChange","value","children","readValue","editor","state","getEditorState","toJSON","getValue","setHtml","html","fireEvent","getState","setState","clear","Wysiwyg","t0","$","_c","t1","t2","t3","t4","t5","t6","t7","undefined","t8","editable","editorState","JSON","stringify","fullInitialConfig","editorRef","t10","t9","current","setEditable","floatingAnchorElem","setFloatingAnchorElem","isLinkEditMode","setIsLinkEditMode","t11","Symbol","for","floatingAnchorElem_0","onRef","t12","getEditor","Error","t13","notifyChange","editor_0","t14","editor_1","nextHtml","t15","editor_2","update","t16","fireEvent_0","editor_3","parsedEditorState","parseEditorState","setEditorState","t17","fireEvent_1","editor_4","_temp2","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","root","getChildren","forEach","_temp","node","remove","createEditor","SerializedEditorState","editorConfig","isPlausibleLexicalState","state","root","type","Array","isArray","children","isValidLexicalState","editor","onError","err","parseEditorState","SerializedEditorState","z","isPlausibleLexicalState","WysiwygValue","html","state","maxContentBytes","wysiwygSchema","object","optional","string","custom","check","refine","JSON","stringify","length","parseStringifiedWysiwygValue","payload","parse","sortKeysReplacer","_key","value","Array","isArray","Object","keys","Record","sort","reduce","sorted","key","serializeWysiwygValue","isWysiwygStateEmpty","root","children","useField","useControl","FieldName","Field","FieldProps","RefObject","ToolbarVariantProps","WysiwygRef","Wysiwyg","parseStringifiedWysiwygValue","serializeWysiwygValue","WysiwygValue","Props","Omit","name","ref","debounceChange","toolbarSticky","contentEditableClassName","containerClassName","disabled","readOnly","WysiwygField","id","forcedId","rest","field","itemErrors","Object","values","fieldErrors","flat","errors","length","undefined","control","defaultValue","parse","payload","serialize","handleChange","value","change","register","key","useMemo","clsx","stateToHtml","WysiwygValue","Props","value","proseCompact","className","WysiwygReader","t0","$","_c","t1","undefined","t2","html","state","t3","t4","t5","t6","__html","t7","SerializedEditorState","isStateEmpty","state","children","root","Array","every","node","length","useLexicalComposerContext","CAN_USE_BEFORE_INPUT","IS_APPLE_WEBKIT","IS_IOS","IS_SAFARI","$getSelection","$isRangeSelection","COMMAND_PRIORITY_CRITICAL","KEY_ENTER_COMMAND","useEffect","SubmitOnEnterPluginProps","submitOnShiftOrCtrlEnter","SubmitOnEnterPlugin","t0","$","_c","t1","undefined","editor","t2","t3","registerCommand","event","selection","preventDefault","shiftKey","ctrlKey","form","document","activeElement","closest","requestSubmit"],"sources":["../../../../src/components/fields/wysiwyg/utils/dom.ts","../../../../src/components/fields/wysiwyg/style.ts","../../../../src/components/fields/wysiwyg/ToolbarContext.tsx","../../../../src/components/fields/wysiwyg/utils/getSelectedNode.ts","../../../../src/components/fields/wysiwyg/utils/formatters.ts","../../../../src/components/fields/wysiwyg/components/BlockFormatDropdown.tsx","../../../../src/components/fields/wysiwyg/components/ElementFormatDropdown.tsx","../../../../src/components/fields/wysiwyg/plugins/ToolbarPlugin.tsx","../../../../src/components/fields/wysiwyg/plugins/LazyOnChangePlugin.tsx","../../../../src/components/fields/wysiwyg/plugins/AutoLinkPlugin.tsx","../../../../src/components/fields/wysiwyg/utils/url.ts","../../../../src/components/fields/wysiwyg/utils/setFloatingElemPositionForLinkEditor.ts","../../../../src/components/fields/wysiwyg/plugins/FloatingLinkEditorPlugin.tsx","../../../../src/components/fields/wysiwyg/plugins/LinkPlugin.tsx","../../../../src/components/fields/wysiwyg/parsers/exportMap.ts","../../../../src/components/fields/wysiwyg/parsers/importMap.ts","../../../../src/components/fields/wysiwyg/config/editor.ts","../../../../src/components/fields/wysiwyg/config/html.ts","../../../../src/components/fields/wysiwyg/Wysiwyg.tsx","../../../../src/components/fields/wysiwyg/config/validation.ts","../../../../src/components/fields/wysiwyg/types.ts","../../../../src/components/fields/wysiwyg/WysiwygField.tsx","../../../../src/components/fields/wysiwyg/WysiwygReader.tsx","../../../../src/components/fields/wysiwyg/config/state.ts","../../../../src/components/fields/wysiwyg/plugins/SubmitOnEnterPlugin.tsx"],"sourcesContent":["export function focusNextElement() {\n  const focusableSelectors = [\n    \"button:not([disabled])\",\n    \"[href]\",\n    \"input:not([disabled])\",\n    \"select:not([disabled])\",\n    \"textarea:not([disabled])\",\n    '[tabindex]:not([tabindex=\"-1\"])',\n  ];\n\n  const focusableElements = Array.from(\n    document.querySelectorAll<HTMLElement>(focusableSelectors.join(\",\")),\n  ).filter((el) => el.offsetParent !== null);\n\n  const currentIndex = focusableElements.indexOf(document.activeElement as HTMLElement);\n  const nextElement = focusableElements[currentIndex + 1];\n\n  if (nextElement) {\n    nextElement.focus();\n  }\n}\n","import type { VariantProps } from \"class-variance-authority\";\nimport { cva } from \"class-variance-authority\";\n\nexport const toolbarVariants = cva(\n  \"p-1 border-custom-2 border gap-1 bg-gray-0/40 overflow-x-scroll\",\n  {\n    variants: {\n      sticky: {\n        mobileOnly: \"max-lg:sticky max-lg:top-0 max-lg:backdrop-blur-xs lg:rounded-t-2xl\",\n        allDevice: \"max-lg:sticky max-lg:top-0 max-lg:backdrop-blur-xs lg:rounded-t-2xl\",\n        false: \"\",\n      },\n      visible: {\n        always: \"flex\",\n        custom: \"\",\n        desktopOnly: \"hidden lg:flex rounded-t-2xl\",\n      },\n    },\n    defaultVariants: {\n      sticky: \"mobileOnly\",\n      visible: \"always\",\n    },\n  },\n);\nexport type ToolbarVariantProps = VariantProps<typeof toolbarVariants>;\n\nexport const defaultContentEditableStyle =\n  \"p8n-editor-input border-custom-2 rounded-b-2xl border border-t-0 p-2 -outline-offset-2\";\n\nexport const chatContentEditableStyle =\n  \"p8n-editor-input border-custom-2 rounded-2xl border px-2 py-1 -outline-offset-2 lg:py-2 lg:border-t-0 lg:rounded-t-none\";\n\nexport const contentEditableStyles = {\n  normal: \"p8n-editor-input border-custom-2 rounded-b-2xl border border-t-0 p-2 -outline-offset-2\",\n  withoutToolbarOnMobile:\n    \"p8n-editor-input border-custom-2 rounded-2xl border px-2 py-1 -outline-offset-2 lg:py-2 lg:border-t-0 lg:rounded-t-none\",\n};\n","import type { ElementFormatType } from \"lexical\";\nimport type { ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useMemo, useState } from \"react\";\n\nexport const blockTypes = [\n  \"h1\",\n  \"h2\",\n  \"h3\",\n  \"paragraph\",\n  \"number\",\n  \"bullet\",\n  \"check\",\n  \"quote\",\n] as const;\nexport type BlockType = (typeof blockTypes)[number];\n\nexport const elementFormats = [\"center\", \"end\", \"justify\", \"left\", \"right\", \"start\"];\n\nconst initialToolbarState = {\n  canUndo: false,\n  canRedo: false,\n  isBold: false,\n  isItalic: false,\n  isUnderline: false,\n  isLink: false,\n  blockType: \"paragraph\" as BlockType,\n  elementFormat: \"left\" as ElementFormatType,\n};\n\ntype ToolbarState = typeof initialToolbarState;\ntype ToolbarStateKey = keyof ToolbarState;\ntype ToolbarStateValue<Key extends ToolbarStateKey> = ToolbarState[Key];\n\ntype ContextShape = {\n  toolbarState: ToolbarState;\n  updateToolbarState<Key extends ToolbarStateKey>(key: Key, value: ToolbarStateValue<Key>): void;\n};\n\nconst Context = createContext<ContextShape | undefined>(undefined);\n\nexport const ToolbarContext = ({ children }: { children: ReactNode }) => {\n  const [toolbarState, setToolbarState] = useState(initialToolbarState);\n  const updateToolbarState = useCallback(\n    <Key extends ToolbarStateKey>(key: Key, value: ToolbarStateValue<Key>) => {\n      setToolbarState((prev) => ({\n        ...prev,\n        [key]: value,\n      }));\n    },\n    [],\n  );\n\n  const contextValue = useMemo(() => {\n    return {\n      toolbarState,\n      updateToolbarState,\n    };\n  }, [toolbarState, updateToolbarState]);\n\n  return <Context.Provider value={contextValue}>{children}</Context.Provider>;\n};\n\nexport const useToolbarState = () => {\n  const context = useContext(Context);\n\n  if (context === undefined) {\n    throw new Error(\"useToolbarState must be used within a ToolbarProvider\");\n  }\n\n  return context;\n};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { $isAtNodeEnd } from \"@lexical/selection\";\nimport type { ElementNode, RangeSelection, TextNode } from \"lexical\";\n\nexport function getSelectedNode(selection: RangeSelection): TextNode | ElementNode {\n  /**\n   * in a selection of a text\n   *      ---------\n   *     ^ anchor  ^\n   *               | focus (end)\n   */\n  const anchor = selection.anchor;\n  const focus = selection.focus;\n  const anchorNode = selection.anchor.getNode();\n  const focusNode = selection.focus.getNode();\n  if (anchorNode === focusNode) {\n    return anchorNode;\n  }\n  const isBackward = selection.isBackward();\n  if (isBackward) {\n    // @ts-ignore\n    return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n  } else {\n    // @ts-ignore\n    return $isAtNodeEnd(anchor) ? anchorNode : focusNode;\n  }\n}\n","import {\n  INSERT_CHECK_LIST_COMMAND,\n  INSERT_ORDERED_LIST_COMMAND,\n  INSERT_UNORDERED_LIST_COMMAND,\n} from \"@lexical/list\";\nimport type { HeadingTagType } from \"@lexical/rich-text\";\nimport { $createHeadingNode, $createQuoteNode } from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport type { LexicalEditor } from \"lexical\";\nimport { $createParagraphNode, $getSelection } from \"lexical\";\n\nexport const formatParagraph = (editor: LexicalEditor) => {\n  editor.update(() => {\n    const selection = $getSelection();\n    $setBlocksType(selection, () => $createParagraphNode());\n  });\n};\n\nexport const formatHeading = (\n  editor: LexicalEditor,\n  blockType: string,\n  headingSize: HeadingTagType,\n) => {\n  if (blockType !== headingSize) {\n    editor.update(() => {\n      const selection = $getSelection();\n      $setBlocksType(selection, () => $createHeadingNode(headingSize));\n    });\n  }\n};\n\nexport const formatBulletList = (editor: LexicalEditor, blockType: string) => {\n  if (blockType !== \"bullet\") {\n    editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n  } else {\n    formatParagraph(editor);\n  }\n};\n\nexport const formatCheckList = (editor: LexicalEditor, blockType: string) => {\n  if (blockType !== \"check\") {\n    editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined);\n  } else {\n    formatParagraph(editor);\n  }\n};\n\nexport const formatNumberedList = (editor: LexicalEditor, blockType: string) => {\n  if (blockType !== \"number\") {\n    editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n  } else {\n    formatParagraph(editor);\n  }\n};\n\nexport const formatQuote = (editor: LexicalEditor, blockType: string) => {\n  if (blockType !== \"quote\") {\n    editor.update(() => {\n      const selection = $getSelection();\n      $setBlocksType(selection, () => $createQuoteNode());\n    });\n  }\n};\n","import type { LexicalEditor } from \"lexical\";\nimport type { BlockType } from \"../ToolbarContext\";\nimport { DropdownMenu, DropdownMenuItem } from \"../../../dropdown-menu\";\nimport { Button } from \"../../../button\";\nimport clsx from \"clsx\";\nimport { formatBulletList, formatHeading, formatParagraph, formatQuote } from \"../utils/formatters\";\nimport { useTranslate } from \"../../../i18n\";\n\ninterface Props {\n  blockType: BlockType;\n  editor: LexicalEditor;\n  isFocusable?: boolean;\n}\n\nconst icons: {\n  [K in BlockType]: string;\n} = {\n  bullet: \"fe-list-bullet\",\n  check: \"fe-help\",\n  h1: \"fe-h1\",\n  h2: \"fe-h2\",\n  h3: \"fe-h3\",\n  number: \"fe-list-numbered\",\n  paragraph: \"fe-paragraph\",\n  quote: \"fe-quote\",\n};\n\nexport function BlockFormatDropdown({ blockType, editor, isFocusable = true }: Props) {\n  const translate = useTranslate();\n\n  return (\n    <DropdownMenu\n      data-testid=\"menubar-user-dropdown\"\n      placement=\"bottom-start\"\n      listClassName=\"flex flex-col gap-1\"\n      trigger={\n        <Button type=\"button\" variant=\"text\" icon color=\"gray\" tabIndex={isFocusable ? 0 : -1}>\n          <i className={icons[blockType]}></i>\n          <i className=\"fe-angle-down -ml-4\"></i>\n        </Button>\n      }\n    >\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(blockType === \"paragraph\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => formatParagraph(editor)}\n      >\n        <i className={icons.paragraph}></i>\n        {translate?.(\"wysiwyg.formats.paragraph\")}\n      </DropdownMenuItem>\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(blockType === \"h1\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => formatHeading(editor, blockType, \"h1\")}\n      >\n        <i className={icons.h1}></i>\n        {translate?.(\"wysiwyg.formats.h1\")}\n      </DropdownMenuItem>\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(blockType === \"h2\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => formatHeading(editor, blockType, \"h2\")}\n      >\n        <i className={icons.h2}></i>\n        {translate?.(\"wysiwyg.formats.h2\")}\n      </DropdownMenuItem>\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(blockType === \"h3\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => formatHeading(editor, blockType, \"h3\")}\n      >\n        <i className={icons.h3}></i>\n        {translate?.(\"wysiwyg.formats.h3\")}\n      </DropdownMenuItem>\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(blockType === \"bullet\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => formatBulletList(editor, blockType)}\n      >\n        <i className={icons.bullet}></i>\n        {translate?.(\"wysiwyg.formats.bullet\")}\n      </DropdownMenuItem>\n      {/* <DropdownMenuItem\n        type=\"button\"\n        className={clsx(blockType === \"number\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => formatNumberedList(editor, blockType)}\n      >\n        {translate?.(\"wysiwyg.formats.number\")}\n      </DropdownMenuItem> */}\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(blockType === \"quote\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => formatQuote(editor, blockType)}\n      >\n        <i className={icons.quote}></i>\n        {translate?.(\"wysiwyg.formats.quote\")}\n      </DropdownMenuItem>\n    </DropdownMenu>\n  );\n}\n","import type { ElementFormatType, LexicalEditor } from \"lexical\";\nimport { FORMAT_ELEMENT_COMMAND } from \"lexical\";\nimport { DropdownMenu, DropdownMenuItem } from \"../../../dropdown-menu\";\nimport { Button } from \"../../../button\";\nimport { useTranslate } from \"../../../i18n\";\nimport clsx from \"clsx\";\n\ninterface Props {\n  editor: LexicalEditor;\n  value: ElementFormatType;\n  isFocusable?: boolean;\n}\n\nconst icons = {\n  left: \"fe-align-left\",\n  center: \"fe-align-center\",\n  right: \"fe-align-right\",\n  justify: \"fe-align-justify\",\n  start: \"fe-align-left\",\n  end: \"fe-align-right\",\n  \"\": \"\",\n};\n\nexport function ElementFormatDropdown({ editor, value, isFocusable = true }: Props) {\n  const translate = useTranslate();\n  return (\n    <DropdownMenu\n      data-testid=\"menubar-user-dropdown\"\n      placement=\"bottom-start\"\n      className=\"min-w-36\"\n      listClassName=\"flex flex-col gap-1\"\n      trigger={\n        <Button icon variant=\"text\" color=\"gray\" type=\"button\" tabIndex={isFocusable ? 0 : -1}>\n          <i className={icons[value || \"left\"]}></i>\n          <i className=\"fe-angle-down -ml-4\"></i>\n        </Button>\n      }\n    >\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(value === \"left\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => {\n          editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, \"left\");\n        }}\n      >\n        <i className={icons.left}></i>\n        {translate?.(\"wysiwyg.elementFormats.left\")}\n      </DropdownMenuItem>{\" \"}\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(value === \"center\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => {\n          editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, \"center\");\n        }}\n      >\n        <i className={icons.center}></i>\n        {translate?.(\"wysiwyg.elementFormats.center\")}\n      </DropdownMenuItem>{\" \"}\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(value === \"right\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => {\n          editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, \"right\");\n        }}\n      >\n        <i className={icons.right}></i>\n        {translate?.(\"wysiwyg.elementFormats.right\")}\n      </DropdownMenuItem>{\" \"}\n      <DropdownMenuItem\n        type=\"button\"\n        className={clsx(value === \"justify\" && \"bg-gray-2!\", \"gap-2\")}\n        onClick={() => {\n          editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, \"justify\");\n        }}\n      >\n        <i className={icons.justify}></i>\n        {translate?.(\"wysiwyg.elementFormats.justify\")}\n      </DropdownMenuItem>\n    </DropdownMenu>\n  );\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, $getNearestNodeOfType, mergeRegister } from \"@lexical/utils\";\nimport clsx from \"clsx\";\nimport {\n  $getSelection,\n  $isElementNode,\n  $isRangeSelection,\n  $isRootOrShadowRoot,\n  CAN_REDO_COMMAND,\n  CAN_UNDO_COMMAND,\n  COMMAND_PRIORITY_CRITICAL,\n  FORMAT_TEXT_COMMAND,\n  REDO_COMMAND,\n  SELECTION_CHANGE_COMMAND,\n  UNDO_COMMAND,\n} from \"lexical\";\nimport { INSERT_HORIZONTAL_RULE_COMMAND } from \"@lexical/react/LexicalHorizontalRuleNode\";\n\nimport type { ButtonProps } from \"../../../button\";\nimport { Button } from \"../../../button\";\nimport type { Dispatch } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useTranslate } from \"../../../i18n\";\nimport { focusNextElement } from \"../utils/dom\";\nimport type { ToolbarVariantProps } from \"../style\";\nimport { toolbarVariants } from \"../style\";\nimport type { BlockType } from \"../ToolbarContext\";\nimport { blockTypes, useToolbarState } from \"../ToolbarContext\";\nimport { getSelectedNode } from \"../utils/getSelectedNode\";\nimport { $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport { $isListNode, ListNode } from \"@lexical/list\";\nimport { $isHeadingNode } from \"@lexical/rich-text\";\nimport { BlockFormatDropdown } from \"../components/BlockFormatDropdown\";\nimport { ElementFormatDropdown } from \"../components/ElementFormatDropdown\";\n\nfunction Divider() {\n  return <div className=\"border-r-gray-2 my-1 border-r\" />;\n}\n\nconst buttonBaseProps: (\n  label: string | undefined,\n  selected: boolean,\n  isFocusable: boolean,\n) => ButtonProps = (label, selected, isFocusable) => ({\n  \"aria-label\": label,\n  selected,\n  tabIndex: isFocusable ? 0 : -1,\n  color: \"gray\",\n  variant: \"text\",\n  icon: true,\n  type: \"button\",\n});\n\ninterface Props extends ToolbarVariantProps {\n  className?: string;\n  setIsLinkEditMode: Dispatch<boolean>;\n  extendedToolbar?: boolean;\n}\n\nexport function ToolbarPlugin({\n  extendedToolbar,\n  className,\n  sticky,\n  visible,\n  setIsLinkEditMode,\n}: Props) {\n  const [editor] = useLexicalComposerContext();\n  const toolbarRef = useRef(null);\n\n  const [isFocusable, setIsFocusable] = useState(false);\n  const translate = useTranslate();\n\n  const { toolbarState, updateToolbarState } = useToolbarState();\n\n  const $updateToolbar = useCallback(() => {\n    const selection = $getSelection();\n    if ($isRangeSelection(selection)) {\n      const anchorNode = selection.anchor.getNode();\n      let element =\n        anchorNode.getKey() === \"root\"\n          ? anchorNode\n          : $findMatchingParent(anchorNode, (e) => {\n              const parent = e.getParent();\n              return parent !== null && $isRootOrShadowRoot(parent);\n            });\n      if (element === null) {\n        element = anchorNode.getTopLevelElementOrThrow();\n      }\n      const elementKey = element.getKey();\n      const elementDOM = editor.getElementByKey(elementKey);\n\n      const node = getSelectedNode(selection);\n      const parent = node.getParent();\n      const isLink = $isLinkNode(parent) || $isLinkNode(node);\n      updateToolbarState(\"isLink\", isLink);\n\n      if (elementDOM !== null) {\n        if ($isListNode(element)) {\n          const parentList = $getNearestNodeOfType<ListNode>(anchorNode, ListNode);\n          const type = parentList ? parentList.getListType() : element.getListType();\n\n          updateToolbarState(\"blockType\", type);\n        } else {\n          const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n          if (blockTypes.includes(type as BlockType)) {\n            updateToolbarState(\"blockType\", type as BlockType);\n          }\n        }\n      }\n\n      let matchingParent;\n      if ($isLinkNode(parent)) {\n        // If node is a link, we need to fetch the parent paragraph node to set format\n        matchingParent = $findMatchingParent(\n          node,\n          (parentNode) => $isElementNode(parentNode) && !parentNode.isInline(),\n        );\n      }\n\n      updateToolbarState(\n        \"elementFormat\",\n        $isElementNode(matchingParent)\n          ? matchingParent.getFormatType()\n          : $isElementNode(node)\n            ? node.getFormatType()\n            : parent?.getFormatType() || \"left\",\n      );\n\n      updateToolbarState(\"isBold\", selection.hasFormat(\"bold\"));\n      updateToolbarState(\"isItalic\", selection.hasFormat(\"italic\"));\n      updateToolbarState(\"isUnderline\", selection.hasFormat(\"underline\"));\n    }\n  }, [editor, updateToolbarState]);\n\n  useEffect(() => {\n    return mergeRegister(\n      editor.registerUpdateListener(({ editorState }) => {\n        editorState.read(() => {\n          $updateToolbar();\n        });\n      }),\n      editor.registerCommand(\n        SELECTION_CHANGE_COMMAND,\n        (_payload, _newEditor) => {\n          if (_newEditor !== editor) {\n            console.error(\"_newEditor is different !!\");\n          }\n          $updateToolbar();\n          return false;\n        },\n        COMMAND_PRIORITY_CRITICAL,\n      ),\n      editor.registerCommand(\n        CAN_UNDO_COMMAND,\n        (payload) => {\n          updateToolbarState(\"canUndo\", payload);\n          return false;\n        },\n        COMMAND_PRIORITY_CRITICAL,\n      ),\n      editor.registerCommand(\n        CAN_REDO_COMMAND,\n        (payload) => {\n          updateToolbarState(\"canRedo\", payload);\n          return false;\n        },\n        COMMAND_PRIORITY_CRITICAL,\n      ),\n    );\n  }, [editor, $updateToolbar, updateToolbarState]);\n\n  const insertLink = useCallback(() => {\n    if (!toolbarState.isLink) {\n      setIsLinkEditMode(true);\n      editor.dispatchCommand(TOGGLE_LINK_COMMAND, \"https://\");\n    } else {\n      setIsLinkEditMode(false);\n      editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n    }\n  }, [toolbarState.isLink, setIsLinkEditMode, editor]);\n\n  return (\n    <div className={toolbarVariants({ sticky, visible, className })} ref={toolbarRef}>\n      <button\n        className={clsx(\n          \"not-focus:hidden-focusable bg-gray-0/40 absolute top-1 right-1 z-20 inline-flex h-8 items-center rounded-2xl px-2 backdrop-blur-xs\",\n        )}\n        onClick={() => {\n          setIsFocusable((f) => !f);\n          focusNextElement();\n        }}\n        type=\"button\"\n      >\n        {translate?.(\n          isFocusable ? \"wysiwyg.button.disableFocusable\" : \"wysiwyg.button.enableFocusable\",\n        )}\n      </button>\n      <Button\n        {...buttonBaseProps(translate?.(\"wysiwyg.button.undo\"), false, isFocusable)}\n        disabled={!toolbarState.canUndo}\n        onClick={() => void editor.dispatchCommand(UNDO_COMMAND, undefined)}\n      >\n        <i className=\"fe-ccw\"></i>\n      </Button>\n      <Button\n        {...buttonBaseProps(translate?.(\"wysiwyg.button.redo\"), false, isFocusable)}\n        disabled={!toolbarState.canRedo}\n        onClick={() => void editor.dispatchCommand(REDO_COMMAND, undefined)}\n      >\n        <i className=\"fe-cw\"></i>\n      </Button>\n      <Divider />\n      {extendedToolbar && (\n        <>\n          {blockTypes.includes(toolbarState.blockType) && (\n            <BlockFormatDropdown\n              isFocusable={isFocusable}\n              blockType={toolbarState.blockType}\n              editor={editor}\n            />\n          )}\n          <ElementFormatDropdown\n            isFocusable={isFocusable}\n            value={toolbarState.elementFormat}\n            editor={editor}\n          />\n          <Divider />\n        </>\n      )}\n\n      <Button\n        {...buttonBaseProps(\n          translate?.(\"wysiwyg.button.formatBold\"),\n          toolbarState.isBold,\n          isFocusable,\n        )}\n        onClick={() => void editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\")}\n      >\n        <i className=\"fe-bold\"></i>\n      </Button>\n      <Button\n        {...buttonBaseProps(\n          translate?.(\"wysiwyg.button.formatItalics\"),\n          toolbarState.isItalic,\n          isFocusable,\n        )}\n        onClick={() => void editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\")}\n      >\n        <i className=\"fe-italic\"></i>\n      </Button>\n      <Button\n        {...buttonBaseProps(\n          translate?.(\"wysiwyg.button.formatUnderline\"),\n          toolbarState.isUnderline,\n          isFocusable,\n        )}\n        onClick={() => void editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\")}\n      >\n        <i className=\"fe-underline\"></i>\n      </Button>\n      <Button\n        {...buttonBaseProps(\n          translate?.(\"wysiwyg.button.formatLink\"),\n          toolbarState.isLink,\n          isFocusable,\n        )}\n        onClick={insertLink}\n      >\n        <i className=\"fe-link\"></i>\n      </Button>\n      {extendedToolbar && (\n        <Button\n          {...buttonBaseProps(\n            translate?.(\"wysiwyg.button.horizontalRule\"),\n            toolbarState.isLink,\n            isFocusable,\n          )}\n          onClick={() => void editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, undefined)}\n        >\n          <i className=\"fe-horizontal-rule\"></i>\n        </Button>\n      )}\n    </div>\n  );\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect, useRef } from \"react\";\nimport debounce from \"lodash.debounce\";\nimport { WysiwygValue } from \"../types\";\n\ninterface Props {\n  wait: number;\n  onChange?: (value: WysiwygValue) => void;\n}\n\nexport function LazyOnChangePlugin({ wait, onChange }: Props) {\n  const [editor] = useLexicalComposerContext();\n\n  const onChangeRef = useRef(onChange);\n  onChangeRef.current = onChange;\n\n  useEffect(() => {\n    function notifyChange() {\n      onChangeRef.current?.({\n        state: editor.getEditorState().toJSON(),\n      });\n    }\n\n    const debouncedNotifyChange = debounce(notifyChange, wait);\n\n    const unregister = editor.registerUpdateListener(() => {\n      debouncedNotifyChange();\n    });\n\n    return () => {\n      unregister();\n      debouncedNotifyChange.cancel();\n    };\n  }, [editor, wait]);\n\n  return null;\n}\n","import { AutoLinkPlugin, createLinkMatcherWithRegExp } from \"@lexical/react/LexicalAutoLinkPlugin\";\n\n/**\n * Original create an URL with http://mydomain.c\n * const URL_REGEX =\n * /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)(?<![-.+():%])/;\n * const EMAIL_REGEX =\n * /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/;\n *\n * I'm aware that for tech users with an email in *.me this autolink doesn't trigger\n * but for the majority of users the first tld is 3 chars minimum and trigger an autolink after\n * 1 character can be disturbing\n */\n\nconst URL_REGEX =\n  /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{3,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)(?<![-.+():%])/;\n\nconst EMAIL_REGEX =\n  /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{3,}))/;\n\nconst MATCHERS = [\n  createLinkMatcherWithRegExp(URL_REGEX, (text) => {\n    return text.startsWith(\"http\") ? text : `https://${text}`;\n  }),\n  createLinkMatcherWithRegExp(EMAIL_REGEX, (text) => {\n    return `mailto:${text}`;\n  }),\n];\n\nexport function CustomAutoLinkPlugin() {\n  return <AutoLinkPlugin matchers={MATCHERS} />;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nconst SUPPORTED_URL_PROTOCOLS = new Set([\"http:\", \"https:\", \"mailto:\", \"sms:\", \"tel:\"]);\n\nexport function sanitizeUrl(url: string): string {\n  try {\n    const parsedUrl = new URL(url);\n    if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n      return \"about:blank\";\n    }\n  } catch {\n    return url;\n  }\n  return url;\n}\n\n// Source: https://stackoverflow.com/a/8234912/2013580\nconst urlRegExp = new RegExp(\n  /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[\\w]*))?)/,\n);\nexport function validateUrl(url: string): boolean {\n  // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.\n  // Maybe show a dialog where they user can type the URL before inserting it.\n  return url === \"https://\" || urlRegExp.test(url);\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nconst VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPositionForLinkEditor(\n  targetRect: DOMRect | null,\n  floatingElem: HTMLElement,\n  anchorElem: HTMLElement,\n  verticalGap: number = VERTICAL_GAP,\n  horizontalOffset: number = HORIZONTAL_OFFSET,\n): void {\n  const scrollerElem = anchorElem.parentElement;\n\n  if (targetRect === null || !scrollerElem) {\n    floatingElem.style.opacity = \"0\";\n    floatingElem.style.transform = \"translate(-10000px, -10000px)\";\n    return;\n  }\n\n  const floatingElemRect = floatingElem.getBoundingClientRect();\n  const anchorElementRect = anchorElem.getBoundingClientRect();\n  const editorScrollerRect = scrollerElem.getBoundingClientRect();\n\n  let top = targetRect.top - verticalGap;\n  let left = targetRect.left - horizontalOffset;\n\n  if (top < editorScrollerRect.top) {\n    top += floatingElemRect.height + targetRect.height + verticalGap * 2;\n  }\n\n  if (left + floatingElemRect.width > editorScrollerRect.right) {\n    left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\n  }\n\n  top -= anchorElementRect.top;\n  left -= anchorElementRect.left;\n\n  floatingElem.style.opacity = \"1\";\n  floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport type { BaseSelection, LexicalEditor } from \"lexical\";\nimport {\n  $getSelection,\n  $isLineBreakNode,\n  $isNodeSelection,\n  $isRangeSelection,\n  CLICK_COMMAND,\n  COMMAND_PRIORITY_CRITICAL,\n  COMMAND_PRIORITY_HIGH,\n  COMMAND_PRIORITY_LOW,\n  getDOMSelection,\n  KEY_ESCAPE_COMMAND,\n  SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport type { Dispatch } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { getSelectedNode } from \"../utils/getSelectedNode\";\nimport { $createLinkNode, $isAutoLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport { createPortal } from \"react-dom\";\nimport { Input } from \"../../text\";\nimport { sanitizeUrl } from \"../utils/url\";\nimport { setFloatingElemPositionForLinkEditor } from \"../utils/setFloatingElemPositionForLinkEditor\";\nimport { Button } from \"../../../button\";\nimport { proseLinkVariant } from \"../../../href\";\nimport { Dialog } from \"../../../dialog\";\nimport clsx from \"clsx\";\nimport { FloatingOverlay } from \"@floating-ui/react\";\n\nfunction preventDefault(\n  event: React.KeyboardEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>,\n): void {\n  event.preventDefault();\n}\n\ninterface FloatingLinkEditorProps {\n  floatingPosition?: \"top\" | \"bottom\";\n  editor: LexicalEditor;\n  isLink: boolean;\n  setIsLink: Dispatch<boolean>;\n  anchorElem: HTMLElement;\n  isLinkEditMode: boolean;\n  setIsLinkEditMode: Dispatch<boolean>;\n}\nfunction FloatingLinkEditor({\n  floatingPosition = \"bottom\",\n  editor,\n  isLink,\n  setIsLink,\n  anchorElem,\n  isLinkEditMode,\n  setIsLinkEditMode,\n}: FloatingLinkEditorProps) {\n  const editorRef = useRef<HTMLDivElement | null>(null);\n  const inputRef = useRef<HTMLInputElement>(null);\n  const [linkUrl, setLinkUrl] = useState(\"\");\n  const [editedLinkUrl, setEditedLinkUrl] = useState(\"https://\");\n  const [lastSelection, setLastSelection] = useState<BaseSelection | null>(null);\n\n  const $updateLinkEditor = useCallback(() => {\n    const selection = $getSelection();\n    if ($isRangeSelection(selection)) {\n      const node = getSelectedNode(selection);\n      const linkParent = $findMatchingParent(node, $isLinkNode);\n\n      if (linkParent) {\n        setLinkUrl(linkParent.getURL());\n      } else if ($isLinkNode(node)) {\n        setLinkUrl(node.getURL());\n      } else {\n        setLinkUrl(\"\");\n      }\n      if (isLinkEditMode) {\n        setEditedLinkUrl(linkUrl);\n      }\n    } else if ($isNodeSelection(selection)) {\n      const nodes = selection.getNodes();\n      if (nodes.length > 0) {\n        const node = nodes[0];\n        const parent = node.getParent();\n        if ($isLinkNode(parent)) {\n          setLinkUrl(parent.getURL());\n        } else if ($isLinkNode(node)) {\n          setLinkUrl(node.getURL());\n        } else {\n          setLinkUrl(\"\");\n        }\n        if (isLinkEditMode) {\n          setEditedLinkUrl(linkUrl);\n        }\n      }\n    }\n\n    const editorElem = editorRef.current;\n    const nativeSelection = getDOMSelection(editor._window);\n    const activeElement = document.activeElement;\n\n    if (editorElem === null) {\n      return;\n    }\n\n    const rootElement = editor.getRootElement();\n\n    if (selection !== null && rootElement !== null && editor.isEditable()) {\n      let domRect: DOMRect | undefined;\n\n      if ($isNodeSelection(selection)) {\n        const nodes = selection.getNodes();\n        if (nodes.length > 0) {\n          const element = editor.getElementByKey(nodes[0].getKey());\n          if (element) {\n            domRect = element.getBoundingClientRect();\n          }\n        }\n      } else if (nativeSelection !== null && rootElement.contains(nativeSelection.anchorNode)) {\n        domRect = nativeSelection.focusNode?.parentElement?.getBoundingClientRect();\n      }\n\n      if (domRect) {\n        if (floatingPosition === \"top\") {\n          domRect.y -= 40;\n        } else {\n          domRect.y += 40;\n        }\n        setFloatingElemPositionForLinkEditor(domRect, editorElem, anchorElem);\n      }\n      setLastSelection(selection);\n    } else if (!activeElement || activeElement.className !== \"link-input\") {\n      if (rootElement !== null) {\n        setFloatingElemPositionForLinkEditor(null, editorElem, anchorElem);\n      }\n      setLastSelection(null);\n      setIsLinkEditMode(false);\n      setLinkUrl(\"\");\n    }\n\n    return true;\n  }, [anchorElem, editor, setIsLinkEditMode, isLinkEditMode, linkUrl, floatingPosition]);\n\n  useEffect(() => {\n    const scrollerElem = anchorElem.parentElement;\n\n    const update = () => {\n      editor.getEditorState().read(() => {\n        $updateLinkEditor();\n      });\n    };\n\n    window.addEventListener(\"resize\", update);\n\n    if (scrollerElem) {\n      scrollerElem.addEventListener(\"scroll\", update);\n    }\n\n    return () => {\n      window.removeEventListener(\"resize\", update);\n\n      if (scrollerElem) {\n        scrollerElem.removeEventListener(\"scroll\", update);\n      }\n    };\n  }, [anchorElem.parentElement, editor, $updateLinkEditor]);\n\n  // When toggle isLink\n  useEffect(() => {\n    return mergeRegister(\n      editor.registerUpdateListener(({ editorState }) => {\n        editorState.read(() => {\n          $updateLinkEditor();\n        });\n      }),\n\n      editor.registerCommand(\n        SELECTION_CHANGE_COMMAND,\n        () => {\n          $updateLinkEditor();\n          return true;\n        },\n        COMMAND_PRIORITY_LOW,\n      ),\n      editor.registerCommand(\n        KEY_ESCAPE_COMMAND,\n        () => {\n          if (isLink) {\n            setIsLink(false);\n            return true;\n          }\n          return false;\n        },\n        COMMAND_PRIORITY_HIGH,\n      ),\n    );\n  }, [editor, $updateLinkEditor, setIsLink, isLink]);\n\n  // Init\n  useEffect(() => {\n    editor.getEditorState().read(() => {\n      $updateLinkEditor();\n    });\n  }, [editor, $updateLinkEditor]);\n\n  // When toggle Edit Mode, add focus to input\n  useEffect(() => {\n    if (isLinkEditMode && inputRef.current) {\n      inputRef.current.focus();\n    }\n  }, [isLinkEditMode, isLink]);\n\n  // when editing and press Enter\n  const monitorInputInteraction = (event: React.KeyboardEvent<HTMLInputElement>) => {\n    if (event.key === \"Enter\") {\n      handleLinkSubmission(event);\n    } else if (event.key === \"Escape\") {\n      event.preventDefault();\n      setIsLinkEditMode(false);\n    }\n  };\n\n  // when editing and click Ok\n  const handleLinkSubmission = (\n    event: React.KeyboardEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>,\n  ) => {\n    event.preventDefault();\n    if (lastSelection !== null) {\n      if (linkUrl !== \"\") {\n        editor.update(() => {\n          editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(editedLinkUrl));\n          const selection = $getSelection();\n          if ($isRangeSelection(selection)) {\n            const parent = getSelectedNode(selection).getParent();\n            if ($isAutoLinkNode(parent)) {\n              const linkNode = $createLinkNode(parent.getURL(), {\n                rel: parent.__rel,\n                target: parent.__target,\n                title: parent.__title,\n              });\n              parent.replace(linkNode, true);\n            }\n          }\n        });\n      }\n      setEditedLinkUrl(\"https://\");\n      setIsLinkEditMode(false);\n    }\n  };\n\n  function onClickOverlay() {\n    editor.update(() => {\n      setIsLink(false);\n    });\n  }\n  return (\n    <div\n      ref={editorRef}\n      className=\"z-dialog absolute top-0 left-0 flex opacity-0 transition-opacity\"\n    >\n      {isLink ? (\n        <>\n          <Dialog color=\"yellow\" className=\"flex w-xs gap-1 p-1\">\n            {isLinkEditMode ? (\n              <>\n                <Input\n                  className=\"flex-1\"\n                  ref={inputRef}\n                  value={editedLinkUrl}\n                  onChange={(e) => setEditedLinkUrl(e.target.value)}\n                  onKeyDown={monitorInputInteraction}\n                />\n                <Button\n                  icon\n                  variant=\"light\"\n                  color=\"green\"\n                  type=\"button\"\n                  tabIndex={0}\n                  onMouseDown={preventDefault}\n                  onClick={handleLinkSubmission}\n                >\n                  <i className=\"fe-ok\"></i>\n                </Button>\n                <Button\n                  icon\n                  color=\"red\"\n                  variant=\"text\"\n                  type=\"button\"\n                  tabIndex={0}\n                  onMouseDown={preventDefault}\n                  onClick={() => void setIsLinkEditMode(false)}\n                >\n                  <i className=\"fe-cancel\"></i>\n                </Button>\n              </>\n            ) : (\n              <div className=\"flex w-full items-center gap-1\">\n                <span>URL:</span>\n                <a\n                  className={clsx(proseLinkVariant, \"flex-1 items-center truncate\")}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  href={sanitizeUrl(linkUrl)}\n                >\n                  {linkUrl}\n                </a>\n                <Button\n                  icon\n                  type=\"button\"\n                  variant=\"light\"\n                  tabIndex={0}\n                  onMouseDown={preventDefault}\n                  onClick={(event) => {\n                    event.preventDefault();\n                    setEditedLinkUrl(linkUrl);\n                    setIsLinkEditMode(true);\n                  }}\n                >\n                  <i className=\"fe-pencil\"></i>\n                </Button>\n                <Button\n                  type=\"button\"\n                  color=\"red\"\n                  variant=\"light\"\n                  icon\n                  tabIndex={0}\n                  onMouseDown={preventDefault}\n                  onClick={() => {\n                    editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n                  }}\n                >\n                  <i className=\"fe-trash\"></i>\n                </Button>\n              </div>\n            )}\n          </Dialog>\n          {createPortal(\n            <FloatingOverlay\n              className=\"z-[calc(var(--index-wysiwyg)-1)]\"\n              onClick={onClickOverlay}\n              lockScroll\n            />,\n            document.body,\n          )}\n        </>\n      ) : null}\n    </div>\n  );\n}\n\ninterface FloatingLinkEditorPluginProps {\n  floatingPosition?: \"top\" | \"bottom\";\n  anchorElem: HTMLDivElement;\n  isLinkEditMode: boolean;\n  setIsLinkEditMode: Dispatch<boolean>;\n}\n\nexport function FloatingLinkEditorPlugin({\n  floatingPosition,\n  anchorElem,\n  isLinkEditMode,\n  setIsLinkEditMode,\n}: FloatingLinkEditorPluginProps) {\n  const [editor] = useLexicalComposerContext();\n  const [isLink, setIsLink] = useState(false);\n\n  useEffect(() => {\n    function $updateToolbar() {\n      const selection = $getSelection();\n      if ($isRangeSelection(selection)) {\n        const focusNode = getSelectedNode(selection);\n        const focusLinkNode = $findMatchingParent(focusNode, $isLinkNode);\n        const focusAutoLinkNode = $findMatchingParent(focusNode, $isAutoLinkNode);\n        if (!(focusLinkNode || focusAutoLinkNode)) {\n          setIsLink(false);\n          return;\n        }\n        const badNode = selection\n          .getNodes()\n          .filter((node) => !$isLineBreakNode(node))\n          .find((node) => {\n            const linkNode = $findMatchingParent(node, $isLinkNode);\n            const autoLinkNode = $findMatchingParent(node, $isAutoLinkNode);\n            return (\n              (focusLinkNode && !focusLinkNode.is(linkNode)) ||\n              (linkNode && !linkNode.is(focusLinkNode)) ||\n              (focusAutoLinkNode && !focusAutoLinkNode.is(autoLinkNode)) ||\n              (autoLinkNode &&\n                (!autoLinkNode.is(focusAutoLinkNode) || autoLinkNode.getIsUnlinked()))\n            );\n          });\n        if (!badNode) {\n          setIsLink(true);\n        } else {\n          setIsLink(false);\n        }\n      } else if ($isNodeSelection(selection)) {\n        const nodes = selection.getNodes();\n        if (nodes.length === 0) {\n          setIsLink(false);\n          return;\n        }\n        const node = nodes[0];\n        const parent = node.getParent();\n        if ($isLinkNode(parent) || $isLinkNode(node)) {\n          setIsLink(true);\n        } else {\n          setIsLink(false);\n        }\n      }\n    }\n    return mergeRegister(\n      editor.registerUpdateListener(({ editorState }) => {\n        editorState.read(() => {\n          $updateToolbar();\n        });\n      }),\n      editor.registerCommand(\n        SELECTION_CHANGE_COMMAND,\n        () => {\n          $updateToolbar();\n          return false;\n        },\n        COMMAND_PRIORITY_CRITICAL,\n      ),\n      editor.registerCommand(\n        CLICK_COMMAND,\n        (payload) => {\n          const selection = $getSelection();\n          if ($isRangeSelection(selection)) {\n            const node = getSelectedNode(selection);\n            const linkNode = $findMatchingParent(node, $isLinkNode);\n            if ($isLinkNode(linkNode) && (payload.metaKey || payload.ctrlKey)) {\n              window.open(linkNode.getURL(), \"_blank\");\n              return true;\n            }\n          }\n          return false;\n        },\n        COMMAND_PRIORITY_LOW,\n      ),\n    );\n  }, [editor]);\n\n  return createPortal(\n    <FloatingLinkEditor\n      floatingPosition={floatingPosition}\n      editor={editor}\n      isLink={isLink}\n      anchorElem={anchorElem}\n      setIsLink={setIsLink}\n      isLinkEditMode={isLinkEditMode}\n      setIsLinkEditMode={setIsLinkEditMode}\n    />,\n    anchorElem,\n  );\n}\n","import { LinkPlugin as LexicalLinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { validateUrl } from \"../utils/url\";\n\ntype Props = {\n  hasLinkAttributes?: boolean;\n};\n\nexport function CustomLinkPlugin({ hasLinkAttributes = false }: Props) {\n  return (\n    <LexicalLinkPlugin\n      validateUrl={validateUrl}\n      attributes={\n        hasLinkAttributes\n          ? {\n              rel: \"noopener noreferrer\",\n              target: \"_blank\",\n            }\n          : undefined\n      }\n    />\n  );\n}\n","/**\n * check the original code at\n * https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/App.tsx\n */\n\nimport { AutoLinkNode, LinkNode } from \"@lexical/link\";\nimport { ListItemNode, ListNode } from \"@lexical/list\";\nimport { HeadingNode, QuoteNode } from \"@lexical/rich-text\";\nimport type {\n  DOMExportOutput,\n  DOMExportOutputMap,\n  Klass,\n  LexicalEditor,\n  LexicalNode,\n} from \"lexical\";\nimport { isHTMLElement, ParagraphNode, TextNode } from \"lexical\";\n\nconst removeStylesExportDOM = (editor: LexicalEditor, target: LexicalNode): DOMExportOutput => {\n  const output = target.exportDOM(editor);\n  // @ts-ignore\n  if (output && isHTMLElement(output.element)) {\n    // Remove all inline styles and classes if the element is an HTMLElement\n    // Children are checked as well since TextNode can be nested\n    // in i, b, and strong tags.\n    for (const el of [\n      output.element,\n      ...output.element.querySelectorAll('[style],[class],[dir=\"ltr\"]'),\n    ]) {\n      el.removeAttribute(\"class\");\n\n      const style = el.getAttribute(\"style\");\n      let textAlign: string | null = null;\n      if (style) {\n        const match = style.match(/text-align\\s*:\\s*([^;]+)\\s*;?/i);\n        if (match) {\n          textAlign = match[1].trim();\n        }\n      }\n\n      el.removeAttribute(\"style\");\n      if (textAlign) {\n        (el as HTMLElement).style.textAlign = textAlign;\n      }\n\n      if (el.getAttribute(\"dir\") === \"ltr\") {\n        el.removeAttribute(\"dir\");\n      }\n    }\n  }\n  return output;\n};\n\nexport const exportMap: DOMExportOutputMap = new Map<\n  Klass<LexicalNode>,\n  (editor: LexicalEditor, target: LexicalNode) => DOMExportOutput\n>([\n  [ParagraphNode, removeStylesExportDOM],\n  [HeadingNode, removeStylesExportDOM],\n  [AutoLinkNode, removeStylesExportDOM],\n  [LinkNode, removeStylesExportDOM],\n  [ListNode, removeStylesExportDOM],\n  [ListItemNode, removeStylesExportDOM],\n  [TextNode, removeStylesExportDOM],\n  [QuoteNode, removeStylesExportDOM],\n]);\n","/**\n * check the original code at\n * https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/App.tsx\n */\n\nimport type { DOMConversionMap } from \"lexical\";\nimport { $isTextNode, TextNode } from \"lexical\";\n\nconst MIN_ALLOWED_FONT_SIZE = 8;\nconst MAX_ALLOWED_FONT_SIZE = 72;\n\nconst parseAllowedFontSize = (input: string): string => {\n  const match = input.match(/^(\\d+(?:\\.\\d+)?)px$/);\n  if (match) {\n    const n = Number(match[1]);\n    if (n >= MIN_ALLOWED_FONT_SIZE && n <= MAX_ALLOWED_FONT_SIZE) {\n      return input;\n    }\n  }\n  return \"\";\n};\n\nfunction parseAllowedColor(input: string) {\n  return /^rgb\\(\\d+, \\d+, \\d+\\)$/.test(input) ? input : \"\";\n}\n\nconst getExtraStyles = (element: HTMLElement): string => {\n  // Parse styles from pasted input, but only if they match exactly the\n  // sort of styles that would be produced by exportDOM\n  let extraStyles = \"\";\n  const fontSize = parseAllowedFontSize(element.style.fontSize);\n  const backgroundColor = parseAllowedColor(element.style.backgroundColor);\n  const color = parseAllowedColor(element.style.color);\n  if (fontSize !== \"\" && fontSize !== \"15px\") {\n    extraStyles += `font-size: ${fontSize};`;\n  }\n  if (backgroundColor !== \"\" && backgroundColor !== \"rgb(255, 255, 255)\") {\n    extraStyles += `background-color: ${backgroundColor};`;\n  }\n  if (color !== \"\" && color !== \"rgb(0, 0, 0)\") {\n    extraStyles += `color: ${color};`;\n  }\n  return extraStyles;\n};\n\nexport const constructImportMap = (): DOMConversionMap => {\n  const importMap: DOMConversionMap = {};\n\n  // Wrap all TextNode importers with a function that also imports\n  // the custom styles implemented by the playground\n  for (const [tag, fn] of Object.entries(TextNode.importDOM?.() || {})) {\n    importMap[tag] = (importNode) => {\n      const importer = fn(importNode);\n      if (!importer) {\n        return null;\n      }\n      return {\n        ...importer,\n        conversion: (element) => {\n          const output = importer.conversion(element);\n          if (\n            output === null ||\n            output.forChild === undefined ||\n            output.after !== undefined ||\n            output.node !== null\n          ) {\n            return output;\n          }\n          const extraStyles = getExtraStyles(element);\n          if (extraStyles) {\n            const { forChild } = output;\n            return {\n              ...output,\n              forChild: (child, parent) => {\n                const textNode = forChild(child, parent);\n                if ($isTextNode(textNode)) {\n                  textNode.setStyle(textNode.getStyle() + extraStyles);\n                }\n                return textNode;\n              },\n            };\n          }\n          return output;\n        },\n      };\n    };\n  }\n\n  return importMap;\n};\n","import type { InitialConfigType } from \"@lexical/react/LexicalComposer\";\nimport { exportMap } from \"../parsers/exportMap\";\nimport { constructImportMap } from \"../parsers/importMap\";\nimport { ParagraphNode } from \"lexical\";\nimport { HeadingNode, QuoteNode } from \"@lexical/rich-text\";\nimport { LinkNode, AutoLinkNode } from \"@lexical/link\";\nimport { ListItemNode, ListNode } from \"@lexical/list\";\nimport { HorizontalRuleNode } from \"@lexical/react/LexicalHorizontalRuleNode\";\n\nexport const editorConfig: Pick<\n  InitialConfigType,\n  \"theme\" | \"html\" | \"namespace\" | \"nodes\" | \"onError\"\n> = {\n  html: {\n    export: exportMap,\n    import: constructImportMap(),\n  },\n  namespace: \"Melodineo Wysiwyg\",\n  nodes: [\n    HorizontalRuleNode,\n    ParagraphNode,\n    HeadingNode,\n    AutoLinkNode,\n    LinkNode,\n    ListNode,\n    ListItemNode,\n    QuoteNode,\n  ],\n  onError(error) {\n    throw error;\n  },\n};\n","import type { LexicalEditor, SerializedEditorState } from \"lexical\";\nimport { $getRoot, $insertNodes, $setSelection, createEditor } from \"lexical\";\n\nimport { $generateHtmlFromNodes, $generateNodesFromDOM } from \"@lexical/html\";\n\nimport { editorConfig } from \"./editor\";\n\nexport function importHtmlIntoEditor(initialHtml?: string) {\n  if (!initialHtml) {\n    return undefined;\n  }\n  return (editor: LexicalEditor) => {\n    editor.update(() => {\n      $loadFromHtml(editor, initialHtml);\n    });\n  };\n}\n\nexport function $loadFromHtml(editor: LexicalEditor, htmlContent: string) {\n  const parser = new DOMParser();\n  const dom = parser.parseFromString(htmlContent, \"text/html\");\n  const nodes = $generateNodesFromDOM(editor, dom);\n\n  const root = $getRoot();\n  root.getChildren().forEach((node) => {\n    node.remove();\n  });\n\n  $insertNodes(nodes);\n\n  $setSelection(null);\n}\n\n/**\n * Sérialise un `state` en HTML statique via un éditeur jetable (jamais monté dans le DOM),\n * pour un affichage en lecture seule sans payer le coût d'un LexicalComposer complet.\n */\nexport function stateToHtml(state: SerializedEditorState): string {\n  const { namespace, nodes, theme, html } = editorConfig;\n  const editor = createEditor({\n    namespace,\n    nodes,\n    theme,\n    html,\n    onError(error) {\n      throw error;\n    },\n  });\n  const parsedState = editor.parseEditorState(state);\n  editor.setEditorState(parsedState);\n\n  return editor.read(() => $generateHtmlFromNodes(editor));\n}\n","import type { ReactNode, RefObject } from \"react\";\nimport { useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport type { LexicalEditor, SerializedEditorState } from \"lexical\";\nimport { $getRoot } from \"lexical\";\nimport { InitialConfigType, LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { EditorRefPlugin } from \"@lexical/react/LexicalEditorRefPlugin\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\n\nimport { ToolbarPlugin } from \"./plugins/ToolbarPlugin\";\nimport { LazyOnChangePlugin } from \"./plugins/LazyOnChangePlugin\";\nimport { CustomAutoLinkPlugin } from \"./plugins/AutoLinkPlugin\";\nimport { FloatingLinkEditorPlugin } from \"./plugins/FloatingLinkEditorPlugin\";\nimport { CustomLinkPlugin } from \"./plugins/LinkPlugin\";\n\nimport { editorConfig } from \"./config/editor\";\nimport { $loadFromHtml } from \"./config/html\";\nimport type { ToolbarVariantProps } from \"./style\";\nimport { contentEditableStyles } from \"./style\";\nimport { ToolbarContext } from \"./ToolbarContext\";\nimport { WysiwygValue } from \"./types\";\n\ninterface Props {\n  id?: string;\n  extendedToolbar?: boolean;\n  floatingPosition?: \"top\" | \"bottom\";\n  defaultValue?: WysiwygValue;\n  disabled?: boolean;\n  readOnly?: boolean;\n\n  proseCompact?: boolean;\n\n  contentEditableBaseStyle?: \"normal\" | \"withoutToolbarOnMobile\";\n  /**\n   * If you want to define custom height\n   */\n  contentEditableClassName?: string;\n  containerClassName?: string;\n  /**\n   * by default sticky is only available for mobile device with a top-0 if\n   * you want to change this provide your own className\n   */\n  toolbarSticky?: ToolbarVariantProps[\"sticky\"];\n  toolbarVisible?: ToolbarVariantProps[\"visible\"];\n\n  ref?: RefObject<WysiwygRef>;\n  debounceChange?: number | false;\n  onChange?: (value: WysiwygValue) => void;\n  children?: ReactNode;\n}\nfunction readValue(editor: LexicalEditor): WysiwygValue {\n  return {\n    state: editor.getEditorState().toJSON(),\n  };\n}\n\nexport interface WysiwygRef {\n  getValue: () => WysiwygValue;\n  setHtml: (html: string, fireEvent?: boolean) => void;\n  getState: () => SerializedEditorState;\n  setState: (state: SerializedEditorState, fireEvent?: boolean) => void;\n  clear: (fireEvent?: boolean) => void;\n}\n\nexport function Wysiwyg({\n  id,\n  floatingPosition = \"bottom\",\n  extendedToolbar = true,\n  proseCompact = false,\n  defaultValue,\n  disabled = false,\n  readOnly = false,\n  contentEditableBaseStyle = \"normal\",\n  contentEditableClassName,\n  containerClassName,\n  ref,\n  toolbarSticky,\n  toolbarVisible,\n  debounceChange = false,\n  onChange,\n  children,\n}: Props) {\n  const [fullInitialConfig] = useState<InitialConfigType>(() => ({\n    ...editorConfig,\n    editable: !disabled && !readOnly,\n    ...(defaultValue ? { editorState: JSON.stringify(defaultValue.state) } : {}),\n  }));\n\n  const editorRef = useRef<LexicalEditor | null>(null);\n\n  useEffect(() => {\n    editorRef.current?.setEditable(!disabled && !readOnly);\n  }, [disabled, readOnly]);\n  const [floatingAnchorElem, setFloatingAnchorElem] = useState<HTMLDivElement | null>(null);\n  const [isLinkEditMode, setIsLinkEditMode] = useState(false);\n  const onRef = (floatingAnchorElem: HTMLDivElement) => {\n    if (floatingAnchorElem !== null) {\n      setFloatingAnchorElem(floatingAnchorElem);\n    }\n  };\n\n  function getEditor(): LexicalEditor {\n    const editor = editorRef.current;\n\n    if (!editor) {\n      throw new Error(\"Wysiwyg ref called before the editor was mounted\");\n    }\n\n    return editor;\n  }\n\n  function notifyChange(editor: LexicalEditor) {\n    onChange?.(readValue(editor));\n  }\n\n  useImperativeHandle(ref, () => {\n    return {\n      getValue: () => {\n        const editor = getEditor();\n        return readValue(editor);\n      },\n      setHtml: (nextHtml: string, fireEvent = false) => {\n        const editor = getEditor();\n\n        editor.update(() => {\n          $loadFromHtml(editor, nextHtml);\n        });\n        if (fireEvent) {\n          notifyChange(editor);\n        }\n      },\n      getState: () => {\n        return getEditor().getEditorState().toJSON();\n      },\n      setState: (editorState: SerializedEditorState, fireEvent = false) => {\n        const editor = getEditor();\n        const parsedEditorState = editor.parseEditorState(editorState);\n        editor.setEditorState(parsedEditorState);\n        if (fireEvent) {\n          notifyChange(editor);\n        }\n      },\n\n      clear: (fireEvent = false) => {\n        const editor = getEditor();\n\n        editor.update(() => {\n          const root = $getRoot();\n          root.getChildren().forEach((node) => {\n            node.remove();\n          });\n        });\n        if (fireEvent) {\n          notifyChange(editor);\n        }\n      },\n    };\n  });\n\n  return (\n    <div className=\"relative z-(--index-wysiwyg) w-full\">\n      <LexicalComposer initialConfig={fullInitialConfig}>\n        <EditorRefPlugin editorRef={editorRef} />\n        <CustomAutoLinkPlugin />\n        <CustomLinkPlugin />\n        <HorizontalRulePlugin />\n        <ListPlugin />\n        {debounceChange && <LazyOnChangePlugin wait={debounceChange} onChange={onChange} />}\n        <HistoryPlugin />\n\n        <ToolbarContext>\n          <div\n            ref={onRef}\n            data-color=\"gray\"\n            className={clsx(\"relative mx-auto w-full\", containerClassName)}\n          >\n            <ToolbarPlugin\n              extendedToolbar={extendedToolbar}\n              sticky={toolbarSticky}\n              visible={toolbarVisible}\n              setIsLinkEditMode={setIsLinkEditMode}\n            />\n            {floatingAnchorElem && (\n              <FloatingLinkEditorPlugin\n                floatingPosition={floatingPosition}\n                anchorElem={floatingAnchorElem}\n                isLinkEditMode={isLinkEditMode}\n                setIsLinkEditMode={setIsLinkEditMode}\n              />\n            )}\n            {children}\n            <RichTextPlugin\n              contentEditable={\n                <ContentEditable\n                  id={id}\n                  autoComplete=\"off\"\n                  aria-disabled={disabled}\n                  aria-readonly={readOnly}\n                  {...(proseCompact ? { \"data-compact\": true } : {})}\n                  className={clsx(\n                    \"prose\",\n                    contentEditableStyles[contentEditableBaseStyle],\n                    contentEditableClassName,\n                  )}\n                ></ContentEditable>\n              }\n              ErrorBoundary={LexicalErrorBoundary}\n            />\n          </div>\n        </ToolbarContext>\n      </LexicalComposer>\n    </div>\n  );\n}\n","import { createEditor, SerializedEditorState } from \"lexical\";\nimport { editorConfig } from \"./editor\";\n\nexport function isPlausibleLexicalState(state: unknown): state is SerializedEditorState {\n  if (typeof state !== \"object\" || state === null) return false;\n  const root = (state as { root?: unknown }).root;\n  return (\n    typeof root === \"object\" &&\n    root !== null &&\n    (root as { type?: unknown }).type === \"root\" &&\n    Array.isArray((root as { children?: unknown }).children)\n  );\n}\n\n// non utilisée directement dans le flux de validation actuel : `generateHtmlFromLexicalState`\n// (via `stateToHtml`) appelle déjà `editor.parseEditorState` en interne, ce qui\n// fournit la même garantie en évitant un second parse. Conservée comme utilitaire public\n// pour un appelant qui voudrait valider sans avoir besoin du HTML généré.\nexport function isValidLexicalState(state: unknown): state is SerializedEditorState {\n  try {\n    const editor = createEditor({\n      ...editorConfig,\n      onError(err) {\n        throw err;\n      },\n    });\n    editor.parseEditorState(state as SerializedEditorState);\n    return true;\n  } catch {\n    return false;\n  }\n}\n","import { SerializedEditorState } from \"lexical\";\nimport { z } from \"zod/v4-mini\";\nimport { isPlausibleLexicalState } from \"./config/validation\";\n\nexport type WysiwygValue = {\n  html?: string;\n  state: SerializedEditorState;\n};\n\nconst maxContentBytes = 100_000; // à trancher ensemble\n\nexport const wysiwygSchema = z.object({\n  html: z.optional(z.string()),\n  state: z\n    .custom<SerializedEditorState>(isPlausibleLexicalState)\n    .check(z.refine((state) => JSON.stringify(state).length <= maxContentBytes)),\n});\n\n// renvoie `undefined` (convention Zod pour \"absent\", cf. z.optional()) plutôt que `null`\n// (convention Conform) : c'est au point d'appel `useControl.parse` d'adapter avec `?? null`\nexport function parseStringifiedWysiwygValue(payload: unknown) {\n  if (payload == null || payload === \"\") {\n    return null;\n  }\n  if (typeof payload === \"object\") {\n    return payload as WysiwygValue;\n  }\n  if (typeof payload !== \"string\") {\n    return null;\n  }\n\n  try {\n    return JSON.parse(payload) as WysiwygValue;\n  } catch {\n    // JSON corrompu (ex. donnée persistée avant une migration de schéma) : on dégrade\n    // gracieusement vers \"absent\" plutôt que de faire planter le rendu du champ.\n    return null;\n  }\n}\n\n// trie récursivement les clés des objets rencontrés afin que deux states lexical\n// sémantiquement identiques mais générés avec un ordre de clés différent produisent\n// la même chaîne (nécessaire pour une comparaison isDirty fiable)\nfunction sortKeysReplacer(_key: string, value: unknown): unknown {\n  if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n    return Object.keys(value as Record<string, unknown>)\n      .sort()\n      .reduce<Record<string, unknown>>((sorted, key) => {\n        sorted[key] = (value as Record<string, unknown>)[key];\n        return sorted;\n      }, {});\n  }\n  return value;\n}\n\nexport function serializeWysiwygValue(value: unknown): string | null {\n  try {\n    return value == null\n      ? null\n      : typeof value === \"string\"\n        ? value\n        : JSON.stringify({ state: (value as WysiwygValue).state }, sortKeysReplacer);\n  } catch {\n    return null;\n  }\n}\n\nexport function isWysiwygStateEmpty(value: WysiwygValue) {\n  return value.state.root.children.length === 0;\n}\n","import { useField, useControl, type FieldName } from \"@conform-to/react/future\";\nimport { Field, type FieldProps } from \"../field/Field\";\nimport type { RefObject } from \"react\";\nimport type { ToolbarVariantProps } from \"./style\";\nimport type { WysiwygRef } from \"./Wysiwyg\";\nimport { Wysiwyg } from \"./Wysiwyg\";\nimport { parseStringifiedWysiwygValue, serializeWysiwygValue, WysiwygValue } from \"./types\";\n\ninterface Props extends Omit<FieldProps, \"errors\" | \"children\" | \"group\"> {\n  name: FieldName<WysiwygValue | undefined | null>;\n  ref?: RefObject<WysiwygRef>;\n  debounceChange?: number | false;\n  toolbarSticky?: ToolbarVariantProps[\"sticky\"];\n  contentEditableClassName?: string;\n  containerClassName?: string;\n  disabled?: boolean;\n  readOnly?: boolean;\n}\n\nexport function WysiwygField({\n  name,\n  ref,\n  debounceChange = false,\n  toolbarSticky,\n  contentEditableClassName,\n  containerClassName,\n  disabled = false,\n  readOnly = false,\n  id: forcedId,\n  ...rest\n}: Props) {\n  const field = useField(name);\n  const id = forcedId ?? field.id;\n  const itemErrors = Object.values(field.fieldErrors).flat();\n  const errors = field.errors ?? (itemErrors.length > 0 ? itemErrors : undefined);\n\n  const control = useControl<WysiwygValue, string>({\n    // on utiliserait defaultPayload si on construisait un composant fieldset.\n    // ici on a uniquement un input text\n    defaultValue: field.defaultValue,\n    // useControl attend `null` (pas `undefined`) pour signaler l'absence de valeur\n    parse: (payload) => parseStringifiedWysiwygValue(payload) ?? null,\n    serialize: serializeWysiwygValue,\n  });\n\n  function handleChange(value: WysiwygValue) {\n    control.change(value);\n  }\n\n  return (\n    <>\n      <input\n        name={field.name}\n        type=\"text\"\n        autoComplete=\"off\"\n        tabIndex={-1}\n        ref={control.register}\n        defaultValue={control.defaultValue ?? \"\"}\n        disabled={disabled}\n        readOnly={readOnly}\n        hidden\n      />\n      <Field id={id} errors={errors} data-testid={field.name} {...rest}>\n        <Wysiwyg\n          key={field.key}\n          ref={ref}\n          defaultValue={control.payload ?? undefined}\n          onChange={handleChange}\n          debounceChange={debounceChange}\n          toolbarSticky={toolbarSticky}\n          contentEditableClassName={contentEditableClassName}\n          containerClassName={containerClassName}\n          disabled={disabled}\n          readOnly={readOnly}\n        />\n      </Field>\n    </>\n  );\n}\n","import { useMemo } from \"react\";\nimport clsx from \"clsx\";\n\nimport { stateToHtml } from \"./config/html\";\nimport type { WysiwygValue } from \"./types\";\n\ninterface Props {\n  value: WysiwygValue;\n  proseCompact?: boolean;\n  className?: string;\n}\n\nexport function WysiwygReader({ value, proseCompact = false, className }: Props) {\n  const html = useMemo(() => value.html ?? stateToHtml(value.state), [value.html, value.state]);\n\n  return (\n    <div\n      className={clsx(className ?? \"prose\")}\n      {...(proseCompact ? { \"data-compact\": true } : {})}\n      dangerouslySetInnerHTML={{ __html: html }}\n    />\n  );\n}\n","import { SerializedEditorState } from \"lexical\";\n\nexport function isStateEmpty(state: SerializedEditorState): boolean {\n  const children = state.root.children as Array<{ children?: unknown[] }>;\n  return children.every((node) => (node.children?.length ?? 0) === 0);\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { CAN_USE_BEFORE_INPUT, IS_APPLE_WEBKIT, IS_IOS, IS_SAFARI } from \"@lexical/utils\";\nimport {\n  $getSelection,\n  $isRangeSelection,\n  COMMAND_PRIORITY_CRITICAL,\n  KEY_ENTER_COMMAND,\n} from \"lexical\";\nimport { useEffect } from \"react\";\n\ninterface SubmitOnEnterPluginProps {\n  /**\n   * When true, Shift+Enter or Ctrl+Enter submits the form and Enter inserts\n   * a newline (inverse of the default Enter-to-submit behavior).\n   */\n  submitOnShiftOrCtrlEnter?: boolean;\n}\n\nexport function SubmitOnEnterPlugin({\n  submitOnShiftOrCtrlEnter = false,\n}: SubmitOnEnterPluginProps) {\n  const [editor] = useLexicalComposerContext();\n  useEffect(() => {\n    return editor.registerCommand<KeyboardEvent | null>(\n      KEY_ENTER_COMMAND,\n      (event) => {\n        const selection = $getSelection();\n        if (!$isRangeSelection(selection)) {\n          return false;\n        }\n\n        if (event !== null) {\n          // If we have beforeinput, then we can avoid blocking\n          // the default behavior. This ensures that the iOS can\n          // intercept that we're actually inserting a paragraph,\n          // and autocomplete, autocapitalize etc work as intended.\n          // This can also cause a strange performance issue in\n          // Safari, where there is a noticeable pause due to\n          // preventing the key down of enter.\n          /**\n           * Warning: when you use devtools the browser UserAgent is modified and\n           * all constants are true.\n           */\n          if ((IS_IOS || IS_SAFARI || IS_APPLE_WEBKIT) && CAN_USE_BEFORE_INPUT) {\n            return false;\n          }\n          event.preventDefault();\n          if (submitOnShiftOrCtrlEnter ? !(event.shiftKey || event.ctrlKey) : event.shiftKey) {\n            return false;\n          }\n        }\n\n        const form = document.activeElement?.closest<HTMLFormElement>(\"form\");\n        form?.requestSubmit();\n        return true;\n      },\n      COMMAND_PRIORITY_CRITICAL,\n    );\n  }, [editor, submitOnShiftOrCtrlEnter]);\n  return null;\n}\n"],"mappings":"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"}