@pstdio/ui 0.19.0 → 0.20.1
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.
- package/dist/{MermaidComponent-BPiVFNYK.js → MermaidComponent-BVMyKttu.js} +3 -3
- package/dist/{MermaidComponent-BPiVFNYK.js.map → MermaidComponent-BVMyKttu.js.map} +1 -1
- package/dist/browser-storage-DPtOQJx0.js +127 -0
- package/dist/browser-storage-DPtOQJx0.js.map +1 -0
- package/dist/chat-ui.js +19 -20
- package/dist/chat-ui.js.map +1 -1
- package/dist/components/data-table/data-table-header.d.ts +3 -1
- package/dist/components/data-table/edit-mode-data-table-body.d.ts +29 -0
- package/dist/components/data-table/edit-mode-data-table-cell.d.ts +15 -0
- package/dist/components/data-table/edit-mode-data-table-editors.d.ts +19 -0
- package/dist/components/data-table/edit-mode-data-table-header.d.ts +23 -0
- package/dist/components/data-table/edit-mode-data-table-selection.d.ts +12 -0
- package/dist/components/data-table/edit-mode-data-table.d.ts +2 -0
- package/dist/components/data-table/edit-mode-story.d.ts +5 -0
- package/dist/components/data-table/index.d.ts +1 -1
- package/dist/components/data-table/pagination-footer.d.ts +8 -5
- package/dist/components/data-table/types.d.ts +24 -0
- package/dist/components/diff-viewer/code-editor.d.ts +2 -0
- package/dist/components/diff-viewer/file-change-badge.d.ts +3 -0
- package/dist/components/diff-viewer/file-list-panel.d.ts +0 -1
- package/dist/components/diff-viewer/index.d.ts +1 -0
- package/dist/components/param-editor/param-editor.types.d.ts +2 -0
- package/dist/components/rich-text/index.d.ts +2 -0
- package/dist/components/rich-text/markdown-editor/markdown-editor.d.ts +7 -0
- package/dist/components/rich-text/markdown-editor/markdown-table.story-fixture.d.ts +3 -0
- package/dist/components/rich-text/markdown-editor/plugins/MarkdownSectionNavigationPlugin.d.ts +8 -0
- package/dist/components/rich-text/markdown-editor/plugins/MarkdownSlashCommandPlugin.d.ts +1 -0
- package/dist/components/rich-text/markdown-editor/plugins/markdown-history-plugin.d.ts +1 -0
- package/dist/components/rich-text/markdown-editor/plugins/markdown-section-navigation.d.ts +20 -0
- package/dist/components/rich-text/rich-message/rich-message.d.ts +2 -0
- package/dist/components/rich-text/shared/markdown-ast.d.ts +6 -0
- package/dist/components/rich-text/shared/markdown-codec.d.ts +3 -0
- package/dist/components/rich-text/shared/markdown-export.d.ts +2 -0
- package/dist/components/rich-text/shared/markdown-import.d.ts +2 -0
- package/dist/components/rich-text/shared/markdown-inline.d.ts +5 -0
- package/dist/components/rich-text/shared/markdown-table.d.ts +41 -0
- package/dist/components/rich-text/shared/markdown-url-context.d.ts +9 -0
- package/dist/components/rich-text/shared/markdown-url.d.ts +3 -0
- package/dist/components/rich-text/shared/nodes/DataTableNode.d.ts +13 -11
- package/dist/components/rich-text/shared/nodes/MarkdownImageNode.d.ts +35 -0
- package/dist/components/rich-text/shared/nodes/MarkdownLinkNode.d.ts +18 -0
- package/dist/components/rich-text/shared/nodes/RawHtmlNode.d.ts +31 -0
- package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/floating-toolbar-buttons.d.ts +4 -2
- package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.d.ts +1 -1
- package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.d.ts +1 -1
- package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +1 -0
- package/dist/components/rich-text/shared/transformers/markdown-transformers.d.ts +2 -3
- package/dist/components/tree-list/tree-list-background.d.ts +8 -0
- package/dist/components/tree-list/tree-list-drag.d.ts +7 -0
- package/dist/components/tree-list/tree-list-inline-creation-story.d.ts +3 -0
- package/dist/components/tree-list/tree-list-inline-input.d.ts +9 -0
- package/dist/components/tree-list/tree-list-move-surface.d.ts +7 -0
- package/dist/components/tree-list/tree-list-node-row.d.ts +1 -0
- package/dist/components/tree-list/tree-list.d.ts +2 -0
- package/dist/components/tree-list/tree-list.types.d.ts +13 -0
- package/dist/data-table.js +723 -923
- package/dist/data-table.js.map +1 -1
- package/dist/diff.js +796 -815
- package/dist/diff.js.map +1 -1
- package/dist/edit-mode-data-table-D6NeiDJx.js +775 -0
- package/dist/edit-mode-data-table-D6NeiDJx.js.map +1 -0
- package/dist/editor-config-D9OksZ93.js +2416 -0
- package/dist/editor-config-D9OksZ93.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +326 -353
- package/dist/index.js.map +1 -1
- package/dist/{kanban-renderer-toolbar-Bcj_N1qr.js → kanban-renderer-toolbar-CpegGbwq.js} +359 -361
- package/dist/kanban-renderer-toolbar-CpegGbwq.js.map +1 -0
- package/dist/kanban-renderer.js +28 -27
- package/dist/kanban-renderer.js.map +1 -1
- package/dist/{lazy-markdown-editor-DwhqQ-NN.js → lazy-markdown-editor-B7uP2ALS.js} +2 -2
- package/dist/{lazy-markdown-editor-DwhqQ-NN.js.map → lazy-markdown-editor-B7uP2ALS.js.map} +1 -1
- package/dist/{list-row-BtoVJpFs.js → list-row-9oxy-F0v.js} +229 -254
- package/dist/list-row-9oxy-F0v.js.map +1 -0
- package/dist/{mermaid-renderer-DZo3qj6D.js → mermaid-renderer-H3IhLqnQ.js} +3 -3
- package/dist/{mermaid-renderer-DZo3qj6D.js.map → mermaid-renderer-H3IhLqnQ.js.map} +1 -1
- package/dist/mermaid.js +1 -1
- package/dist/number-input-WUfejtNx.js +343 -0
- package/dist/number-input-WUfejtNx.js.map +1 -0
- package/dist/{param-editor-XRjSu6MT.js → param-editor-B8Ff9Nm8.js} +2 -2
- package/dist/{param-editor-XRjSu6MT.js.map → param-editor-B8Ff9Nm8.js.map} +1 -1
- package/dist/param-editor-field-Cu4pto_a.js +2845 -0
- package/dist/param-editor-field-Cu4pto_a.js.map +1 -0
- package/dist/rich-message-DdFYRzTo.js +658 -0
- package/dist/rich-message-DdFYRzTo.js.map +1 -0
- package/dist/rich-text.js +182 -110
- package/dist/rich-text.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/theme/recipes/button.d.ts +11 -0
- package/dist/theme/recipes/input.d.ts +32 -0
- package/dist/{theme-7PDdD9OD.js → theme-BH4fSst9.js} +44 -1
- package/dist/theme-BH4fSst9.js.map +1 -0
- package/dist/{theme-preference-DOzHx64J.js → theme-preference-DyymrYpR.js} +2 -2
- package/dist/{theme-preference-DOzHx64J.js.map → theme-preference-DyymrYpR.js.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/tree-list-uV4UFj0x.js +1116 -0
- package/dist/tree-list-uV4UFj0x.js.map +1 -0
- package/package.json +9 -1
- package/dist/browser-storage-BinyFNJX.js +0 -40
- package/dist/browser-storage-BinyFNJX.js.map +0 -1
- package/dist/checkbox-B2zYVemL.js +0 -70
- package/dist/checkbox-B2zYVemL.js.map +0 -1
- package/dist/components/data-table/editable-cells-story.d.ts +0 -9
- package/dist/kanban-renderer-toolbar-Bcj_N1qr.js.map +0 -1
- package/dist/list-row-BtoVJpFs.js.map +0 -1
- package/dist/markdown-DDd2ESoH.js +0 -743
- package/dist/markdown-DDd2ESoH.js.map +0 -1
- package/dist/markdown-editor-CYVkzt8t.js +0 -741
- package/dist/markdown-editor-CYVkzt8t.js.map +0 -1
- package/dist/param-editor-field-B9lEPq8c.js +0 -3028
- package/dist/param-editor-field-B9lEPq8c.js.map +0 -1
- package/dist/resource-badge-CuItchgL.js +0 -98
- package/dist/resource-badge-CuItchgL.js.map +0 -1
- package/dist/rich-message--eRzjWYK.js +0 -730
- package/dist/rich-message--eRzjWYK.js.map +0 -1
- package/dist/scroll-area-BMbg1WcD.js +0 -91
- package/dist/scroll-area-BMbg1WcD.js.map +0 -1
- package/dist/theme-7PDdD9OD.js.map +0 -1
- package/dist/tree-list-B2L0cTj2.js +0 -1033
- package/dist/tree-list-B2L0cTj2.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-config-D9OksZ93.js","sources":["../src/components/rich-text/shared/components/content-editable.tsx","../src/components/rich-text/markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkNode.tsx","../src/components/rich-text/markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkTransformer.ts","../src/components/rich-text/theme/rich-text-theme.tsx","../src/components/rich-text/shared/markdown-ast.ts","../src/components/rich-text/shared/markdown-url.ts","../src/components/rich-text/shared/markdown-url-context.tsx","../src/components/rich-text/shared/nodes/MarkdownImageNode.tsx","../src/components/rich-text/shared/nodes/MarkdownLinkNode.ts","../src/components/rich-text/shared/nodes/RawHtmlNode.tsx","../src/components/rich-text/shared/plugins/EquationPlugin/EquationNode.tsx","../src/components/rich-text/shared/plugins/HorizontalRulePlugin/HorizontalRuleNode.ts","../src/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.tsx","../src/components/rich-text/shared/markdown-export.ts","../src/components/rich-text/shared/markdown-import.ts","../src/components/rich-text/shared/plugins/CodePlugin/CodeBlockActionsPlugin.tsx","../src/components/rich-text/shared/plugins/CodePlugin/CodeBlockPlugin.tsx","../src/components/rich-text/shared/plugins/CodePlugin/CodeHighlightingPlugin.tsx","../src/components/rich-text/shared/plugins/EquationPlugin/EquationPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/commands.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/getSelectedNode.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/floating-toolbar-buttons.tsx","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/should-show-floating-toolbar.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatToolbarPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/link-editor-content.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/link-edit-state.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/selection-link-url.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/url.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/LinkEditorPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/LinkPlugin.tsx","../src/components/rich-text/shared/plugins/ToggleEditablePlugin.tsx","../src/components/rich-text/shared/plugins/TreeViewPlugin/TreeViewPlugin.tsx","../src/components/rich-text/utils/markdown.ts","../src/components/rich-text/markdown-editor/plugins/markdown-section-navigation.ts","../src/components/rich-text/markdown-editor/plugins/MarkdownSectionNavigationPlugin.tsx","../src/components/rich-text/shared/markdown-table.ts","../src/components/rich-text/markdown-editor/plugins/MarkdownSlashCommandPlugin.tsx","../src/components/rich-text/markdown-editor/plugins/markdown-history-plugin.tsx","../src/components/rich-text/markdown-editor/markdown-editor.tsx","../src/components/rich-text/shared/markdown-inline.tsx","../src/components/rich-text/shared/nodes/DataTableNode.tsx","../src/components/rich-text/shared/plugins/HorizontalRulePlugin/horizontalRule.ts","../src/components/rich-text/shared/transformers/markdown-transformers.ts","../src/components/rich-text/shared/editor-config.ts"],"sourcesContent":["import { Box, chakra } from \"@chakra-ui/react\";\nimport { ContentEditable as LexicalContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nconst StyledEditable = chakra(LexicalContentEditable);\n\ninterface ContentEditableProps {\n onRef?: (elem: HTMLDivElement) => void;\n fullWidth?: boolean;\n padding?: string;\n isRichMessage?: boolean;\n scrollable?: boolean;\n}\n\nexport function ContentEditable({\n onRef,\n fullWidth = false,\n padding,\n isRichMessage = false,\n scrollable = true,\n}: ContentEditableProps) {\n const editor = (\n <Box ref={onRef} width=\"100%\" minH=\"100%\" padding={padding}>\n <StyledEditable\n data-testid=\"content-editable\"\n height=\"fit-content\"\n minH=\"100%\"\n width=\"100%\"\n maxWidth={fullWidth ? \"100%\" : \"45rem\"}\n marginInline={fullWidth ? \"0\" : \"auto\"}\n textStyle=\"paragraph/M/regular\"\n fontSize=\"calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale))\"\n position=\"relative\"\n outline=\"none\"\n />\n </Box>\n );\n\n if (!scrollable) return editor;\n\n return (\n <ScrollArea\n className=\"rich-text\"\n data-rich-message={isRichMessage ? \"true\" : undefined}\n height=\"100%\"\n minH=\"0\"\n position=\"relative\"\n contentProps={{ width: \"100%\", minH: \"100%\" }}\n >\n {editor}\n </ScrollArea>\n );\n}\n","import { Box } from \"@chakra-ui/react\";\nimport {\n DecoratorNode,\n type EditorConfig,\n type LexicalEditor,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from \"lexical\";\nimport type { ReactElement } from \"react\";\nimport { ResourceBadge } from \"@/components/primitives/resource-badge\";\n\nexport type SerializedReferenceLinkNode = Spread<\n {\n href: string;\n label?: string;\n },\n SerializedLexicalNode\n>;\n\nexport class ReferenceLinkNode extends DecoratorNode<ReactElement> {\n __href: string;\n __label?: string;\n\n static getType(): string {\n return \"reference-link\";\n }\n\n static clone(node: ReferenceLinkNode): ReferenceLinkNode {\n return new ReferenceLinkNode(node.__href, node.__label, node.__key);\n }\n\n constructor(href: string, label?: string, key?: NodeKey) {\n super(key);\n this.__href = href;\n this.__label = label;\n }\n\n createDOM(_config: EditorConfig, _editor: LexicalEditor): HTMLElement {\n return document.createElement(\"span\");\n }\n\n updateDOM(_prevNode: ReferenceLinkNode, _dom: HTMLElement, _config: EditorConfig): boolean {\n return false;\n }\n\n getTextContent(): string {\n const label = this.__label ?? this.__href;\n return `{{link('${label}')}}`;\n }\n\n exportJSON(): SerializedReferenceLinkNode {\n return {\n type: ReferenceLinkNode.getType(),\n version: 1,\n href: this.__href,\n label: this.__label,\n };\n }\n\n static importJSON(serializedNode: SerializedReferenceLinkNode): ReferenceLinkNode {\n return $createReferenceLinkNode(serializedNode.href, serializedNode.label);\n }\n\n decorate(_editor: LexicalEditor, _config: EditorConfig): ReactElement {\n const href = this.__href;\n const fileName = href.split(\"/\").pop();\n const label = fileName || \"unknown\";\n const isExternal = /^https?:\\/\\//i.test(href);\n const isProjectFile = /^#?\\$PROJECT\\//i.test(href);\n\n return (\n <Box width=\"fit-content\" display=\"inline-block\">\n <ResourceBadge\n fileName={label}\n onSelect={() => {\n if (isExternal) {\n window.open(href, \"_blank\", \"noopener,noreferrer\");\n } else if (isProjectFile) {\n const projectPath = href.replace(/^#?\\$PROJECT\\//i, \"\");\n const event = new CustomEvent(\"ui:open-project-file\", { detail: projectPath });\n window.dispatchEvent(event);\n } else {\n window.location.assign(href);\n }\n }}\n />\n </Box>\n );\n }\n}\n\nexport function $createReferenceLinkNode(href: string, label?: string): ReferenceLinkNode {\n return new ReferenceLinkNode(href, label);\n}\n\nexport function $isReferenceLinkNode(node: LexicalNode | null | undefined): node is ReferenceLinkNode {\n return node instanceof ReferenceLinkNode;\n}\n","import type { TextMatchTransformer } from \"@lexical/markdown\";\nimport { $createReferenceLinkNode, $isReferenceLinkNode, ReferenceLinkNode } from \"./ReferenceLinkNode\";\n\n// Matches {{link('xxx')}} or {{ link(\"xxx\") }}\nconst LINK_REGEXP = /\\{\\{\\s*link\\((['\"])([^'\"\\s]+)\\1\\)\\s*\\}\\}/;\n\nexport const REFERENCE_LINK_TRANSFORMER: TextMatchTransformer = {\n dependencies: [ReferenceLinkNode],\n export: (node) => {\n if ($isReferenceLinkNode(node)) {\n const href = (node as ReferenceLinkNode).__href;\n const label = (node as ReferenceLinkNode).__label ?? href;\n // Export back to token form so markdown roundtrips\n if (label) {\n return `{{link('${label}')}}`;\n }\n return `{{link('${href}')}}`;\n }\n return null;\n },\n regExp: LINK_REGEXP,\n importRegExp: LINK_REGEXP,\n replace: (textNode, match) => {\n const value = match[2];\n // For now we assume value is both label and href; if it looks like a URL, use as href.\n const looksLikeUrl = /^(https?:\\/\\/|\\/)/i.test(value);\n const href = looksLikeUrl ? value : `#${value}`;\n const label = value;\n textNode.replace($createReferenceLinkNode(href, label));\n },\n type: \"text-match\",\n};\n","import type { EditorThemeClasses } from \"lexical\";\n\nimport \"./rich-text-theme.css\";\n\nconst theme: EditorThemeClasses = {\n code: \"rich-text__code\",\n codeHighlight: {\n atrule: \"rich-text__tokenAttr\",\n attr: \"rich-text__tokenAttr\",\n boolean: \"rich-text__tokenProperty\",\n builtin: \"rich-text__tokenSelector\",\n cdata: \"rich-text__tokenComment\",\n char: \"rich-text__tokenSelector\",\n class: \"rich-text__tokenFunction\",\n \"class-name\": \"rich-text__tokenFunction\",\n comment: \"rich-text__tokenComment\",\n constant: \"rich-text__tokenProperty\",\n deleted: \"rich-text__tokenProperty\",\n doctype: \"rich-text__tokenComment\",\n entity: \"rich-text__tokenOperator\",\n function: \"rich-text__tokenFunction\",\n important: \"rich-text__tokenVariable\",\n inserted: \"rich-text__tokenSelector\",\n keyword: \"rich-text__tokenAttr\",\n namespace: \"rich-text__tokenVariable\",\n number: \"rich-text__tokenProperty\",\n operator: \"rich-text__tokenOperator\",\n prolog: \"rich-text__tokenComment\",\n property: \"rich-text__tokenProperty\",\n punctuation: \"rich-text__tokenPunctuation\",\n regex: \"rich-text__tokenVariable\",\n selector: \"rich-text__tokenSelector\",\n string: \"rich-text__tokenSelector\",\n symbol: \"rich-text__tokenProperty\",\n tag: \"rich-text__tokenProperty\",\n url: \"rich-text__tokenOperator\",\n variable: \"rich-text__tokenVariable\",\n },\n embedBlock: {\n base: \"rich-text__embedBlock\",\n focus: \"rich-text__embedBlockFocus\",\n },\n list: {\n checklist: \"rich-text__checklist\",\n listitem: \"rich-text__listItem\",\n listitemChecked: \"rich-text__listItemChecked\",\n listitemUnchecked: \"rich-text__listItemUnchecked\",\n nested: {\n listitem: \"rich-text__nestedListItem\",\n },\n olDepth: [\"rich-text__ol1\", \"rich-text__ol2\", \"rich-text__ol3\", \"rich-text__ol4\", \"rich-text__ol5\"],\n ol: \"rich-text__ol\",\n ul: \"rich-text__ul\",\n },\n heading: {\n h1: \"rich-text__h1\",\n h2: \"rich-text__h2\",\n h3: \"rich-text__h3\",\n },\n paragraph: \"rich-text__p\",\n text: {\n underline: \"rich-text__textUnderline\",\n italic: \"rich-text__textItalic\",\n code: \"rich-text__textCode\",\n },\n link: \"rich-text__link\",\n quote: \"rich-text__quote\",\n reference: \"rich-text__reference\",\n table: \"rich-text__table\",\n tableCell: \"rich-text__tableCell\",\n tableRow: \"rich-text__tableRow\",\n tableCellHeader: \"rich-text__tableCellHeader\",\n layoutContainer: \"rich-text__layoutContainer\",\n layoutItem: \"rich-text__layoutItem\",\n draggableBlockDemo: {\n row: \"rich-text__row\",\n content: \"rich-text__content\",\n },\n};\n\nexport default theme;\n","import type { Paragraph, PhrasingContent, Root, RootContent } from \"mdast\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { gfmFromMarkdown, gfmToMarkdown } from \"mdast-util-gfm\";\nimport { mathFromMarkdown, mathToMarkdown } from \"mdast-util-math\";\nimport { toMarkdown } from \"mdast-util-to-markdown\";\nimport { gfm } from \"micromark-extension-gfm\";\nimport { math } from \"micromark-extension-math\";\n\nconst parserOptions = {\n extensions: [gfm(), math()],\n mdastExtensions: [gfmFromMarkdown(), mathFromMarkdown()],\n};\n\nconst serializerOptions = {\n bullet: \"-\" as const,\n emphasis: \"*\" as const,\n extensions: [gfmToMarkdown(), mathToMarkdown()],\n fence: \"`\" as const,\n fences: true,\n listItemIndent: \"one\" as const,\n rule: \"-\" as const,\n strong: \"*\" as const,\n};\n\nconst fenceStart = (line: string) => line.match(/^ {0,3}(`{3,}|~{3,})/);\n\nconst normalizeLegacyInlineMath = (line: string) => {\n let codeFenceLength: number | null = null;\n let result = \"\";\n\n for (let index = 0; index < line.length; ) {\n if (line[index] === \"`\") {\n let end = index;\n while (line[end] === \"`\") end += 1;\n const length = end - index;\n\n if (codeFenceLength === null) codeFenceLength = length;\n else if (codeFenceLength === length) codeFenceLength = null;\n\n result += line.slice(index, end);\n index = end;\n continue;\n }\n\n const delimiter = line.slice(index, index + 2);\n if (codeFenceLength === null && (delimiter === \"\\\\(\" || delimiter === \"\\\\)\")) {\n result += \"$\";\n index += 2;\n continue;\n }\n if (codeFenceLength === null && (delimiter === \"\\\\[\" || delimiter === \"\\\\]\")) {\n result += \"$$\";\n index += 2;\n continue;\n }\n\n result += line[index];\n index += 1;\n }\n\n return result;\n};\n\nconst normalizeLegacyMath = (markdown: string) => {\n let fencedCode: { character: string; length: number } | null = null;\n const normalized: string[] = [];\n\n for (const line of markdown.split(\"\\n\")) {\n if (fencedCode) {\n normalized.push(line);\n const closingFence = line.match(/^ {0,3}(`+|~+)[ \\t]*$/)?.[1];\n if (closingFence?.[0] === fencedCode.character && closingFence.length >= fencedCode.length) {\n fencedCode = null;\n }\n continue;\n }\n\n const openingFence = fenceStart(line)?.[1];\n if (openingFence) {\n fencedCode = { character: openingFence[0] ?? \"`\", length: openingFence.length };\n normalized.push(line);\n continue;\n }\n\n const displayMath = line.match(/^( {0,3})\\\\\\[\\s*(.*?)\\s*\\\\\\][ \\t]*$/);\n if (displayMath) {\n const indent = displayMath[1] ?? \"\";\n normalized.push(`${indent}$$`, displayMath[2] ?? \"\", `${indent}$$`);\n continue;\n }\n\n if (/^ {0,3}\\\\\\[[ \\t]*$/.test(line)) {\n normalized.push(line.replace(\"\\\\[\", () => \"$$\"));\n continue;\n }\n if (/^ {0,3}\\\\\\][ \\t]*$/.test(line)) {\n normalized.push(line.replace(\"\\\\]\", () => \"$$\"));\n continue;\n }\n\n normalized.push(normalizeLegacyInlineMath(line));\n }\n\n return normalized.join(\"\\n\");\n};\n\nexport const parseMarkdown = (markdown: string) => fromMarkdown(normalizeLegacyMath(markdown), parserOptions);\n\nexport const serializeMarkdownAst = (tree: Root) => toMarkdown(tree, serializerOptions).trimEnd();\n\nexport const serializeMarkdownBlock = (node: RootContent) => serializeMarkdownAst({ type: \"root\", children: [node] });\n\nexport const serializeMarkdownInline = (children: PhrasingContent[]) => {\n const paragraph: Paragraph = { type: \"paragraph\", children };\n return serializeMarkdownBlock(paragraph);\n};\n\nexport const parseMarkdownInline = (markdown: string) => {\n const tree = parseMarkdown(markdown);\n const first = tree.children[0];\n\n return first?.type === \"paragraph\" || first?.type === \"heading\" ? first.children : [];\n};\n","export type MarkdownUrlKind = \"link\" | \"image\";\n\nexport type MarkdownUrlResolver = (source: string, kind: MarkdownUrlKind) => string | null;\n\nconst SAFE_LINK_PROTOCOLS = new Set([\"http:\", \"https:\", \"mailto:\", \"sms:\", \"tel:\"]);\nconst SAFE_IMAGE_DATA_URL = /^data:image\\/(?:png|gif|jpeg|webp);base64,[a-z0-9+/=]+$/i;\nconst PROTOCOL = /^[a-z][a-z\\d+.-]*:/i;\n\nconst hasSafeLinkProtocol = (source: string) => {\n if (source.startsWith(\"#\") || source.startsWith(\"/\") || source.startsWith(\"./\") || source.startsWith(\"../\")) {\n return true;\n }\n\n if (!PROTOCOL.test(source)) return true;\n\n try {\n return SAFE_LINK_PROTOCOLS.has(new URL(source).protocol);\n } catch {\n return false;\n }\n};\n\nconst hasSafeImageProtocol = (source: string) => {\n if (source.startsWith(\"https://\")) return true;\n return SAFE_IMAGE_DATA_URL.test(source);\n};\n\nexport const resolveMarkdownUrl = (source: string, kind: MarkdownUrlKind, resolver?: MarkdownUrlResolver) => {\n const resolved = resolver ? resolver(source, kind) : source;\n if (resolved === null) return null;\n\n if (kind === \"image\") {\n const sourceIsRelative = !PROTOCOL.test(source);\n if (sourceIsRelative && !resolver) return null;\n return hasSafeImageProtocol(resolved) ? resolved : null;\n }\n\n return hasSafeLinkProtocol(resolved) ? resolved : null;\n};\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport type { MarkdownUrlResolver } from \"./markdown-url\";\n\nconst MarkdownUrlContext = createContext<MarkdownUrlResolver | undefined>(undefined);\n\ninterface MarkdownUrlProviderProps {\n children: ReactNode;\n resolver?: MarkdownUrlResolver;\n}\n\nexport const MarkdownUrlProvider = (props: MarkdownUrlProviderProps) => {\n const { children, resolver } = props;\n return <MarkdownUrlContext.Provider value={resolver}>{children}</MarkdownUrlContext.Provider>;\n};\n\nexport const useMarkdownUrlResolver = () => useContext(MarkdownUrlContext);\n","import { Box, Image, Text } from \"@chakra-ui/react\";\nimport {\n $applyNodeReplacement,\n $getNodeByKey,\n $getSelection,\n $isRangeSelection,\n DecoratorNode,\n type LexicalEditor,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from \"lexical\";\nimport type { ReactNode } from \"react\";\nimport { resolveMarkdownUrl } from \"../markdown-url\";\nimport { useMarkdownUrlResolver } from \"../markdown-url-context\";\n\nexport type SerializedMarkdownImageNode = Spread<\n { source: string; alt: string; title: string | null },\n SerializedLexicalNode\n>;\n\ninterface MarkdownImageProps {\n source: string;\n alt: string;\n title: string | null;\n onLoad?: () => void;\n}\n\nexport const MarkdownImage = (props: MarkdownImageProps) => {\n const { source, alt, title, onLoad } = props;\n const resolver = useMarkdownUrlResolver();\n const resolved = resolveMarkdownUrl(source, \"image\", resolver);\n\n if (!resolved) {\n return (\n <Box as=\"span\" display=\"inline-block\" paddingX=\"xs\" paddingY=\"2xs\" background=\"bg.muted\" borderRadius=\"sm\">\n <Text as=\"span\" textStyle=\"label/S/regular\" color=\"fg.muted\">\n {alt || \"Image\"}\n </Text>\n </Box>\n );\n }\n\n return (\n <Image\n src={resolved}\n alt={alt}\n title={title ?? undefined}\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n onLoad={onLoad}\n />\n );\n};\n\nexport class MarkdownImageNode extends DecoratorNode<ReactNode> {\n __source: string;\n __alt: string;\n __title: string | null;\n\n static getType() {\n return \"markdown-image\";\n }\n\n static clone(node: MarkdownImageNode) {\n return new MarkdownImageNode(node.__source, node.__alt, node.__title, node.__key);\n }\n\n constructor(source: string, alt: string, title: string | null = null, key?: NodeKey) {\n super(key);\n this.__source = source;\n this.__alt = alt;\n this.__title = title;\n }\n\n createDOM() {\n return document.createElement(\"span\");\n }\n\n updateDOM() {\n return false;\n }\n\n isInline() {\n return true;\n }\n\n getSource() {\n return this.__source;\n }\n\n getAlt() {\n return this.__alt;\n }\n\n getTitle() {\n return this.__title;\n }\n\n getTextContent() {\n return this.__alt;\n }\n\n exportJSON(): SerializedMarkdownImageNode {\n return {\n type: \"markdown-image\",\n version: 1,\n source: this.__source,\n alt: this.__alt,\n title: this.__title,\n };\n }\n\n static importJSON(node: SerializedMarkdownImageNode) {\n return $createMarkdownImageNode(node.source, node.alt, node.title);\n }\n\n decorate(editor: LexicalEditor) {\n const keepFollowingSelectionVisible = () => {\n if (!editor.isEditable()) return;\n\n let selectedBlockKey: NodeKey | null = null;\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n const imageNode = $getNodeByKey(this.getKey());\n if (!$isRangeSelection(selection) || !selection.isCollapsed() || !imageNode) return;\n\n const imageBlock = imageNode.getTopLevelElement();\n const followingBlock = imageBlock?.getNextSibling();\n const followingBlockKey = followingBlock?.getKey();\n const selectionBlock = selection.anchor.getNode().getTopLevelElement();\n if (followingBlockKey && followingBlockKey === selectionBlock?.getKey()) {\n selectedBlockKey = followingBlockKey;\n }\n });\n\n const blockKey = selectedBlockKey;\n if (!blockKey) return;\n requestAnimationFrame(() => {\n editor.getElementByKey(blockKey)?.scrollIntoView({ block: \"end\" });\n });\n };\n\n return (\n <MarkdownImage\n source={this.__source}\n alt={this.__alt}\n title={this.__title}\n onLoad={keepFollowingSelectionVisible}\n />\n );\n }\n}\n\nexport const $createMarkdownImageNode = (source: string, alt: string, title: string | null = null) =>\n $applyNodeReplacement(new MarkdownImageNode(source, alt, title));\n\nexport const $isMarkdownImageNode = (node: LexicalNode | null | undefined): node is MarkdownImageNode =>\n node instanceof MarkdownImageNode;\n","import { type LinkAttributes, LinkNode, type SerializedLinkNode } from \"@lexical/link\";\nimport {\n $applyNodeReplacement,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from \"lexical\";\nimport { type MarkdownUrlResolver, resolveMarkdownUrl } from \"../markdown-url\";\n\nexport type SerializedMarkdownLinkNode = Spread<{ source: string }, Spread<SerializedLinkNode, SerializedLexicalNode>>;\n\nconst safeLinkUrl = (source: string, resolver?: MarkdownUrlResolver) =>\n resolveMarkdownUrl(source, \"link\", resolver) ?? \"about:blank\";\n\nexport class MarkdownLinkNode extends LinkNode {\n __source: string;\n\n static getType() {\n return \"markdown-link\";\n }\n\n static clone(node: MarkdownLinkNode) {\n return new MarkdownLinkNode(\n node.__source,\n node.__url,\n { rel: node.__rel, target: node.__target, title: node.__title },\n node.__key,\n );\n }\n\n constructor(source = \"\", resolvedUrl?: string | null, attributes?: LinkAttributes, key?: NodeKey) {\n super(resolvedUrl ?? safeLinkUrl(source), attributes, key);\n this.__source = source;\n }\n\n getSource() {\n return this.__source;\n }\n\n setURL(url: string) {\n const writable = this.getWritable();\n writable.__source = url;\n writable.__url = safeLinkUrl(url);\n return writable;\n }\n\n exportJSON(): SerializedMarkdownLinkNode {\n return {\n ...super.exportJSON(),\n source: this.__source,\n type: \"markdown-link\",\n version: 1,\n };\n }\n\n static importJSON(node: SerializedMarkdownLinkNode) {\n return $createMarkdownLinkNode(node.source, undefined, {\n rel: node.rel,\n target: node.target,\n title: node.title,\n });\n }\n}\n\nexport const $createMarkdownLinkNode = (source: string, resolver?: MarkdownUrlResolver, attributes?: LinkAttributes) =>\n $applyNodeReplacement(new MarkdownLinkNode(source, safeLinkUrl(source, resolver), attributes));\n\nexport const $isMarkdownLinkNode = (node: LexicalNode | null | undefined): node is MarkdownLinkNode =>\n node instanceof MarkdownLinkNode;\n","import DOMPurify from \"dompurify\";\nimport {\n $applyNodeReplacement,\n DecoratorNode,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from \"lexical\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport { resolveMarkdownUrl } from \"../markdown-url\";\nimport { useMarkdownUrlResolver } from \"../markdown-url-context\";\n\nexport type RawHtmlDisplay = \"inline\" | \"block\";\n\nexport type SerializedRawHtmlNode = Spread<{ source: string; display: RawHtmlDisplay }, SerializedLexicalNode>;\n\nconst isHtmlComment = (source: string) => /^<!--[\\s\\S]*-->$/.test(source.trim());\n\nconst sanitizeMarkdownHtml = (source: string, resolver: ReturnType<typeof useMarkdownUrlResolver>) => {\n if (typeof document === \"undefined\") return null;\n\n const clean = DOMPurify.sanitize(source, {\n FORBID_TAGS: [\"script\", \"style\", \"iframe\", \"object\", \"embed\", \"form\", \"input\", \"button\", \"textarea\", \"select\"],\n });\n const template = document.createElement(\"template\");\n template.innerHTML = clean;\n\n for (const element of template.content.querySelectorAll<HTMLElement>(\"[href], [src]\")) {\n const attribute = element.hasAttribute(\"href\") ? \"href\" : \"src\";\n const kind = attribute === \"href\" ? \"link\" : \"image\";\n const sourceUrl = element.getAttribute(attribute) ?? \"\";\n const resolved = resolveMarkdownUrl(sourceUrl, kind, resolver);\n\n if (resolved) element.setAttribute(attribute, resolved);\n else element.removeAttribute(attribute);\n }\n\n return template.content;\n};\n\ninterface RawHtmlProps {\n source: string;\n display: RawHtmlDisplay;\n}\n\nexport const RawHtml = (props: RawHtmlProps) => {\n const { source, display } = props;\n const resolver = useMarkdownUrlResolver();\n const elementRef = useRef<HTMLElement | null>(null);\n const attachElement = (element: HTMLElement | null) => {\n elementRef.current = element;\n };\n\n useEffect(() => {\n const fragment = sanitizeMarkdownHtml(source, resolver);\n const element = elementRef.current;\n if (!element) return;\n\n element.replaceChildren(fragment ? fragment.cloneNode(true) : document.createTextNode(\"\"));\n }, [resolver, source]);\n\n if (isHtmlComment(source)) return null;\n if (display === \"inline\") return <span ref={attachElement} />;\n return <div ref={attachElement} />;\n};\n\nexport class RawHtmlNode extends DecoratorNode<ReactNode> {\n __source: string;\n __display: RawHtmlDisplay;\n\n static getType() {\n return \"raw-html\";\n }\n\n static clone(node: RawHtmlNode) {\n return new RawHtmlNode(node.__source, node.__display, node.__key);\n }\n\n constructor(source: string, display: RawHtmlDisplay, key?: NodeKey) {\n super(key);\n this.__source = source;\n this.__display = display;\n }\n\n createDOM() {\n return document.createElement(this.__display === \"inline\" ? \"span\" : \"div\");\n }\n\n updateDOM(previous: RawHtmlNode) {\n return previous.__display !== this.__display;\n }\n\n isInline() {\n return this.__display === \"inline\";\n }\n\n getSource() {\n return this.__source;\n }\n\n getDisplay() {\n return this.__display;\n }\n\n getTextContent() {\n return isHtmlComment(this.__source) ? \"\" : this.__source;\n }\n\n exportJSON(): SerializedRawHtmlNode {\n return {\n type: \"raw-html\",\n version: 1,\n source: this.__source,\n display: this.__display,\n };\n }\n\n static importJSON(node: SerializedRawHtmlNode) {\n return $createRawHtmlNode(node.source, node.display);\n }\n\n decorate() {\n return <RawHtml source={this.__source} display={this.__display} />;\n }\n}\n\nexport const $createRawHtmlNode = (source: string, display: RawHtmlDisplay) =>\n $applyNodeReplacement(new RawHtmlNode(source, display));\n\nexport const $isRawHtmlNode = (node: LexicalNode | null | undefined): node is RawHtmlNode =>\n node instanceof RawHtmlNode;\n","import katex from \"katex\";\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from \"lexical\";\nimport { $applyNodeReplacement, DecoratorNode, type DOMExportOutput } from \"lexical\";\nimport * as React from \"react\";\nimport { Suspense } from \"react\";\n\nconst EquationComponent = React.lazy(() => import(\"./EquationComponent\"));\n\nexport type SerializedEquationNode = Spread<\n {\n equation: string;\n inline: boolean;\n },\n SerializedLexicalNode\n>;\n\nfunction $convertEquationElement(domNode: HTMLElement): null | DOMConversionOutput {\n let equation = domNode.getAttribute(\"data-lexical-equation\");\n const inline = domNode.getAttribute(\"data-lexical-inline\") === \"true\";\n\n // Decode the equation from base64\n equation = atob(equation || \"\");\n\n if (equation) {\n const node = $createEquationNode(equation, inline);\n return { node };\n }\n\n return null;\n}\n\nexport class EquationNode extends DecoratorNode<React.ReactNode> {\n __equation: string;\n __inline: boolean;\n\n static getType(): string {\n return \"equation\";\n }\n\n static clone(node: EquationNode): EquationNode {\n return new EquationNode(node.__equation, node.__inline, node.__key);\n }\n\n constructor(equation: string, inline?: boolean, key?: NodeKey) {\n super(key);\n this.__equation = equation;\n this.__inline = inline ?? false;\n }\n\n static importJSON(serializedNode: SerializedEquationNode): EquationNode {\n return $createEquationNode(serializedNode.equation, serializedNode.inline);\n }\n\n exportJSON(): SerializedEquationNode {\n return {\n equation: this.getEquation(),\n inline: this.__inline,\n type: \"equation\",\n version: 1,\n };\n }\n\n createDOM(_config: EditorConfig): HTMLElement {\n const element = document.createElement(this.__inline ? \"span\" : \"div\");\n\n // EquationNodes should implement `user-action:none` in their CSS to avoid issues with deletion on Android.\n element.className = \"editor-equation\";\n return element;\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement(this.__inline ? \"span\" : \"div\");\n\n // Encode the equation as base64 to avoid issues with special characters\n const equation = btoa(this.__equation);\n element.setAttribute(\"data-lexical-equation\", equation);\n element.setAttribute(\"data-lexical-inline\", `${this.__inline}`);\n katex.render(this.__equation, element, {\n displayMode: !this.__inline, // true === block display //\n errorColor: \"#cc0000\",\n output: \"html\",\n strict: \"warn\",\n throwOnError: false,\n trust: false,\n });\n\n return { element };\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div: (domNode: HTMLElement) => {\n if (!domNode.hasAttribute(\"data-lexical-equation\")) {\n return null;\n }\n\n return {\n conversion: $convertEquationElement,\n priority: 2,\n };\n },\n span: (domNode: HTMLElement) => {\n if (!domNode.hasAttribute(\"data-lexical-equation\")) {\n return null;\n }\n\n return {\n conversion: $convertEquationElement,\n priority: 1,\n };\n },\n };\n }\n\n updateDOM(prevNode: EquationNode): boolean {\n // If the inline property changes, replace the element\n return this.__inline !== prevNode.__inline;\n }\n\n getTextContent(): string {\n return this.__equation;\n }\n\n getEquation(): string {\n return this.__equation;\n }\n\n setEquation(equation: string): void {\n const writable = this.getWritable();\n writable.__equation = equation;\n }\n\n isInline(): boolean {\n return this.__inline;\n }\n\n decorate() {\n return (\n <Suspense fallback={null}>\n <EquationComponent equation={this.__equation} inline={this.__inline} />\n </Suspense>\n );\n }\n}\n\nexport function $createEquationNode(equation = \"\", inline = false): EquationNode {\n const equationNode = new EquationNode(equation, inline);\n return $applyNodeReplacement(equationNode);\n}\n\nexport function $isEquationNode(node: LexicalNode | null | undefined): node is EquationNode {\n return node instanceof EquationNode;\n}\n","import {\n type EditorConfig,\n ElementNode,\n type LexicalEditor,\n type LexicalNode,\n type SerializedElementNode,\n type Spread,\n} from \"lexical\";\n\nexport type SerializedHRNode = Spread<SerializedElementNode, SerializedElementNode>;\n\nexport class HRNode extends ElementNode {\n static getType() {\n return \"hr\";\n }\n\n static clone(node: HRNode) {\n return new HRNode(node?.__key);\n }\n\n static importJSON(_serializedNode: SerializedHRNode) {\n return $createHRNode();\n }\n\n exportJSON(): SerializedHRNode {\n return {\n ...super.exportJSON(),\n };\n }\n\n createDOM(_config: EditorConfig, _editor: LexicalEditor): HTMLElement {\n const element = document.createElement(\"hr\");\n element.style = \"margin: 2rem 0;\";\n return element;\n }\n\n updateDOM(_prevNode: unknown, _dom: HTMLElement, _config: EditorConfig): boolean {\n return false;\n }\n\n decorate(_editor: LexicalEditor) {\n return null;\n }\n}\n\nexport function $createHRNode(): HRNode {\n return new HRNode();\n}\n\nexport function $isHRNode(node: LexicalNode | null | undefined): node is HRNode {\n return node instanceof HRNode;\n}\n","import type { LexicalNode, NodeKey, SerializedLexicalNode } from \"lexical\";\nimport { $applyNodeReplacement, DecoratorNode } from \"lexical\";\nimport type { ReactNode } from \"react\";\nimport { lazy, Suspense } from \"react\";\n\nconst MermaidComponent = lazy(() => import(\"./MermaidComponent\"));\n\nexport interface SerializedMermaidNode extends SerializedLexicalNode {\n type: \"mermaid\";\n code: string;\n version: 1;\n}\n\nexport class MermaidNode extends DecoratorNode<ReactNode> {\n __code: string;\n\n static getType() {\n return \"mermaid\";\n }\n\n static clone(node: MermaidNode) {\n return new MermaidNode(node.__code, node.__key);\n }\n\n constructor(code: string, key?: NodeKey) {\n super(key);\n this.__code = code;\n }\n\n createDOM() {\n return document.createElement(\"div\");\n }\n\n updateDOM() {\n return false;\n }\n\n static importJSON(serializedNode: SerializedMermaidNode): MermaidNode {\n return new MermaidNode(serializedNode.code);\n }\n\n exportJSON(): SerializedMermaidNode {\n return {\n type: \"mermaid\",\n code: this.__code,\n version: 1,\n };\n }\n\n getTextContent() {\n return `\\`\\`\\`mermaid\\n${this.__code}\\n\\`\\`\\``;\n }\n\n getCode() {\n return this.__code;\n }\n\n setCode(code: string) {\n const writable = this.getWritable();\n writable.__code = code;\n }\n\n decorate() {\n return (\n <Suspense fallback={null}>\n <MermaidComponent code={this.__code} nodeKey={this.__key} />\n </Suspense>\n );\n }\n}\n\nexport function $isMermaidNode(node: LexicalNode | null | undefined): node is MermaidNode {\n return node instanceof MermaidNode;\n}\n\nexport function $createMermaidNode(code: string) {\n return $applyNodeReplacement(new MermaidNode(code));\n}\n","import { $isLinkNode } from \"@lexical/link\";\nimport { $isListItemNode, $isListNode, type ListItemNode, type ListNode } from \"@lexical/list\";\nimport { $isHeadingNode, $isQuoteNode } from \"@lexical/rich-text\";\nimport {\n $isElementNode,\n $isLineBreakNode,\n $isParagraphNode,\n $isTextNode,\n type ElementNode,\n type LexicalNode,\n type TextNode,\n} from \"lexical\";\nimport type { BlockContent, ListItem, Paragraph, PhrasingContent, Root, Table, TableCell } from \"mdast\";\nimport { $isReferenceLinkNode } from \"../markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkNode\";\nimport { $isCodeNode } from \"./lexical-code\";\nimport { parseMarkdownInline, serializeMarkdownAst } from \"./markdown-ast\";\nimport { $isDataTableNode, type DataTableNode } from \"./nodes/DataTableNode\";\nimport { $isMarkdownImageNode } from \"./nodes/MarkdownImageNode\";\nimport { $isMarkdownLinkNode } from \"./nodes/MarkdownLinkNode\";\nimport { $isRawHtmlNode } from \"./nodes/RawHtmlNode\";\nimport { $isEquationNode } from \"./plugins/EquationPlugin/EquationNode\";\nimport { $isHRNode } from \"./plugins/HorizontalRulePlugin/HorizontalRuleNode\";\nimport { $isMermaidNode } from \"./plugins/MermaidPlugin/MermaidNode\";\n\nconst exportText = (node: TextNode) => {\n let content: PhrasingContent = node.hasFormat(\"code\")\n ? { type: \"inlineCode\", value: node.getTextContent() }\n : { type: \"text\", value: node.getTextContent() };\n\n if (!node.hasFormat(\"code\")) {\n if (node.hasFormat(\"bold\")) content = { type: \"strong\", children: [content] };\n if (node.hasFormat(\"italic\")) content = { type: \"emphasis\", children: [content] };\n if (node.hasFormat(\"strikethrough\")) content = { type: \"delete\", children: [content] };\n }\n\n if (node.hasFormat(\"underline\")) {\n return [\n { type: \"html\", value: \"<ins>\" } as PhrasingContent,\n content,\n { type: \"html\", value: \"</ins>\" } as PhrasingContent,\n ];\n }\n\n return [content];\n};\n\nconst exportInlineNode = (node: LexicalNode): PhrasingContent[] => {\n if ($isTextNode(node)) return exportText(node);\n if ($isLineBreakNode(node)) return [{ type: \"break\" }];\n if ($isMarkdownImageNode(node)) {\n return [{ type: \"image\", url: node.getSource(), alt: node.getAlt(), title: node.getTitle() }];\n }\n if ($isEquationNode(node) && node.isInline()) return [{ type: \"inlineMath\", value: node.getEquation() }];\n if ($isRawHtmlNode(node)) return [{ type: \"html\", value: node.getSource() }];\n if ($isReferenceLinkNode(node)) return [{ type: \"text\", value: node.getTextContent() }];\n\n if ($isLinkNode(node)) {\n return [\n {\n type: \"link\",\n url: $isMarkdownLinkNode(node) ? node.getSource() : node.getURL(),\n title: node.getTitle(),\n children: exportInlineChildren(node),\n },\n ];\n }\n\n if ($isElementNode(node)) return exportInlineChildren(node);\n const value = node.getTextContent();\n return value ? [{ type: \"text\", value }] : [];\n};\n\nconst exportInlineChildren = (node: ElementNode) => node.getChildren().flatMap(exportInlineNode);\n\nconst paragraphFrom = (node: ElementNode): Paragraph => ({\n type: \"paragraph\",\n children: exportInlineChildren(node),\n});\n\nconst exportListItem = (node: ListItemNode): ListItem => {\n const children: BlockContent[] = [];\n const inline: PhrasingContent[] = [];\n\n for (const child of node.getChildren()) {\n if ($isListNode(child)) {\n if (inline.length) children.push({ type: \"paragraph\", children: inline.splice(0) });\n children.push(exportList(child));\n } else if ($isParagraphNode(child)) {\n if (inline.length) children.push({ type: \"paragraph\", children: inline.splice(0) });\n children.push(paragraphFrom(child));\n } else {\n inline.push(...exportInlineNode(child));\n }\n }\n\n if (inline.length || children.length === 0) children.unshift({ type: \"paragraph\", children: inline });\n\n return {\n type: \"listItem\",\n checked: node.getChecked(),\n spread: false,\n children,\n };\n};\n\nconst exportList = (node: ListNode) => ({\n type: \"list\" as const,\n ordered: node.getListType() === \"number\",\n start: node.getListType() === \"number\" ? node.getStart() : null,\n spread: false,\n children: node.getChildren().filter($isListItemNode).map(exportListItem),\n});\n\nconst tableCell = (value: string): TableCell => ({\n type: \"tableCell\",\n children: parseMarkdownInline(value),\n});\n\nconst exportTable = (node: DataTableNode): Table => {\n const table = node.getTable();\n return {\n type: \"table\",\n align: table.columns.map((column) => column.alignment),\n children: [\n {\n type: \"tableRow\",\n children: table.columns.map((column) => tableCell(column.label)),\n },\n ...table.rows.map((row) => ({\n type: \"tableRow\" as const,\n children: table.columns.map((column) => tableCell(row.cells[column.id] ?? \"\")),\n })),\n ],\n };\n};\n\nconst exportBlock = (node: LexicalNode): BlockContent | null => {\n if ($isParagraphNode(node)) return paragraphFrom(node);\n if ($isHeadingNode(node)) {\n return {\n type: \"heading\",\n depth: Number(node.getTag().slice(1)) as 1 | 2 | 3 | 4 | 5 | 6,\n children: exportInlineChildren(node),\n };\n }\n if ($isQuoteNode(node)) {\n return {\n type: \"blockquote\",\n children: node\n .getChildren()\n .map(exportBlock)\n .filter((child) => child !== null),\n };\n }\n if ($isListNode(node)) return exportList(node);\n if ($isCodeNode(node)) {\n return { type: \"code\", lang: node.getLanguage() || null, meta: null, value: node.getTextContent() };\n }\n if ($isMermaidNode(node)) return { type: \"code\", lang: \"mermaid\", meta: null, value: node.getCode() };\n if ($isEquationNode(node)) return { type: \"math\", meta: null, value: node.getEquation() };\n if ($isHRNode(node)) return { type: \"thematicBreak\" };\n if ($isDataTableNode(node)) return exportTable(node);\n if ($isRawHtmlNode(node)) return { type: \"html\", value: node.getSource() };\n if ($isElementNode(node)) return paragraphFrom(node);\n\n const value = node.getTextContent();\n return value ? { type: \"paragraph\", children: [{ type: \"text\", value }] } : null;\n};\n\nexport const exportLexicalToMarkdown = (root: ElementNode) => {\n const tree: Root = {\n type: \"root\",\n children: root\n .getChildren()\n .map(exportBlock)\n .filter((node) => node !== null),\n };\n return serializeMarkdownAst(tree);\n};\n","import { $createListItemNode, $createListNode } from \"@lexical/list\";\nimport { $createHeadingNode, $createQuoteNode } from \"@lexical/rich-text\";\nimport {\n $createLineBreakNode,\n $createParagraphNode,\n $createTextNode,\n $getRoot,\n type ElementNode,\n type LexicalNode,\n type TextFormatType,\n} from \"lexical\";\nimport type { Definition, ImageReference, LinkReference, PhrasingContent, RootContent, Table } from \"mdast\";\nimport { $createReferenceLinkNode } from \"../markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkNode\";\nimport { $createCodeNode } from \"./lexical-code\";\nimport { parseMarkdown, serializeMarkdownBlock, serializeMarkdownInline } from \"./markdown-ast\";\nimport type { MarkdownTableAlignment, MarkdownTableValue } from \"./markdown-table\";\nimport type { MarkdownUrlResolver } from \"./markdown-url\";\nimport { $createDataTableNode } from \"./nodes/DataTableNode\";\nimport { $createMarkdownImageNode } from \"./nodes/MarkdownImageNode\";\nimport { $createMarkdownLinkNode } from \"./nodes/MarkdownLinkNode\";\nimport { $createRawHtmlNode } from \"./nodes/RawHtmlNode\";\nimport { $createEquationNode } from \"./plugins/EquationPlugin/EquationNode\";\nimport { $createHRNode } from \"./plugins/HorizontalRulePlugin/HorizontalRuleNode\";\nimport { $createMermaidNode } from \"./plugins/MermaidPlugin/MermaidNode\";\n\ninterface ImportContext {\n definitions: Map<string, Definition>;\n resolver?: MarkdownUrlResolver;\n tableIndex: number;\n}\n\nconst REFERENCE_TOKEN = /\\{\\{\\s*link\\((['\"])([^'\"\\s]+)\\1\\)\\s*\\}\\}/g;\n\nconst formattedText = (value: string, formats: Set<TextFormatType>) => {\n const node = $createTextNode(value);\n for (const format of formats) node.toggleFormat(format);\n return node;\n};\n\nconst textWithReferences = (value: string, formats: Set<TextFormatType>) => {\n const nodes: LexicalNode[] = [];\n let start = 0;\n\n for (const match of value.matchAll(REFERENCE_TOKEN)) {\n const index = match.index ?? 0;\n if (index > start) nodes.push(formattedText(value.slice(start, index), formats));\n const label = match[2] ?? \"\";\n const href = /^(?:https?:\\/\\/|\\/)/i.test(label) ? label : `#${label}`;\n nodes.push($createReferenceLinkNode(href, label));\n start = index + match[0].length;\n }\n\n if (start < value.length) nodes.push(formattedText(value.slice(start), formats));\n return nodes;\n};\n\nconst referenceDefinition = (node: LinkReference | ImageReference, context: ImportContext) =>\n context.definitions.get(node.identifier.toLowerCase());\n\nfunction importInlineNode(node: PhrasingContent, context: ImportContext, formats: Set<TextFormatType>) {\n switch (node.type) {\n case \"text\":\n return textWithReferences(node.value, formats);\n case \"strong\":\n return importInlineChildren(node.children, context, new Set([...formats, \"bold\"]));\n case \"emphasis\":\n return importInlineChildren(node.children, context, new Set([...formats, \"italic\"]));\n case \"delete\":\n return importInlineChildren(node.children, context, new Set([...formats, \"strikethrough\"]));\n case \"inlineCode\":\n return [formattedText(node.value, new Set([...formats, \"code\"]))];\n case \"break\":\n return [$createLineBreakNode()];\n case \"link\": {\n const link = $createMarkdownLinkNode(node.url, context.resolver, { title: node.title });\n link.append(...importInlineChildren(node.children, context, formats));\n return [link];\n }\n case \"linkReference\": {\n const definition = referenceDefinition(node, context);\n if (!definition) return [formattedText(serializeMarkdownInline([node]), formats)];\n const link = $createMarkdownLinkNode(definition.url, context.resolver, { title: definition.title });\n link.append(...importInlineChildren(node.children, context, formats));\n return [link];\n }\n case \"image\":\n return [$createMarkdownImageNode(node.url, node.alt ?? \"\", node.title ?? null)];\n case \"imageReference\": {\n const definition = referenceDefinition(node, context);\n if (!definition) return [formattedText(serializeMarkdownInline([node]), formats)];\n return [$createMarkdownImageNode(definition.url, node.alt ?? \"\", definition.title ?? null)];\n }\n case \"inlineMath\":\n return [$createEquationNode(node.value, true)];\n case \"html\":\n return [$createRawHtmlNode(node.value, \"inline\")];\n default:\n return [formattedText(serializeMarkdownInline([node]), formats)];\n }\n}\n\nfunction importInlineChildren(\n children: PhrasingContent[],\n context: ImportContext,\n formats = new Set<TextFormatType>(),\n) {\n const nodes: LexicalNode[] = [];\n let underlineDepth = 0;\n\n for (const node of children) {\n if (node.type === \"html\" && /^<(?:ins|u)>$/i.test(node.value.trim())) {\n underlineDepth += 1;\n continue;\n }\n if (node.type === \"html\" && /^<\\/(?:ins|u)>$/i.test(node.value.trim())) {\n underlineDepth = Math.max(underlineDepth - 1, 0);\n continue;\n }\n\n const activeFormats = new Set(formats);\n if (underlineDepth > 0) activeFormats.add(\"underline\");\n nodes.push(...importInlineNode(node, context, activeFormats));\n }\n\n return nodes;\n}\n\nconst tableValue = (table: Table, context: ImportContext): MarkdownTableValue => {\n context.tableIndex += 1;\n const prefix = `table-${context.tableIndex}`;\n const header = table.children[0];\n const columnCount = Math.max(header?.children.length ?? 0, 1);\n const columns = Array.from({ length: columnCount }, (_, index) => ({\n id: `${prefix}-column-${index + 1}`,\n label: header?.children[index] ? serializeMarkdownInline(header.children[index].children) : \"\",\n alignment: (table.align?.[index] ?? null) as MarkdownTableAlignment,\n }));\n const rows = table.children.slice(1).map((row, rowIndex) => ({\n id: `${prefix}-row-${rowIndex + 1}`,\n cells: Object.fromEntries(\n columns.map((column, columnIndex) => [\n column.id,\n row.children[columnIndex] ? serializeMarkdownInline(row.children[columnIndex].children) : \"\",\n ]),\n ),\n }));\n\n return { columns, rows };\n};\n\nconst appendListItem = (parent: ElementNode, node: RootContent, context: ImportContext) => {\n if (node.type !== \"listItem\") return;\n const item = $createListItemNode(node.checked ?? undefined);\n parent.append(item);\n\n for (const child of node.children) {\n if (child.type === \"paragraph\") item.append(...importInlineChildren(child.children, context));\n else if (child.type === \"list\") appendBlock(item, child, context);\n else item.append(formattedText(serializeMarkdownBlock(child), new Set()));\n }\n};\n\nconst appendBlock = (parent: ElementNode, node: RootContent, context: ImportContext) => {\n switch (node.type) {\n case \"paragraph\": {\n const paragraph = $createParagraphNode();\n paragraph.append(...importInlineChildren(node.children, context));\n parent.append(paragraph);\n break;\n }\n case \"heading\": {\n const heading = $createHeadingNode(`h${node.depth}`);\n heading.append(...importInlineChildren(node.children, context));\n parent.append(heading);\n break;\n }\n case \"blockquote\": {\n const quote = $createQuoteNode();\n parent.append(quote);\n for (const child of node.children) appendBlock(quote, child, context);\n break;\n }\n case \"list\": {\n const hasTasks = node.children.some((item) => item.checked !== null && item.checked !== undefined);\n let listType: \"bullet\" | \"check\" | \"number\" = \"bullet\";\n if (node.ordered) listType = \"number\";\n else if (hasTasks) listType = \"check\";\n const list = $createListNode(listType, node.start ?? 1);\n parent.append(list);\n for (const item of node.children) appendListItem(list, item, context);\n break;\n }\n case \"code\":\n parent.append(\n node.lang === \"mermaid\"\n ? $createMermaidNode(node.value)\n : $createCodeNode(node.lang ?? undefined).append($createTextNode(node.value)),\n );\n break;\n case \"math\":\n parent.append($createEquationNode(node.value, false));\n break;\n case \"thematicBreak\":\n parent.append($createHRNode());\n break;\n case \"table\":\n parent.append($createDataTableNode(tableValue(node, context)));\n break;\n case \"html\":\n parent.append($createRawHtmlNode(node.value, \"block\"));\n break;\n case \"definition\":\n break;\n default: {\n const paragraph = $createParagraphNode();\n paragraph.append($createTextNode(serializeMarkdownBlock(node)));\n parent.append(paragraph);\n }\n }\n};\n\nexport const importMarkdownToLexical = (markdown: string, resolver?: MarkdownUrlResolver) => {\n const tree = parseMarkdown(markdown);\n const definitions = new Map(\n tree.children\n .filter((node): node is Definition => node.type === \"definition\")\n .map((node) => [node.identifier.toLowerCase(), node]),\n );\n const context: ImportContext = { definitions, resolver, tableIndex: 0 };\n const root = $getRoot();\n root.clear();\n\n for (const node of tree.children) appendBlock(root, node, context);\n};\n","import \"./CodeBlockActionsPlugin.css\";\n\nimport { IconButton } from \"@chakra-ui/react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_CRITICAL, SELECTION_CHANGE_COMMAND } from \"lexical\";\nimport { Check, Copy } from \"lucide-react\";\nimport type React from \"react\";\nimport { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { $isCodeNode } from \"../../lexical-code\";\n\nfunction getCodeElementFromSelection(editor: ReturnType<typeof useLexicalComposerContext>[0]) {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return null;\n }\n\n const anchorNode = selection.anchor.getNode();\n const codeNode = $isCodeNode(anchorNode)\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n return $isCodeNode(node);\n });\n\n if (!$isCodeNode(codeNode)) {\n return null;\n }\n\n const codeElement = editor.getElementByKey(codeNode.getKey());\n return codeElement instanceof HTMLElement ? codeElement : null;\n}\n\nfunction getCodeElementFromTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) {\n return null;\n }\n\n return target.closest(\".rich-text__code\");\n}\n\nfunction getActionPosition(anchorElem: HTMLElement, codeElement: HTMLElement) {\n const anchorRect = anchorElem.getBoundingClientRect();\n const codeRect = codeElement.getBoundingClientRect();\n\n return {\n top: codeRect.top - anchorRect.top + 6,\n left: codeRect.right - anchorRect.left - 30,\n };\n}\n\nexport function CodeBlockActionsPlugin({ anchorElem }: { anchorElem?: HTMLElement | null }): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [activeCodeElement, setActiveCodeElement] = useState<HTMLElement | null>(null);\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n const rootElement = editor.getRootElement();\n if (!rootElement) {\n return;\n }\n\n const handlePointerMove = (event: PointerEvent) => {\n const nextCodeElement = getCodeElementFromTarget(event.target);\n setActiveCodeElement(nextCodeElement instanceof HTMLElement ? nextCodeElement : null);\n };\n\n const handlePointerLeave = () => {\n editor.getEditorState().read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n setActiveCodeElement(selectionCodeElement);\n });\n };\n\n rootElement.addEventListener(\"pointermove\", handlePointerMove);\n rootElement.addEventListener(\"pointerleave\", handlePointerLeave);\n\n return () => {\n rootElement.removeEventListener(\"pointermove\", handlePointerMove);\n rootElement.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }, [editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n if (selectionCodeElement) {\n setActiveCodeElement(selectionCodeElement);\n }\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n editor.getEditorState().read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n if (!selectionCodeElement) {\n setActiveCodeElement((current) => {\n return current?.matches(\":hover\") ? current : null;\n });\n return;\n }\n\n setActiveCodeElement(selectionCodeElement);\n });\n\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n );\n }, [editor]);\n\n if (!anchorElem || !activeCodeElement) {\n return null;\n }\n\n const position = getActionPosition(anchorElem, activeCodeElement);\n const style: CSSProperties = {\n position: \"absolute\",\n top: position.top,\n left: position.left,\n };\n\n return createPortal(\n <div className=\"code-block-actions\" style={style}>\n <Tooltip content={isCopied ? \"Copied\" : \"Copy code\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy code\"}\n variant=\"subtle\"\n size=\"xs\"\n onClick={async () => {\n const code = activeCodeElement.textContent ?? \"\";\n try {\n await navigator.clipboard.writeText(code);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => {\n setIsCopied(false);\n }, 1200);\n } catch {\n setIsCopied(false);\n }\n }}\n >\n {isCopied ? <Check size={14} /> : <Copy size={14} />}\n </IconButton>\n </Tooltip>\n </div>,\n anchorElem,\n );\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $nodesOfType } from \"lexical\";\nimport { useEffect } from \"react\";\nimport { CodeNode } from \"../../lexical-code\";\nimport { MermaidNode } from \"../MermaidPlugin/MermaidNode\";\n\nfunction isMermaidLanguage(language: string) {\n return language.trim().toLowerCase() === \"mermaid\";\n}\n\nexport function replaceCodeNodeWithMermaidNode(node: CodeNode) {\n const language = node.getLanguage() ?? \"plaintext\";\n if (!isMermaidLanguage(language)) {\n return false;\n }\n\n node.replace(new MermaidNode(node.getTextContent()));\n return true;\n}\n\nexport function ImportCodeBlocksPlugin() {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n editor.update(() => {\n const codeNodes = $nodesOfType(CodeNode);\n for (const n of codeNodes) {\n replaceCodeNodeWithMermaidNode(n);\n }\n });\n }, [editor]);\n\n return null;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect } from \"react\";\nimport { registerCodeHighlighting } from \"../../lexical-code\";\n\nexport function CodeHighlightingPlugin() {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return registerCodeHighlighting(editor);\n }, [editor]);\n\n return null;\n}\n","import \"./EquationPlugin.css\";\n\nimport type { MultilineElementTransformer, TextMatchTransformer } from \"@lexical/markdown\";\nimport { $createEquationNode, $isEquationNode, EquationNode } from \"./EquationNode.tsx\";\n\nexport const EQUATION_INLINE: TextMatchTransformer = {\n dependencies: [EquationNode],\n export: (node) => {\n if ($isEquationNode(node) && node.isInline()) {\n return `\\\\( ${node.getEquation().trim()} \\\\)`;\n }\n return null;\n },\n importRegExp: /\\\\\\((.*?)\\\\\\)/,\n regExp: /\\\\\\((.*?)\\\\\\)/,\n replace: (textNode, match) => {\n const equationNode = $createEquationNode(match[1].trim(), true);\n textNode.replace(equationNode);\n },\n type: \"text-match\",\n};\n\nexport const EQUATION_MULTILINE: MultilineElementTransformer = {\n dependencies: [EquationNode],\n regExpStart: /\\\\\\[/,\n regExpEnd: /\\\\]/,\n export: (node) => {\n if ($isEquationNode(node) && !node.isInline()) {\n return `\\\\[ ${node.getEquation().trim()} \\\\]`;\n }\n return null;\n },\n replace: (rootNode, _children, _startMatch, _endMatch, linesInBetween) => {\n if (linesInBetween) {\n rootNode.append($createEquationNode(linesInBetween.join(\" \"), false));\n return true;\n }\n return false;\n },\n type: \"multiline-element\",\n};\n\nexport function EquationPlugin(): null {\n return null;\n}\n","import { createCommand, type LexicalCommand } from \"lexical\";\n\nexport const TOGGLE_LINK_EDIT_MODE_COMMAND: LexicalCommand<boolean> = createCommand(\"TOGGLE_LINK_EDIT_MODE_COMMAND\");\n","import { $isAtNodeEnd } from \"@lexical/selection\";\nimport type { ElementNode, RangeSelection, TextNode } from \"lexical\";\n\nexport function getSelectedNode(selection: RangeSelection): TextNode | ElementNode {\n const anchor = selection.anchor;\n const focus = selection.focus;\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n if (anchorNode === focusNode) {\n return anchorNode;\n }\n const isBackward = selection.isBackward();\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n }\n return $isAtNodeEnd(anchor) ? anchorNode : focusNode;\n}\n","const VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPos(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n placement: \"above\" | \"legacy\" = \"legacy\",\n coordinateSpace: \"anchor\" | \"viewport\" = \"anchor\",\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 =\n coordinateSpace === \"viewport\"\n ? new DOMRect(0, 0, document.documentElement.clientWidth, document.documentElement.clientHeight)\n : scrollerElem.getBoundingClientRect();\n\n let top =\n placement === \"above\" ? targetRect.top - floatingElemRect.height - verticalGap : targetRect.top - verticalGap;\n let left = targetRect.left - horizontalOffset;\n\n if (top < editorScrollerRect.top) {\n top =\n placement === \"above\"\n ? targetRect.bottom + verticalGap\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 if (top + floatingElemRect.height > editorScrollerRect.bottom) {\n top = targetRect.top - floatingElemRect.height - Math.abs(verticalGap);\n }\n\n if (coordinateSpace === \"anchor\") {\n top -= anchorElementRect.top;\n left -= anchorElementRect.left;\n }\n\n floatingElem.style.opacity = \"1\";\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","import { IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport type { HeadingTagType } from \"@lexical/rich-text\";\nimport { FORMAT_TEXT_COMMAND, type LexicalEditor } from \"lexical\";\nimport { Code, Link as LinkIcon, List, ListOrdered, ListTodo, TextQuote } from \"lucide-react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { BlockType } from \"./resolve-block-type\";\n\ninterface FloatingToolbarButtonsProps {\n editor: LexicalEditor;\n blockType: BlockType;\n isBold: boolean;\n isItalic: boolean;\n isUnderline: boolean;\n isCode: boolean;\n isLink: boolean;\n formatHeading: (headingSize: HeadingTagType) => void;\n formatList: (type: \"bullet\" | \"number\" | \"check\") => void;\n formatQuote: () => void;\n insertLink: () => void;\n}\n\nfunction ToolbarSeparator() {\n return (\n <span\n style={{\n display: \"inline-flex\",\n height: \"1rem\",\n margin: \"0 0.25rem\",\n borderLeft: \"1px solid var(--chakra-colors-border-subtle)\",\n }}\n />\n );\n}\n\nexport function FloatingToolbarButtons(props: FloatingToolbarButtonsProps) {\n const {\n editor,\n blockType,\n isBold,\n isItalic,\n isUnderline,\n isCode,\n isLink,\n formatHeading,\n formatList,\n formatQuote,\n insertLink,\n } = props;\n\n return (\n <Stack direction=\"row\" gap=\"0.5\" alignItems=\"center\">\n <Tooltip content=\"Bold\">\n <IconButton\n data-active={isBold || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\")}\n variant=\"ghost\"\n aria-label=\"Bold\"\n size=\"xs\"\n >\n <Text fontWeight=\"bold\" fontSize=\".75rem\">\n B\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Italic\">\n <IconButton\n data-active={isItalic || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\")}\n variant=\"ghost\"\n aria-label=\"Italic\"\n size=\"xs\"\n >\n <Text fontStyle=\"italic\" fontSize=\".75rem\">\n I\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Underline\">\n <IconButton\n data-active={isUnderline || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\")}\n variant=\"ghost\"\n aria-label=\"Underline\"\n size=\"xs\"\n >\n <Text textDecoration=\"underline\" fontSize=\".75rem\">\n U\n </Text>\n </IconButton>\n </Tooltip>\n <ToolbarSeparator />\n\n <Tooltip content=\"Heading 1\">\n <IconButton\n data-active={blockType === \"h1\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 1\"\n size=\"xs\"\n onClick={() => formatHeading(\"h1\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H1\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 2\">\n <IconButton\n data-active={blockType === \"h2\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 2\"\n size=\"xs\"\n onClick={() => formatHeading(\"h2\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H2\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 3\">\n <IconButton\n data-active={blockType === \"h3\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 3\"\n size=\"xs\"\n onClick={() => formatHeading(\"h3\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H3\n </Text>\n </IconButton>\n </Tooltip>\n <ToolbarSeparator />\n\n <Tooltip content=\"Inline Code\">\n <IconButton\n data-active={isCode || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\")}\n variant=\"ghost\"\n aria-label=\"Inline Code\"\n size=\"xs\"\n >\n <Code size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content={isLink ? \"Remove Link\" : \"Insert Link\"}>\n <IconButton\n data-active={isLink || undefined}\n variant=\"ghost\"\n aria-label={isLink ? \"Remove Link\" : \"Insert Link\"}\n size=\"xs\"\n onClick={insertLink}\n >\n <LinkIcon size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Quote\">\n <IconButton\n data-active={blockType === \"quote\" || undefined}\n variant=\"ghost\"\n aria-label=\"Quote\"\n size=\"xs\"\n onClick={formatQuote}\n >\n <TextQuote size={14} />\n </IconButton>\n </Tooltip>\n\n <ToolbarSeparator />\n\n <Tooltip content=\"Bulleted List\">\n <IconButton\n data-active={blockType === \"bullet\" || undefined}\n variant=\"ghost\"\n aria-label=\"Bulleted List\"\n size=\"xs\"\n onClick={() => formatList(\"bullet\")}\n >\n <List size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Numbered List\">\n <IconButton\n data-active={blockType === \"number\" || undefined}\n variant=\"ghost\"\n aria-label=\"Numbered List\"\n size=\"xs\"\n onClick={() => formatList(\"number\")}\n >\n <ListOrdered size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Check List\">\n <IconButton\n data-active={blockType === \"check\" || undefined}\n variant=\"ghost\"\n aria-label=\"Check List\"\n size=\"xs\"\n onClick={() => formatList(\"check\")}\n >\n <ListTodo size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n}\n","import { $isListNode } from \"@lexical/list\";\nimport { $isHeadingNode } from \"@lexical/rich-text\";\nimport { $findMatchingParent } from \"@lexical/utils\";\nimport { $isRootOrShadowRoot, type LexicalNode } from \"lexical\";\n\nexport const blockTypeToBlockName = {\n bullet: \"Bulleted List\",\n check: \"Check List\",\n code: \"Code Block\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n number: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n};\n\nexport type BlockType = keyof typeof blockTypeToBlockName;\n\nconst toKnownBlockType = (type: string) => {\n return type in blockTypeToBlockName ? (type as BlockType) : null;\n};\n\nconst findSelectionElement = (anchorNode: LexicalNode) => {\n const rootMatch =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n const parent = node.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n return rootMatch ?? anchorNode.getTopLevelElementOrThrow();\n};\n\nexport const resolveBlockTypeFromAnchor = (anchorNode: LexicalNode) => {\n const element = findSelectionElement(anchorNode);\n\n if ($isListNode(element)) {\n return element.getListType() as BlockType;\n }\n\n const parentList = $findMatchingParent(anchorNode, (node) => $isListNode(node));\n if (parentList !== null && $isListNode(parentList)) {\n return parentList.getListType() as BlockType;\n }\n\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n return toKnownBlockType(type);\n};\n","interface ShouldShowFloatingToolbarParams {\n hasSelection: boolean;\n isRangeSelection: boolean;\n isCollapsed: boolean;\n hasNativeSelection: boolean;\n hasNativeRange: boolean;\n isAnchorInsideEditor: boolean;\n isEditorEditable: boolean;\n}\n\nexport function shouldShowFloatingToolbar(params: ShouldShowFloatingToolbarParams) {\n const {\n hasSelection,\n isRangeSelection,\n isCollapsed,\n hasNativeSelection,\n hasNativeRange,\n isAnchorInsideEditor,\n isEditorEditable,\n } = params;\n\n return (\n hasSelection &&\n isRangeSelection &&\n !isCollapsed &&\n hasNativeSelection &&\n hasNativeRange &&\n isAnchorInsideEditor &&\n isEditorEditable\n );\n}\n","import \"./FloatingTextFormatToolbarPlugin.css\";\n\nimport { Box } from \"@chakra-ui/react\";\nimport { $isAutoLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport {\n INSERT_CHECK_LIST_COMMAND,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n} from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createHeadingNode, $createQuoteNode, type HeadingTagType } from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n type LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { TOGGLE_LINK_EDIT_MODE_COMMAND } from \"../LinkEditorPlugin/commands\";\nimport { getSelectedNode } from \"../LinkEditorPlugin/utils/getSelectedNode\";\nimport { setFloatingElemPos } from \"../LinkEditorPlugin/utils/setFloatingElemPos\";\nimport { FloatingToolbarButtons } from \"./floating-toolbar-buttons\";\nimport { type BlockType, resolveBlockTypeFromAnchor } from \"./resolve-block-type\";\nimport { shouldShowFloatingToolbar } from \"./should-show-floating-toolbar\";\n\n// Increase the vertical gap (negative places it below the selection) to avoid overlap\nconst GAP = -4;\n\nfunction FloatingTextToolbar({\n editor,\n anchorElem,\n isToolbarActive,\n setIsToolbarActive,\n}: {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n isToolbarActive: boolean;\n setIsToolbarActive: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const [blockType, setBlockType] = useState<BlockType>(\"paragraph\");\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const [isCode, setIsCode] = useState(false);\n const [isLink, setIsLink] = useState(false);\n const updateFloatingToolbarRef = useRef<() => boolean | undefined>(() => undefined);\n\n const formatHeading = (headingSize: HeadingTagType) => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (blockType === headingSize) {\n $setBlocksType(selection, $createParagraphNode);\n return;\n }\n\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n };\n\n const formatList = (type: \"bullet\" | \"number\" | \"check\") => {\n if (blockType === type) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n return;\n }\n const command = {\n bullet: INSERT_UNORDERED_LIST_COMMAND,\n number: INSERT_ORDERED_LIST_COMMAND,\n check: INSERT_CHECK_LIST_COMMAND,\n }[type];\n editor.dispatchCommand(command, undefined);\n };\n\n const formatQuote = () => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (blockType === \"quote\") {\n $setBlocksType(selection, $createParagraphNode);\n return;\n }\n\n $setBlocksType(selection, $createQuoteNode);\n });\n };\n\n const insertLink = () => {\n if (isLink) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n return;\n }\n editor.dispatchCommand(TOGGLE_LINK_EDIT_MODE_COMMAND, true);\n };\n\n const updateToolbar = () => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n setIsBold(selection.hasFormat(\"bold\"));\n setIsItalic(selection.hasFormat(\"italic\"));\n setIsUnderline(selection.hasFormat(\"underline\"));\n setIsCode(selection.hasFormat(\"code\"));\n\n const node = getSelectedNode(selection);\n const linkParent = $findMatchingParent(node, $isLinkNode);\n const autoLinkParent = $findMatchingParent(node, $isAutoLinkNode);\n setIsLink(linkParent !== null || autoLinkParent !== null);\n\n const nextBlockType = resolveBlockTypeFromAnchor(selection.anchor.getNode());\n if (nextBlockType) {\n setBlockType(nextBlockType);\n }\n };\n\n updateFloatingToolbarRef.current = () => {\n const selection = $getSelection();\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n const hasNativeSelection = nativeSelection !== null;\n const hasNativeRange = hasNativeSelection && nativeSelection.rangeCount > 0;\n const isAnchorInsideEditor = Boolean(rootElement?.contains(hasNativeSelection ? nativeSelection.anchorNode : null));\n\n if (\n shouldShowFloatingToolbar({\n hasSelection: selection !== null,\n isRangeSelection: $isRangeSelection(selection),\n isCollapsed: $isRangeSelection(selection) ? selection.isCollapsed() : false,\n hasNativeSelection,\n hasNativeRange,\n isAnchorInsideEditor,\n isEditorEditable: editor.isEditable(),\n }) &&\n nativeSelection\n ) {\n const domRect: DOMRect | undefined = nativeSelection.getRangeAt(0).getBoundingClientRect();\n\n if (domRect) {\n // Anchor to the bottom of the selection to avoid overlap with tall selections\n const bottomRect = new DOMRect(domRect.left, domRect.bottom, 0, 0);\n setFloatingElemPos(bottomRect, editorElem, anchorElem, GAP, undefined, \"legacy\", \"viewport\");\n }\n\n setIsToolbarActive(true);\n } else {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem, undefined, undefined, \"legacy\", \"viewport\");\n }\n setIsToolbarActive(false);\n }\n\n updateToolbar();\n\n return true;\n };\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateFloatingToolbarRef.current();\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 if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [anchorElem, editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateFloatingToolbarRef.current();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload) => {\n updateFloatingToolbarRef.current();\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 updateFloatingToolbarRef.current();\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor]);\n\n return (\n <Box ref={editorRef} zIndex=\"tooltip\" className={`floating-text-format-toolbar ${isToolbarActive ? \"active\" : \"\"}`}>\n <FloatingToolbarButtons\n editor={editor}\n blockType={blockType}\n isBold={isBold}\n isItalic={isItalic}\n isUnderline={isUnderline}\n isCode={isCode}\n isLink={isLink}\n formatHeading={formatHeading}\n formatList={formatList}\n formatQuote={formatQuote}\n insertLink={insertLink}\n />\n </Box>\n );\n}\n\nexport function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [isToolbarActive, setIsToolbarActive] = useState(false);\n\n return createPortal(\n <FloatingTextToolbar\n editor={editor}\n anchorElem={anchorElem}\n isToolbarActive={isToolbarActive}\n setIsToolbarActive={setIsToolbarActive}\n />,\n document.body,\n );\n}\n","import { Link as ChakraLink, IconButton, Input, Stack } from \"@chakra-ui/react\";\nimport { Check, Pencil, Trash2, X } from \"lucide-react\";\nimport type React from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\n\ninterface LinkEditorContentProps {\n isActive: boolean;\n isLinkEditMode: boolean;\n editedLinkUrl: string;\n editedLinkUrlIsValid: boolean;\n linkUrl: string;\n href: string;\n inputRef: React.RefObject<HTMLInputElement | null>;\n onEditedLinkUrlChange: (url: string) => void;\n onInputKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n onClose: () => void;\n onSubmit: () => void;\n onEdit: () => void;\n onRemove: () => void;\n}\n\nexport function LinkEditorContent(props: LinkEditorContentProps) {\n const {\n isActive,\n isLinkEditMode,\n editedLinkUrl,\n editedLinkUrlIsValid,\n linkUrl,\n href,\n inputRef,\n onEditedLinkUrlChange,\n onInputKeyDown,\n onClose,\n onSubmit,\n onEdit,\n onRemove,\n } = props;\n\n if (!isActive) {\n return null;\n }\n\n if (isLinkEditMode) {\n return (\n <Stack className=\"link-editor-content\" direction=\"row\" gap=\"1\" alignItems=\"center\" p=\"1\">\n <Input\n ref={inputRef}\n className=\"link-editor-url-field\"\n size=\"sm\"\n fontSize=\"sm\"\n value={editedLinkUrl}\n placeholder=\"https://\"\n aria-label=\"Link URL\"\n aria-invalid={!editedLinkUrlIsValid}\n onChange={(event) => {\n onEditedLinkUrlChange(event.target.value);\n }}\n onKeyDown={onInputKeyDown}\n />\n <Tooltip content=\"Cancel\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Cancel link edit\"\n onMouseDown={preventFocusLoss}\n onClick={onClose}\n >\n <X size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Confirm\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Confirm link edit\"\n disabled={!editedLinkUrlIsValid}\n onMouseDown={preventFocusLoss}\n onClick={onSubmit}\n >\n <Check size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n }\n\n return (\n <Stack className=\"link-editor-content\" direction=\"row\" gap=\"1\" alignItems=\"center\" p=\"1\">\n <ChakraLink\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"link-editor-url-field\"\n fontSize=\"sm\"\n textDecoration=\"underline\"\n px=\"2\"\n truncate\n >\n {linkUrl}\n </ChakraLink>\n <Tooltip content=\"Edit link\">\n <IconButton variant=\"ghost\" size=\"xs\" aria-label=\"Edit link\" onMouseDown={preventFocusLoss} onClick={onEdit}>\n <Pencil size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Remove link\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Remove link\"\n onMouseDown={preventFocusLoss}\n onClick={onRemove}\n >\n <Trash2 size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n}\n\nfunction preventFocusLoss(event: React.MouseEvent) {\n event.preventDefault();\n}\n","export function shouldCancelLinkEdit(isLinkEditMode: boolean, isLink: boolean, linkUrl: string) {\n return isLinkEditMode && isLink && linkUrl === \"\";\n}\n","import { $isLinkNode } from \"@lexical/link\";\nimport { $findMatchingParent } from \"@lexical/utils\";\nimport type { RangeSelection } from \"lexical\";\nimport { getSelectedNode } from \"./getSelectedNode\";\n\nexport function getSelectionLinkUrl(selection: RangeSelection) {\n const node = getSelectedNode(selection);\n const linkParent = $findMatchingParent(node, $isLinkNode);\n\n if (linkParent) {\n return linkParent.getURL();\n }\n if ($isLinkNode(node)) {\n return node.getURL();\n }\n return \"\";\n}\n","const 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\nexport function validateUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url);\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return false;\n }\n if (parsedUrl.protocol === \"http:\" || parsedUrl.protocol === \"https:\") {\n return parsedUrl.hostname !== \"\";\n }\n return parsedUrl.pathname.trim() !== \"\";\n } catch {\n return false;\n }\n}\n","import \"./LinkEditorPlugin.css\";\n\nimport { Box } from \"@chakra-ui/react\";\nimport { $createLinkNode, $isAutoLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n $setSelection,\n type BaseSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n KEY_ESCAPE_COMMAND,\n type LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { TOGGLE_LINK_EDIT_MODE_COMMAND } from \"./commands\";\nimport { LinkEditorContent } from \"./link-editor-content\";\nimport { getSelectedNode } from \"./utils/getSelectedNode\";\nimport { shouldCancelLinkEdit } from \"./utils/link-edit-state\";\nimport { getSelectionLinkUrl } from \"./utils/selection-link-url\";\nimport { setFloatingElemPos } from \"./utils/setFloatingElemPos\";\nimport { sanitizeUrl, validateUrl } from \"./utils/url\";\n\nconst GAP = 8;\n\nfunction LinkEditor({\n editor,\n isLink,\n setIsLink,\n anchorElem,\n isLinkEditMode,\n setIsLinkEditMode,\n}: {\n editor: LexicalEditor;\n isLink: boolean;\n setIsLink: Dispatch<boolean>;\n anchorElem: HTMLElement;\n isLinkEditMode: boolean;\n setIsLinkEditMode: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const updateLinkEditorRef = useRef<() => void>(() => undefined);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const [editedLinkUrl, setEditedLinkUrl] = useState(\"https://\");\n const [lastSelection, setLastSelection] = useState<BaseSelection | null>(null);\n const isActive = isLink || isLinkEditMode;\n const editedLinkUrlIsValid = validateUrl(editedLinkUrl);\n\n updateLinkEditorRef.current = () => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const nextLinkUrl = getSelectionLinkUrl(selection);\n setLinkUrl(nextLinkUrl);\n if (shouldCancelLinkEdit(isLinkEditMode, isLink, nextLinkUrl)) {\n closeLinkEditor();\n }\n if (isLinkEditMode && nextLinkUrl !== \"\") {\n setEditedLinkUrl(nextLinkUrl);\n }\n }\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n const activeElement = document.activeElement;\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n const hasNativeRange = nativeSelection !== null && nativeSelection.rangeCount > 0;\n\n if (\n selection !== null &&\n nativeSelection !== null &&\n hasNativeRange &&\n rootElement?.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\n ) {\n const rangeRect = nativeSelection.getRangeAt(0).getBoundingClientRect();\n const topRect = new DOMRect(rangeRect.left, rangeRect.top, 0, rangeRect.height);\n setFloatingElemPos(topRect, editorElem, anchorElem, GAP, undefined, \"above\", \"viewport\");\n setLastSelection(selection);\n } else if (!editorElem.contains(activeElement)) {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem, undefined, undefined, \"legacy\", \"viewport\");\n }\n setLastSelection(null);\n setIsLinkEditMode(false);\n setLinkUrl(\"\");\n }\n };\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\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]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateLinkEditorRef.current();\n });\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateLinkEditorRef.current();\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, setIsLink, isLink]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\n });\n }, [editor]);\n\n useLayoutEffect(() => {\n if (!isActive) {\n return;\n }\n\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\n });\n }, [editor, isActive]);\n\n useEffect(() => {\n if (isLinkEditMode && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isLinkEditMode]);\n\n const monitorInputInteraction = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n handleLinkSubmission();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n closeLinkEditor();\n }\n };\n\n const closeLinkEditor = () => {\n setEditedLinkUrl(\"https://\");\n setIsLinkEditMode(false);\n };\n\n const handleLinkSubmission = () => {\n if (lastSelection === null || !editedLinkUrlIsValid) {\n return;\n }\n\n editor.update(() => {\n $setSelection(lastSelection);\n });\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(editedLinkUrl));\n editor.update(() => {\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 closeLinkEditor();\n };\n\n return (\n <Box ref={editorRef} zIndex=\"tooltip\" className={`link-editor ${isActive ? \"active\" : \"\"}`}>\n <LinkEditorContent\n isActive={isActive}\n isLinkEditMode={isLinkEditMode}\n editedLinkUrl={editedLinkUrl}\n editedLinkUrlIsValid={editedLinkUrlIsValid}\n linkUrl={linkUrl}\n href={sanitizeUrl(linkUrl)}\n inputRef={inputRef}\n onEditedLinkUrlChange={setEditedLinkUrl}\n onInputKeyDown={monitorInputInteraction}\n onClose={closeLinkEditor}\n onSubmit={handleLinkSubmission}\n onEdit={() => {\n setEditedLinkUrl(linkUrl);\n setIsLinkEditMode(true);\n }}\n onRemove={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }}\n />\n </Box>\n );\n}\n\nfunction useLinkEditorToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isLinkEditMode: boolean,\n setIsLinkEditMode: Dispatch<boolean>,\n): React.JSX.Element | null {\n const [activeEditor, setActiveEditor] = useState(editor);\n const [isLink, setIsLink] = useState(false);\n\n useEffect(() => {\n function $updateToolbar() {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const focusNode = getSelectedNode(selection);\n const focusLinkNode = $findMatchingParent(focusNode, $isLinkNode);\n const focusAutoLinkNode = $findMatchingParent(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 const autoLinkIsUnlinked = $isAutoLinkNode(autoLinkNode) && autoLinkNode.getIsUnlinked();\n return (\n (focusLinkNode && !focusLinkNode.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkNode)) ||\n (focusAutoLinkNode && !focusAutoLinkNode.is(autoLinkNode)) ||\n (autoLinkNode && (!autoLinkNode.is(focusAutoLinkNode) || autoLinkIsUnlinked))\n );\n });\n if (!badNode) {\n setIsLink(true);\n } else {\n setIsLink(false);\n }\n }\n }\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n $updateToolbar();\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection);\n const linkNode = $findMatchingParent(node, $isLinkNode);\n if ($isLinkNode(linkNode) && (payload.metaKey || payload.ctrlKey)) {\n window.open(sanitizeUrl(linkNode.getURL()), \"_blank\", \"noopener,noreferrer\");\n return true;\n }\n }\n return false;\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n TOGGLE_LINK_EDIT_MODE_COMMAND,\n (payload) => {\n setIsLinkEditMode(payload);\n return true;\n },\n COMMAND_PRIORITY_LOW,\n ),\n );\n }, [editor, setIsLinkEditMode]);\n\n return createPortal(\n <LinkEditor\n editor={activeEditor}\n isLink={isLink}\n anchorElem={anchorElem}\n setIsLink={setIsLink}\n isLinkEditMode={isLinkEditMode}\n setIsLinkEditMode={setIsLinkEditMode}\n />,\n document.body,\n );\n}\n\nexport default function LinkEditorPlugin({ anchorElem = document.body }: { anchorElem?: HTMLElement }) {\n const [isLinkEditMode, setIsLinkEditMode] = useState(false);\n const [editor] = useLexicalComposerContext();\n return useLinkEditorToolbar(editor, anchorElem, isLinkEditMode, setIsLinkEditMode);\n}\n","import { LinkPlugin as LexicalLinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { validateUrl } from \"./utils/url.ts\";\n\nexport default function LinkPlugin(): React.JSX.Element {\n return <LexicalLinkPlugin validateUrl={validateUrl} />;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect } from \"react\";\n\nexport default function ToggleEditablePlugin({ isEditable }: { isEditable: boolean }) {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n editor.setEditable(isEditable);\n }, [isEditable, editor]);\n\n return null;\n}\n","import { Box } from \"@chakra-ui/react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { TreeView } from \"@lexical/react/LexicalTreeView\";\n\nexport function TreeViewPlugin() {\n const [editor] = useLexicalComposerContext();\n return (\n <Box fontSize=\"xs\" color=\"fg.muted\" padding=\"4\">\n <TreeView\n treeTypeButtonClassName=\"debug-treetype-button\"\n timeTravelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelClassName=\"debug-timetravel-panel\"\n timeTravelPanelSliderClassName=\"debug-timetravel-slider\"\n viewClassName=\"tree-view-output\"\n editor={editor}\n />\n </Box>\n );\n}\n","const FRONTMATTER_PATTERN = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*(?:\\n|$)/;\n\nconst FENCE_PATTERN = /^```/;\nconst LIST_ITEM_PATTERN = /^([ \\t]*)((?:[-*+])|(?:\\d+\\.))\\s+/;\nconst INDENTED_LINE_PATTERN = /^([ \\t]+)/;\n\ninterface ActiveListIndent {\n normalizedIndentWidth: number;\n sourceIndentWidth: number;\n}\n\ninterface MarkdownListState {\n isInCodeFence: boolean;\n activeListIndents: ActiveListIndent[];\n}\n\nfunction getExpandedIndentWidth(indent: string) {\n let width = 0;\n\n for (const char of indent) {\n width += char === \"\\t\" ? 4 : 1;\n }\n\n return width;\n}\n\nfunction findParentIndent(activeListIndents: ActiveListIndent[], sourceIndentWidth: number) {\n return [...activeListIndents].reverse().find((indent) => indent.sourceIndentWidth < sourceIndentWidth);\n}\n\nfunction toNormalizedIndent(indent: string, normalizedWidth: number, sourceWidth: number) {\n if (normalizedWidth === sourceWidth && !indent.includes(\"\\t\")) return indent;\n return \" \".repeat(normalizedWidth);\n}\n\nfunction normalizeIndentedContinuation(line: string, activeListIndents: ActiveListIndent[]) {\n const indentedLineMatch = line.match(INDENTED_LINE_PATTERN);\n if (!indentedLineMatch) {\n if (line.trim() !== \"\") {\n activeListIndents.length = 0;\n }\n\n return line;\n }\n\n const sourceIndentWidth = getExpandedIndentWidth(indentedLineMatch[1]);\n const parentLevel = findParentIndent(activeListIndents, sourceIndentWidth);\n if (!parentLevel) return line;\n\n const normalizedIndentWidth = sourceIndentWidth + (parentLevel.normalizedIndentWidth - parentLevel.sourceIndentWidth);\n const normalizedIndent = toNormalizedIndent(indentedLineMatch[1], normalizedIndentWidth, sourceIndentWidth);\n\n if (normalizedIndent === indentedLineMatch[1]) return line;\n\n return `${normalizedIndent}${line.slice(indentedLineMatch[1].length)}`;\n}\n\nfunction normalizeListItem(line: string, match: RegExpMatchArray, activeListIndents: ActiveListIndent[]) {\n const sourceIndentWidth = getExpandedIndentWidth(match[1]);\n\n while (activeListIndents.length && activeListIndents.at(-1)!.sourceIndentWidth > sourceIndentWidth) {\n activeListIndents.pop();\n }\n\n const currentLevel = activeListIndents.at(-1);\n if (currentLevel?.sourceIndentWidth === sourceIndentWidth) {\n return `${toNormalizedIndent(match[1], currentLevel.normalizedIndentWidth, sourceIndentWidth)}${line.slice(match[1].length)}`;\n }\n\n const parentLevel = activeListIndents.at(-1);\n const indentStep = sourceIndentWidth - (parentLevel?.sourceIndentWidth ?? 0);\n let normalizedIndentWidth = sourceIndentWidth;\n\n if (parentLevel && indentStep === 2 && !match[1].includes(\"\\t\")) {\n normalizedIndentWidth = parentLevel.normalizedIndentWidth + 4;\n }\n\n activeListIndents.push({ normalizedIndentWidth, sourceIndentWidth });\n\n return `${toNormalizedIndent(match[1], normalizedIndentWidth, sourceIndentWidth)}${line.slice(match[1].length)}`;\n}\n\nfunction normalizeMarkdownLine(line: string, state: MarkdownListState) {\n if (FENCE_PATTERN.test(line.trimStart())) {\n state.isInCodeFence = !state.isInCodeFence;\n return line;\n }\n\n if (state.isInCodeFence) return line;\n\n const match = line.match(LIST_ITEM_PATTERN);\n if (!match) return normalizeIndentedContinuation(line, state.activeListIndents);\n\n return normalizeListItem(line, match, state.activeListIndents);\n}\n\nexport function normalizeMarkdownListIndentation(content: string) {\n const lines = content.split(\"\\n\");\n const state: MarkdownListState = { isInCodeFence: false, activeListIndents: [] };\n\n return lines.map((line) => normalizeMarkdownLine(line, state)).join(\"\\n\");\n}\n\nexport function splitFrontmatter(content: string) {\n const match = content.match(FRONTMATTER_PATTERN);\n if (!match) {\n return { frontmatter: \"\", body: content };\n }\n return {\n frontmatter: match[0],\n body: content.slice(match[0].length),\n };\n}\n","export interface MarkdownSectionAnchor {\n id: string;\n heading: string;\n occurrence?: number;\n}\n\nexport interface MarkdownSectionNavigation {\n anchors: MarkdownSectionAnchor[];\n targetId: string;\n}\n\nexport interface MatchedMarkdownSection {\n id: string;\n headingIndex: number;\n}\n\ninterface MarkdownSectionPosition {\n id: string;\n top: number;\n}\n\nconst normalizeHeading = (value: string) => value.trim().replace(/\\s+/g, \" \");\n\nexport const matchMarkdownSectionAnchors = (headings: string[], anchors: MarkdownSectionAnchor[]) => {\n const normalizedHeadings = headings.map(normalizeHeading);\n const implicitOccurrences = new Map<string, number>();\n const matches: MatchedMarkdownSection[] = [];\n\n for (const anchor of anchors) {\n const heading = normalizeHeading(anchor.heading);\n const occurrence = anchor.occurrence ?? implicitOccurrences.get(heading) ?? 0;\n implicitOccurrences.set(heading, occurrence + 1);\n let seen = 0;\n\n for (const [headingIndex, candidate] of normalizedHeadings.entries()) {\n if (candidate !== heading) continue;\n if (seen === occurrence) {\n matches.push({ id: anchor.id, headingIndex });\n break;\n }\n seen += 1;\n }\n }\n\n return matches.sort((left, right) => left.headingIndex - right.headingIndex);\n};\n\nexport const resolveActiveMarkdownSection = (sections: MarkdownSectionPosition[], threshold: number) => {\n const first = sections[0]?.id;\n let active = first;\n\n for (const section of sections) {\n if (section.top > threshold) break;\n active = section.id;\n }\n\n return active;\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect, useRef } from \"react\";\nimport {\n type MarkdownSectionAnchor,\n matchMarkdownSectionAnchors,\n resolveActiveMarkdownSection,\n} from \"./markdown-section-navigation\";\n\ninterface MarkdownSectionNavigationPluginProps {\n anchors: MarkdownSectionAnchor[];\n targetId: string;\n onActiveSectionChange?: (sectionId: string | null) => void;\n}\n\nconst findScrollContainer = (root: HTMLElement) => {\n let current = root.parentElement;\n\n while (current) {\n const overflowY = getComputedStyle(current).overflowY;\n if ([\"auto\", \"scroll\", \"overlay\"].includes(overflowY)) return current;\n current = current.parentElement;\n }\n\n return null;\n};\n\nexport const MarkdownSectionNavigationPlugin = (props: MarkdownSectionNavigationPluginProps) => {\n const { anchors, targetId, onActiveSectionChange } = props;\n const [editor] = useLexicalComposerContext();\n const callbackRef = useRef(onActiveSectionChange);\n callbackRef.current = onActiveSectionChange;\n\n useEffect(() => {\n let cleanup: () => void = () => {};\n const frame = requestAnimationFrame(() => {\n const root = editor.getRootElement();\n if (!root) return;\n const headingElements = Array.from(root.querySelectorAll<HTMLElement>(\"h1, h2, h3, h4, h5, h6\"));\n const matches = matchMarkdownSectionAnchors(\n headingElements.map((heading) => heading.textContent ?? \"\"),\n anchors,\n );\n const matchedElements = matches.map((match) => ({\n id: match.id,\n element: headingElements[match.headingIndex]!,\n }));\n\n for (const match of matchedElements) match.element.dataset.markdownSectionId = match.id;\n\n const target = matchedElements.find((match) => match.id === targetId);\n if (!target) {\n console.warn(`[markdown section] Unknown section id: ${targetId}`);\n callbackRef.current?.(null);\n return;\n }\n\n target.element.tabIndex = -1;\n target.element.scrollIntoView({ block: \"start\" });\n target.element.focus({ preventScroll: true });\n\n const scrollContainer = findScrollContainer(root);\n let previousId: string | undefined;\n const publishActiveSection = () => {\n const containerTop = scrollContainer?.getBoundingClientRect().top ?? 0;\n const activeId = resolveActiveMarkdownSection(\n matchedElements.map((match) => ({\n id: match.id,\n top: match.element.getBoundingClientRect().top - containerTop,\n })),\n 8,\n );\n if (!activeId || activeId === previousId) return;\n previousId = activeId;\n callbackRef.current?.(activeId);\n };\n\n const scrollTarget: HTMLElement | Window = scrollContainer ?? window;\n scrollTarget.addEventListener(\"scroll\", publishActiveSection, { passive: true });\n publishActiveSection();\n cleanup = () => {\n scrollTarget.removeEventListener(\"scroll\", publishActiveSection);\n };\n });\n\n return () => {\n cancelAnimationFrame(frame);\n cleanup();\n };\n }, [anchors, editor, targetId]);\n\n return null;\n};\n","export type MarkdownTableAlignment = \"left\" | \"center\" | \"right\" | null;\n\nexport interface MarkdownTableColumn {\n id: string;\n label: string;\n alignment: MarkdownTableAlignment;\n}\n\nexport interface MarkdownTableRow {\n id: string;\n cells: Record<string, string>;\n}\n\nexport interface MarkdownTableValue {\n columns: MarkdownTableColumn[];\n rows: MarkdownTableRow[];\n}\n\nexport const updateMarkdownTableColumn = (\n table: MarkdownTableValue,\n columnId: string,\n update: Partial<Pick<MarkdownTableColumn, \"label\" | \"alignment\">>,\n) => ({\n ...table,\n columns: table.columns.map((column) => (column.id === columnId ? { ...column, ...update } : column)),\n});\n\nexport const updateMarkdownTableCell = (table: MarkdownTableValue, rowId: string, columnId: string, value: string) => ({\n ...table,\n rows: table.rows.map((row) =>\n row.id === rowId\n ? {\n ...row,\n cells: { ...row.cells, [columnId]: value },\n }\n : row,\n ),\n});\n\nexport const addMarkdownTableColumn = (table: MarkdownTableValue, column: MarkdownTableColumn) => ({\n columns: [...table.columns, column],\n rows: table.rows.map((row) => ({\n ...row,\n cells: { ...row.cells, [column.id]: \"\" },\n })),\n});\n\nexport const removeMarkdownTableColumn = (table: MarkdownTableValue, columnId: string) => {\n if (table.columns.length === 1 || !table.columns.some((column) => column.id === columnId)) return table;\n\n return {\n columns: table.columns.filter((column) => column.id !== columnId),\n rows: table.rows.map((row) => ({\n ...row,\n cells: Object.fromEntries(Object.entries(row.cells).filter(([key]) => key !== columnId)),\n })),\n };\n};\n\nexport const addMarkdownTableRow = (table: MarkdownTableValue, row: MarkdownTableRow) => ({\n ...table,\n rows: [\n ...table.rows,\n {\n ...row,\n cells: Object.fromEntries(table.columns.map((column) => [column.id, row.cells[column.id] ?? \"\"])),\n },\n ],\n});\n\nexport const removeMarkdownTableRow = (table: MarkdownTableValue, rowId: string) => ({\n ...table,\n rows: table.rows.filter((row) => row.id !== rowId),\n});\n\nexport const createEmptyMarkdownTable = (id: string): MarkdownTableValue => ({\n columns: [\n { id: `${id}-column-1`, label: \"Column 1\", alignment: null },\n { id: `${id}-column-2`, label: \"Column 2\", alignment: null },\n ],\n rows: [\n {\n id: `${id}-row-1`,\n cells: {\n [`${id}-column-1`]: \"\",\n [`${id}-column-2`]: \"\",\n },\n },\n ],\n});\n","import { Box, Button, Dialog, Field, Flex, Icon, Input, Text } from \"@chakra-ui/react\";\nimport { $createCodeNode } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createHorizontalRuleNode } from \"@lexical/react/LexicalHorizontalRuleNode\";\nimport { LexicalTypeaheadMenuPlugin, type MenuTextMatch } from \"@lexical/react/LexicalTypeaheadMenuPlugin\";\nimport {\n $addUpdateTag,\n $createParagraphNode,\n $getNodeByKey,\n $isParagraphNode,\n $isTextNode,\n HISTORY_MERGE_TAG,\n type LexicalNode,\n type TextNode,\n} from \"lexical\";\nimport { Code2, Image as ImageIcon, Minus, Table2 } from \"lucide-react\";\nimport { type ElementType, type FormEvent, useEffect, useState } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createEmptyMarkdownTable } from \"../../shared/markdown-table\";\nimport { $createDataTableNode } from \"../../shared/nodes/DataTableNode\";\nimport { $createMarkdownImageNode } from \"../../shared/nodes/MarkdownImageNode\";\n\ninterface SlashCommandOption {\n id: \"table\" | \"image\" | \"code\" | \"divider\";\n key: string;\n label: string;\n icon: ElementType;\n setRefElement: (element: HTMLElement | null) => void;\n}\n\nconst commandDefinitions: Array<Omit<SlashCommandOption, \"key\" | \"setRefElement\">> = [\n { id: \"table\", label: \"Table\", icon: Table2 },\n { id: \"image\", label: \"Image\", icon: ImageIcon },\n { id: \"code\", label: \"Code block\", icon: Code2 },\n { id: \"divider\", label: \"Divider\", icon: Minus },\n];\n\nconst slashTrigger = (text: string): MenuTextMatch | null => {\n const match = /^\\/([a-z ]*)$/i.exec(text);\n if (!match) return null;\n\n return {\n leadOffset: 0,\n matchingString: match[1] ?? \"\",\n replaceableString: match[0],\n };\n};\n\nconst createTableId = () => {\n const unique = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;\n return `table-${unique}`;\n};\n\nconst replaceSlashWithBlock = (queryNode: TextNode | null, block: LexicalNode) => {\n const parent = queryNode?.getParent();\n if (!$isParagraphNode(parent)) return;\n\n parent.replace(block);\n const nextParagraph = $createParagraphNode();\n block.insertAfter(nextParagraph);\n nextParagraph.select();\n};\n\ninterface SlashCommandMenuProps {\n options: SlashCommandOption[];\n selectedIndex: number | null;\n onSelect: (option: SlashCommandOption, index: number) => void;\n onHighlight: (index: number) => void;\n}\n\nconst SlashCommandMenu = (props: SlashCommandMenuProps) => {\n const { options, selectedIndex, onSelect, onHighlight } = props;\n\n useEffect(() => {\n document.getElementById(`slash-command-${selectedIndex}`)?.scrollIntoView({ block: \"nearest\" });\n }, [selectedIndex]);\n\n return (\n <Box\n role=\"listbox\"\n aria-label=\"Insert content\"\n position=\"absolute\"\n zIndex=\"popover\"\n layerStyle=\"modal\"\n minWidth=\"13rem\"\n overflow=\"hidden\"\n paddingY=\"2xs\"\n >\n <Text paddingX=\"sm\" paddingY=\"2xs\" color=\"fg.muted\" textStyle=\"label/S/medium\">\n Insert\n </Text>\n {options.length === 0 ? (\n <Text padding=\"sm\" color=\"fg.muted\" textStyle=\"paragraph/S/regular\">\n No matching commands\n </Text>\n ) : null}\n {options.map((option, index) => {\n const selected = selectedIndex === index;\n return (\n <Flex\n key={option.id}\n ref={option.setRefElement}\n id={`slash-command-${index}`}\n role=\"option\"\n aria-selected={selected}\n alignItems=\"center\"\n gap=\"xs\"\n paddingX=\"sm\"\n paddingY=\"xs\"\n cursor=\"pointer\"\n background={selected ? \"bg.active\" : \"transparent\"}\n _hover={{ background: selected ? \"bg.active\" : \"bg.hover\" }}\n onMouseEnter={() => onHighlight(index)}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => onSelect(option, index)}\n >\n <Icon as={option.icon} boxSize=\"16px\" flexShrink={0} />\n <Text minWidth=\"0\" truncate textStyle=\"label/M/medium\">\n {option.label}\n </Text>\n </Flex>\n );\n })}\n </Box>\n );\n};\n\nexport const MarkdownSlashCommandPlugin = () => {\n const [editor] = useLexicalComposerContext();\n const [query, setQuery] = useState<string | null>(null);\n const [imageQueryNodeKey, setImageQueryNodeKey] = useState<string | null>(null);\n const [imageUrl, setImageUrl] = useState(\"\");\n const [imageAlt, setImageAlt] = useState(\"Image\");\n const options = commandDefinitions\n .filter((option) => !query || option.label.toLowerCase().includes(query.toLowerCase()))\n .map((option) => ({ ...option, key: option.id, setRefElement: () => {} }));\n\n const closeImageDialog = () => {\n if (imageQueryNodeKey) {\n editor.update(\n () => {\n const queryNode = $getNodeByKey(imageQueryNodeKey);\n if ($isTextNode(queryNode)) {\n const parent = queryNode.getParent();\n queryNode.remove();\n parent?.selectEnd();\n }\n },\n { tag: HISTORY_MERGE_TAG },\n );\n }\n\n setImageQueryNodeKey(null);\n setTimeout(() => editor.focus(), 0);\n };\n\n const insertImage = (event: FormEvent) => {\n event.preventDefault();\n if (!imageQueryNodeKey || !imageUrl.trim()) return;\n\n editor.update(\n () => {\n const queryNode = $getNodeByKey(imageQueryNodeKey);\n if ($isTextNode(queryNode)) {\n const imageNode = $createMarkdownImageNode(imageUrl.trim(), imageAlt.trim() || \"Image\");\n const parent = queryNode.getParent();\n queryNode.replace(imageNode);\n if ($isParagraphNode(parent)) {\n const nextParagraph = $createParagraphNode();\n parent.insertAfter(nextParagraph);\n nextParagraph.select();\n }\n }\n },\n { tag: HISTORY_MERGE_TAG },\n );\n setImageQueryNodeKey(null);\n setTimeout(() => editor.focus(), 0);\n };\n\n return (\n <>\n <LexicalTypeaheadMenuPlugin<SlashCommandOption>\n onQueryChange={setQuery}\n triggerFn={slashTrigger}\n options={options}\n onSelectOption={(option, queryNode, closeMenu) => {\n if (option.id === \"image\") {\n setImageUrl(\"\");\n setImageAlt(\"Image\");\n setImageQueryNodeKey(queryNode?.getKey() ?? null);\n closeMenu();\n return;\n }\n\n $addUpdateTag(HISTORY_MERGE_TAG);\n if (option.id === \"table\") {\n replaceSlashWithBlock(queryNode, $createDataTableNode(createEmptyMarkdownTable(createTableId())));\n }\n if (option.id === \"code\") replaceSlashWithBlock(queryNode, $createCodeNode());\n if (option.id === \"divider\") replaceSlashWithBlock(queryNode, $createHorizontalRuleNode());\n closeMenu();\n }}\n menuRenderFn={(anchorElementRef, menu) => {\n if (!anchorElementRef.current) return null;\n return ReactDOM.createPortal(\n <SlashCommandMenu\n options={menu.options}\n selectedIndex={menu.selectedIndex}\n onHighlight={menu.setHighlightedIndex}\n onSelect={(option, index) => {\n menu.setHighlightedIndex(index);\n menu.selectOptionAndCleanUp(option);\n }}\n />,\n anchorElementRef.current,\n );\n }}\n />\n <Dialog.Root\n open={Boolean(imageQueryNodeKey)}\n finalFocusEl={() => editor.getRootElement()}\n onOpenChange={(details) => {\n if (!details.open && imageQueryNodeKey) closeImageDialog();\n }}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content asChild>\n <form onSubmit={insertImage}>\n <Dialog.Header>\n <Dialog.Title>Insert image</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n <Flex direction=\"column\" gap=\"sm\">\n <Field.Root required>\n <Field.Label>Image URL</Field.Label>\n <Input autoFocus value={imageUrl} onChange={(event) => setImageUrl(event.target.value)} />\n </Field.Root>\n <Field.Root>\n <Field.Label>Alt text</Field.Label>\n <Input value={imageAlt} onChange={(event) => setImageAlt(event.target.value)} />\n </Field.Root>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Button type=\"button\" variant=\"ghost\" onClick={closeImageDialog}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"primary\" disabled={!imageUrl.trim()}>\n Insert image\n </Button>\n </Dialog.Footer>\n </form>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n </>\n );\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { COMMAND_PRIORITY_HIGH, KEY_DOWN_COMMAND, REDO_COMMAND, UNDO_COMMAND } from \"lexical\";\nimport { useEffect, useState } from \"react\";\n\nexport const MarkdownHistoryPlugin = () => {\n const [editor] = useLexicalComposerContext();\n const [historyState] = useState(() => ({\n current: { editor, editorState: editor.getEditorState() },\n redoStack: [],\n undoStack: [],\n }));\n\n useEffect(() => {\n historyState.current = { editor, editorState: editor.getEditorState() };\n }, [editor, historyState]);\n\n useEffect(\n () =>\n editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event) => {\n const target = event.target;\n if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) return false;\n if ((!event.ctrlKey && !event.metaKey) || event.key.toLowerCase() !== \"z\") return false;\n\n event.preventDefault();\n editor.dispatchCommand(event.shiftKey ? REDO_COMMAND : UNDO_COMMAND, undefined);\n return true;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n [editor],\n );\n\n return <HistoryPlugin externalHistoryState={historyState} />;\n};\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { CheckListPlugin } from \"@lexical/react/LexicalCheckListPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { MarkdownShortcutPlugin } from \"@lexical/react/LexicalMarkdownShortcutPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TabIndentationPlugin } from \"@lexical/react/LexicalTabIndentationPlugin\";\nimport { $addUpdateTag, $getRoot } from \"lexical\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme, editorTransformers } from \"../shared/editor-config\";\nimport { exportLexicalToMarkdown, importMarkdownToLexical } from \"../shared/markdown-codec\";\nimport type { MarkdownUrlResolver } from \"../shared/markdown-url\";\nimport { MarkdownUrlProvider } from \"../shared/markdown-url-context\";\nimport { CodeBlockActionsPlugin } from \"../shared/plugins/CodePlugin/CodeBlockActionsPlugin\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { CodeHighlightingPlugin } from \"../shared/plugins/CodePlugin/CodeHighlightingPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport { LinkEditorPlugin, LinkPlugin } from \"../shared/plugins/LinkEditorPlugin\";\nimport ToggleEditablePlugin from \"../shared/plugins/ToggleEditablePlugin\";\nimport { TreeViewPlugin } from \"../shared/plugins/TreeViewPlugin/TreeViewPlugin\";\nimport { splitFrontmatter } from \"../utils/markdown\";\nimport { MarkdownSectionNavigationPlugin } from \"./plugins/MarkdownSectionNavigationPlugin\";\nimport { MarkdownSlashCommandPlugin } from \"./plugins/MarkdownSlashCommandPlugin\";\nimport { MarkdownHistoryPlugin } from \"./plugins/markdown-history-plugin\";\nimport type { MarkdownSectionNavigation } from \"./plugins/markdown-section-navigation\";\n\nconst INITIAL_IMPORT_TAG = \"markdown-initial-import\";\n\nexport interface MarkdownEditorProps {\n autoFocus?: boolean;\n debug?: boolean;\n defaultState: string;\n fullWidth?: boolean;\n isEditable?: boolean;\n padding?: string;\n placeholder?: string;\n scrollable?: boolean;\n sectionNavigation?: MarkdownSectionNavigation;\n resolveMarkdownUrl?: MarkdownUrlResolver;\n onActiveSectionChange?: (sectionId: string | null) => void;\n onChange?: (value: string) => void;\n}\n\nexport function MarkdownEditor(props: MarkdownEditorProps) {\n const {\n autoFocus = false,\n debug = false,\n defaultState = \"\",\n fullWidth = false,\n isEditable = false,\n padding = \"sm\",\n placeholder,\n scrollable = true,\n sectionNavigation,\n resolveMarkdownUrl,\n onActiveSectionChange,\n onChange,\n } = props;\n const { frontmatter, body } = splitFrontmatter(defaultState);\n const shouldTrackChanges = isEditable && Boolean(onChange);\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"MARKDOWN_EDITOR\",\n nodes: editorNodes,\n editorState: () => {\n // Tag the mount-time import so change tracking can tell it apart from a\n // real edit. Lexical also tags it history-merge, but slash commands reuse\n // that tag for their inserts, so ignoring history-merge would swallow them.\n $addUpdateTag(INITIAL_IMPORT_TAG);\n importMarkdownToLexical(body, resolveMarkdownUrl);\n },\n onError: (error: Error) => console.error(error),\n editable: isEditable,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height={scrollable ? \"100%\" : \"auto\"}\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <MarkdownUrlProvider resolver={resolveMarkdownUrl}>\n <LexicalComposer initialConfig={initialConfig}>\n {isEditable ? <MarkdownSlashCommandPlugin /> : null}\n {sectionNavigation ? (\n <MarkdownSectionNavigationPlugin\n anchors={sectionNavigation.anchors}\n targetId={sectionNavigation.targetId}\n onActiveSectionChange={onActiveSectionChange}\n />\n ) : null}\n {autoFocus ? <AutoFocusPlugin /> : null}\n <MarkdownHistoryPlugin />\n <LinkPlugin />\n <ListPlugin />\n {isEditable ? <TabIndentationPlugin maxIndent={7} /> : null}\n <CheckListPlugin />\n {isEditable ? <MarkdownShortcutPlugin transformers={editorTransformers} /> : null}\n <HorizontalRulePlugin />\n <CodeHighlightingPlugin />\n <ImportCodeBlocksPlugin />\n <CodeBlockActionsPlugin anchorElem={floatingToolbarAnchorElem} />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={fullWidth} padding={padding} scrollable={scrollable} />}\n placeholder={\n placeholder ? (\n <Flex\n position=\"absolute\"\n padding=\"sm\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n justifyContent=\"center\"\n >\n <Box width=\"100%\" maxWidth=\"45rem\" color=\"fg.muted\" textStyle=\"paragraph/M/regular\">\n {placeholder}\n </Box>\n </Flex>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {isEditable && floatingToolbarAnchorElem ? (\n <>\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n <LinkEditorPlugin anchorElem={floatingToolbarAnchorElem} />\n </>\n ) : null}\n {shouldTrackChanges ? (\n <OnChangePlugin\n ignoreSelectionChange\n ignoreHistoryMergeTagChange={false}\n onChange={(editorState, _editor, tags) => {\n // Reporting the mount-time import as a change makes every mount\n // look like an edit and schedules a save of content the user\n // never touched.\n if (tags.has(INITIAL_IMPORT_TAG)) return;\n editorState.read(() => {\n const root = $getRoot();\n const markdownBody = exportLexicalToMarkdown(root);\n onChange?.(frontmatter + markdownBody);\n });\n }}\n />\n ) : null}\n <ToggleEditablePlugin isEditable={isEditable} />\n {debug && <TreeViewPlugin />}\n </LexicalComposer>\n </MarkdownUrlProvider>\n </Flex>\n );\n}\n","import { Box, Code, Link, Text } from \"@chakra-ui/react\";\nimport type { PhrasingContent } from \"mdast\";\nimport { Fragment, type ReactNode } from \"react\";\nimport { parseMarkdownInline } from \"./markdown-ast\";\nimport { resolveMarkdownUrl } from \"./markdown-url\";\nimport { useMarkdownUrlResolver } from \"./markdown-url-context\";\nimport { MarkdownImage } from \"./nodes/MarkdownImageNode\";\nimport { RawHtml } from \"./nodes/RawHtmlNode\";\n\ninterface MarkdownInlineProps {\n value: string;\n}\n\ninterface InlineChildrenProps {\n nodes: PhrasingContent[];\n}\n\nconst InlineChildren = (props: InlineChildrenProps) => {\n const { nodes } = props;\n const resolver = useMarkdownUrlResolver();\n\n return nodes.map((node, index): ReactNode => {\n const key = `${node.type}-${index}`;\n\n switch (node.type) {\n case \"text\":\n return <Fragment key={key}>{node.value}</Fragment>;\n case \"strong\":\n return (\n <Text as=\"strong\" key={key} fontWeight=\"semibold\">\n <InlineChildren nodes={node.children} />\n </Text>\n );\n case \"emphasis\":\n return (\n <Box as=\"em\" key={key}>\n <InlineChildren nodes={node.children} />\n </Box>\n );\n case \"delete\":\n return (\n <Box as=\"del\" key={key}>\n <InlineChildren nodes={node.children} />\n </Box>\n );\n case \"inlineCode\":\n return <Code key={key}>{node.value}</Code>;\n case \"break\":\n return <br key={key} />;\n case \"link\": {\n const href = resolveMarkdownUrl(node.url, \"link\", resolver);\n if (!href) return <InlineChildren key={key} nodes={node.children} />;\n return (\n <Link key={key} href={href} title={node.title ?? undefined} target=\"_blank\" rel=\"noopener noreferrer\">\n <InlineChildren nodes={node.children} />\n </Link>\n );\n }\n case \"image\":\n return <MarkdownImage key={key} source={node.url} alt={node.alt ?? \"\"} title={node.title ?? null} />;\n case \"html\":\n return <RawHtml key={key} source={node.value} display=\"inline\" />;\n case \"inlineMath\":\n return <Code key={key}>{node.value}</Code>;\n default:\n return null;\n }\n });\n};\n\nexport const MarkdownInline = (props: MarkdownInlineProps) => {\n const { value } = props;\n return <InlineChildren nodes={parseMarkdownInline(value)} />;\n};\n","import { Box } from \"@chakra-ui/react\";\nimport {\n $applyNodeReplacement,\n $createParagraphNode,\n $getNodeByKey,\n DecoratorNode,\n HISTORY_PUSH_TAG,\n type LexicalEditor,\n type LexicalNode,\n type NodeKey,\n REDO_COMMAND,\n type SerializedLexicalNode,\n type Spread,\n UNDO_COMMAND,\n} from \"lexical\";\nimport type React from \"react\";\nimport { type FocusEvent, type KeyboardEvent, type MouseEvent, useRef, useState } from \"react\";\nimport { EditModeDataTable } from \"@/components/data-table/edit-mode-data-table\";\nimport type { DataTableEditModeColumn, RowData } from \"@/components/data-table/types\";\nimport { MarkdownEditor } from \"../../markdown-editor/markdown-editor\";\nimport { MarkdownInline } from \"../markdown-inline\";\nimport type { MarkdownTableValue } from \"../markdown-table\";\n\ninterface MarkdownDataTableProps {\n editor: LexicalEditor;\n nodeKey: NodeKey;\n table: MarkdownTableValue;\n}\n\nconst projectRows = (table: MarkdownTableValue): RowData[] => table.rows.map((row) => ({ id: row.id, ...row.cells }));\n\nconst projectColumns = (table: MarkdownTableValue): DataTableEditModeColumn[] => table.columns;\n\nconst MarkdownDataTable = (props: MarkdownDataTableProps) => {\n const { editor, nodeKey, table } = props;\n const [isSelected, setSelected] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const focusTable = () => {\n setTimeout(() => containerRef.current?.focus(), 0);\n };\n\n const updateTable = (change: (current: MarkdownTableValue) => MarkdownTableValue) => {\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey);\n if ($isDataTableNode(node)) node.setTable(change(node.getTable()));\n },\n { tag: HISTORY_PUSH_TAG },\n );\n focusTable();\n };\n\n const handleColumnsChange = (columns: DataTableEditModeColumn[]) => {\n updateTable((current) => ({\n columns,\n rows: current.rows.map((row) => ({\n ...row,\n cells: Object.fromEntries(columns.map((column) => [column.id, row.cells[column.id] ?? \"\"])),\n })),\n }));\n };\n\n const handleDataChange = (data: RowData[]) => {\n updateTable((current) => ({\n ...current,\n rows: data.map((row, index) => ({\n id: String(row.id ?? current.rows[index]?.id ?? `row-${index + 1}`),\n cells: Object.fromEntries(current.columns.map((column) => [column.id, String(row[column.id] ?? \"\")])),\n })),\n }));\n };\n\n const deleteTable = () => {\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey);\n if ($isDataTableNode(node)) {\n const paragraph = $createParagraphNode();\n node.replace(paragraph);\n paragraph.select();\n }\n },\n { tag: HISTORY_PUSH_TAG },\n );\n setTimeout(() => editor.focus(), 0);\n };\n\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n if (target.closest(\"button, input, textarea, [contenteditable='true'], [role='menuitem']\")) return;\n\n event.preventDefault();\n containerRef.current?.focus();\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setSelected(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n const isTextInput = target.matches(\"input, textarea\") || target.isContentEditable;\n const isUndo = (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"z\";\n\n if (isUndo && !isTextInput) {\n event.preventDefault();\n event.stopPropagation();\n editor.dispatchCommand(event.shiftKey ? REDO_COMMAND : UNDO_COMMAND, undefined);\n return;\n }\n\n if (isTextInput) return;\n\n if (isSelected && (event.key === \"Delete\" || event.key === \"Backspace\")) {\n event.preventDefault();\n event.stopPropagation();\n deleteTable();\n }\n };\n\n return (\n <Box\n ref={containerRef}\n data-testid=\"markdown-table-node\"\n data-selected={String(isSelected)}\n aria-label=\"Markdown table\"\n aria-selected={isSelected}\n tabIndex={0}\n outline={isSelected ? \"2px solid\" : \"none\"}\n outlineColor=\"border.accent-light\"\n outlineOffset=\"2px\"\n borderRadius=\"sm\"\n onFocus={() => setSelected(true)}\n onBlur={handleBlur}\n onClick={handleClick}\n onKeyDownCapture={handleKeyDown}\n >\n <EditModeDataTable\n data={projectRows(table)}\n editMode={{\n columns: projectColumns(table),\n onColumnsChange: handleColumnsChange,\n onDataChange: handleDataChange,\n renderHeader: (column) => <MarkdownInline value={column.label} />,\n renderCell: (context) => <MarkdownInline value={String(context.value ?? \"\")} />,\n renderCellEditor: ({ value, onChange }) => (\n <MarkdownEditor\n autoFocus\n defaultState={value}\n fullWidth\n isEditable\n padding=\"xs\"\n scrollable={false}\n onChange={onChange}\n />\n ),\n }}\n fullWidth\n getRowId={(row) => String(row.id)}\n initialPageSize={30}\n isReadOnly={!editor.isEditable()}\n />\n </Box>\n );\n};\n\nexport class DataTableNode extends DecoratorNode<React.JSX.Element> {\n __table: MarkdownTableValue;\n\n static getType() {\n return \"data_table\";\n }\n\n static clone(node: DataTableNode) {\n return new DataTableNode(node.__table, node.__key);\n }\n\n constructor(table: MarkdownTableValue, key?: NodeKey) {\n super(key);\n this.__table = table;\n }\n\n getTable() {\n return this.getLatest().__table;\n }\n\n setTable(table: MarkdownTableValue) {\n const writable = this.getWritable();\n writable.__table = table;\n }\n\n createDOM() {\n return document.createElement(\"div\");\n }\n\n updateDOM() {\n return false;\n }\n\n decorate(editor: LexicalEditor) {\n return <MarkdownDataTable editor={editor} nodeKey={this.__key} table={this.__table} />;\n }\n\n exportJSON(): SerializedDataTableNode {\n return {\n type: \"data_table\",\n version: 2,\n table: this.__table,\n };\n }\n\n static importJSON(json: SerializedDataTableNode) {\n return $createDataTableNode(json.table);\n }\n\n getTextContent() {\n const headers = this.__table.columns.map((column) => column.label).join(\" | \");\n const separator = this.__table.columns.map(() => \"---\").join(\" | \");\n const rows = this.__table.rows.map((row) =>\n this.__table.columns.map((column) => row.cells[column.id] ?? \"\").join(\" | \"),\n );\n return [headers, separator, ...rows].join(\"\\n\");\n }\n}\n\nexport type SerializedDataTableNode = Spread<\n { table: MarkdownTableValue; type: \"data_table\"; version: 2 },\n SerializedLexicalNode\n>;\n\nexport const $createDataTableNode = (table: MarkdownTableValue) => $applyNodeReplacement(new DataTableNode(table));\n\nexport const $isDataTableNode = (node: LexicalNode | null | undefined): node is DataTableNode =>\n node instanceof DataTableNode;\n","import type { ElementTransformer } from \"@lexical/markdown\";\nimport type { LexicalNode } from \"lexical\";\nimport { $createHRNode, $isHRNode, HRNode } from \"./HorizontalRuleNode\";\n\nexport const HR: ElementTransformer = {\n dependencies: [HRNode],\n export: (node: LexicalNode) => {\n return $isHRNode(node) ? \"***\" : null;\n },\n regExp: /^(---|\\*\\*\\*|___)\\s?$/,\n replace: (parentNode) => {\n const line = $createHRNode();\n parentNode.replace(line);\n },\n type: \"element\",\n};\n","import {\n $createAutoLinkNode,\n $createLinkNode,\n $isAutoLinkNode,\n $isLinkNode,\n AutoLinkNode,\n LinkNode,\n} from \"@lexical/link\";\nimport type { TextMatchTransformer } from \"@lexical/markdown\";\nimport { $createTextNode, TextNode } from \"lexical\";\nimport { HR } from \"../plugins/HorizontalRulePlugin/horizontalRule\";\n\nexport const UNDERLINE_INS_TAG: TextMatchTransformer = {\n dependencies: [TextNode],\n export: (node, _children) => {\n if (node instanceof TextNode) {\n let markdownText = node.getTextContent();\n\n if (node.hasFormat(\"bold\")) {\n markdownText = `**${markdownText}**`;\n } else if (node.hasFormat(\"italic\")) {\n markdownText = `*${markdownText}*`;\n } else if (node.hasFormat(\"underline\")) {\n markdownText = `<ins>${markdownText}</ins>`;\n } else {\n return null;\n }\n\n return markdownText;\n }\n return null;\n },\n regExp: /<ins>(.*)<\\/ins>/,\n importRegExp: /<ins>(.*)<\\/ins>/,\n replace: (node, match) => {\n const textNode = $createTextNode(match[1]);\n textNode.toggleFormat(\"underline\");\n node.replace(textNode);\n },\n type: \"text-match\",\n};\n\nexport const UNDERLINE_U_TAG: TextMatchTransformer = {\n dependencies: [TextNode],\n export: (_node, _children) => {\n return null;\n },\n regExp: /<u>(.*)<\\/u>/,\n importRegExp: /<u>(.*)<\\/u>/,\n replace: (node, match) => {\n const textNode = $createTextNode(match[1]);\n textNode.toggleFormat(\"underline\");\n node.replace(textNode);\n },\n type: \"text-match\",\n};\n\nconst BARE_URL_REGEXP = /https?:\\/\\/[^\\s<>\"']*[^\\s<>\"'.,:;\"')\\]}]/;\n\n// Strip markdown character escapes that may have leaked into a URL, e.g.\n// `https://example.com/foo\\_bar` -> `https://example.com/foo_bar`.\n// Without this, repeated save/reopen cycles would accumulate backslashes\n// because the URL is stored as both text content and href.\nconst unescapeUrl = (url: string) => url.replace(/\\\\([*_`~\\\\])/g, \"$1\");\n\nconst escapeLinkTitle = (title: string) => title.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n\nconst unescapeLinkTitle = (title: string | undefined) => title?.replace(/\\\\([\"\\\\])/g, \"$1\");\n\nconst normalizeEscapedUrlText = (textContent: string, href: string, exportedText: string) => {\n if (textContent !== href) {\n return exportedText;\n }\n\n const escapedHref = href.replace(/([*_`~\\\\])/g, \"\\\\$1\");\n\n return exportedText.replace(escapedHref, href);\n};\n\nexport const LINK: TextMatchTransformer = {\n dependencies: [LinkNode],\n export: (node, exportChildren) => {\n if (!$isLinkNode(node) || $isAutoLinkNode(node)) {\n return null;\n }\n\n const title = node.getTitle();\n const href = unescapeUrl(node.getURL());\n const textContent = normalizeEscapedUrlText(node.getTextContent(), href, exportChildren(node));\n\n return title != null ? `[${textContent}](${href} \"${escapeLinkTitle(title)}\")` : `[${textContent}](${href})`;\n },\n importRegExp: /(?:\\[(.+?)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))/,\n regExp: /(?:\\[(.+?)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))$/,\n replace: (textNode, match) => {\n const [, linkText, linkUrl, linkTitle] = match;\n const href = unescapeUrl(linkUrl);\n const linkNode = $createLinkNode(href, { title: unescapeLinkTitle(linkTitle) });\n const openBracketAmount = linkText.split(\"[\").length - 1;\n const closeBracketAmount = linkText.split(\"]\").length - 1;\n let parsedLinkText = linkText;\n let outsideLinkText = \"\";\n\n if (openBracketAmount < closeBracketAmount) {\n return;\n }\n\n if (openBracketAmount > closeBracketAmount) {\n const linkTextParts = linkText.split(\"[\");\n outsideLinkText = `[${linkTextParts[0]}`;\n parsedLinkText = linkTextParts.slice(1).join(\"[\");\n }\n\n const normalizedLinkText = unescapeUrl(parsedLinkText);\n const linkTextNode = $createTextNode(normalizedLinkText === href ? href : normalizedLinkText);\n\n linkTextNode.setFormat(textNode.getFormat());\n linkNode.append(linkTextNode);\n textNode.replace(linkNode);\n\n if (outsideLinkText) {\n linkNode.insertBefore($createTextNode(outsideLinkText));\n }\n\n return linkTextNode;\n },\n trigger: \")\",\n type: \"text-match\",\n};\n\nexport const BARE_URL: TextMatchTransformer = {\n dependencies: [AutoLinkNode],\n export: (node, exportChildren) => {\n if (!$isAutoLinkNode(node)) {\n return null;\n }\n\n const href = unescapeUrl(node.getURL());\n\n return normalizeEscapedUrlText(node.getTextContent(), href, exportChildren(node));\n },\n regExp: BARE_URL_REGEXP,\n importRegExp: BARE_URL_REGEXP,\n replace: (textNode, match) => {\n const href = unescapeUrl(match[0]);\n const autoLinkNode = $createAutoLinkNode(href);\n const linkTextNode = $createTextNode(href);\n\n linkTextNode.setFormat(textNode.getFormat());\n autoLinkNode.append(linkTextNode);\n textNode.replace(autoLinkNode);\n },\n type: \"text-match\",\n};\n\nexport const TRANSFORMERS_EXTENDED = [HR, UNDERLINE_INS_TAG, UNDERLINE_U_TAG, LINK, BARE_URL];\n","import { AutoLinkNode, LinkNode } from \"@lexical/link\";\nimport { ListItemNode, ListNode } from \"@lexical/list\";\nimport { CHECK_LIST, LINK as LEXICAL_LINK, TRANSFORMERS } from \"@lexical/markdown\";\nimport { HeadingNode, QuoteNode } from \"@lexical/rich-text\";\nimport type { Klass, LexicalNode } from \"lexical\";\nimport { REFERENCE_LINK_TRANSFORMER, ReferenceLinkNode } from \"../markdown-editor/plugins/ReferenceLinkPlugin\";\nimport theme from \"../theme/rich-text-theme\";\nimport { CodeHighlightNode, CodeNode } from \"./lexical-code\";\nimport { DataTableNode } from \"./nodes/DataTableNode\";\nimport { MarkdownImageNode } from \"./nodes/MarkdownImageNode\";\nimport { MarkdownLinkNode } from \"./nodes/MarkdownLinkNode\";\nimport { RawHtmlNode } from \"./nodes/RawHtmlNode\";\nimport { EquationNode } from \"./plugins/EquationPlugin/EquationNode\";\nimport { EQUATION_INLINE, EQUATION_MULTILINE } from \"./plugins/EquationPlugin/EquationPlugin\";\nimport { HRNode } from \"./plugins/HorizontalRulePlugin/HorizontalRuleNode\";\nimport { MermaidNode } from \"./plugins/MermaidPlugin/MermaidNode\";\nimport { TRANSFORMERS_EXTENDED } from \"./transformers/markdown-transformers\";\n\nexport const editorNodes: Array<Klass<LexicalNode>> = [\n QuoteNode,\n LinkNode,\n AutoLinkNode,\n MarkdownLinkNode,\n MarkdownImageNode,\n RawHtmlNode,\n DataTableNode,\n HeadingNode,\n ListNode,\n ListItemNode,\n CodeNode,\n CodeHighlightNode,\n MermaidNode,\n EquationNode,\n HRNode,\n ReferenceLinkNode,\n];\n\nexport const baseEditorTransformers = [\n CHECK_LIST,\n ...TRANSFORMERS.filter((transformer) => transformer !== LEXICAL_LINK),\n ...TRANSFORMERS_EXTENDED,\n EQUATION_INLINE,\n EQUATION_MULTILINE,\n];\n\nexport const editorTransformers = [...baseEditorTransformers, REFERENCE_LINK_TRANSFORMER];\n\nexport const editorTheme = theme;\n"],"names":["StyledEditable","chakra","LexicalContentEditable","ContentEditable","t0","$","_c","onRef","fullWidth","t1","padding","isRichMessage","t2","scrollable","t3","undefined","t4","t5","t6","jsx","t7","Box","editor","t8","t9","Symbol","for","width","minH","t10","ScrollArea","ReferenceLinkNode","DecoratorNode","__href","__label","getType","clone","node","__key","constructor","href","label","key","createDOM","_config","_editor","document","createElement","updateDOM","_prevNode","_dom","getTextContent","exportJSON","type","version","importJSON","serializedNode","$createReferenceLinkNode","decorate","split","pop","isExternal","test","isProjectFile","ResourceBadge","window","open","projectPath","replace","event","CustomEvent","detail","dispatchEvent","location","assign","$isReferenceLinkNode","LINK_REGEXP","REFERENCE_LINK_TRANSFORMER","dependencies","export","regExp","importRegExp","textNode","match","value","theme","code","codeHighlight","atrule","attr","boolean","builtin","cdata","char","class","comment","constant","deleted","doctype","entity","function","important","inserted","keyword","namespace","number","operator","prolog","property","punctuation","regex","selector","string","symbol","tag","url","variable","embedBlock","base","focus","list","checklist","listitem","listitemChecked","listitemUnchecked","nested","olDepth","ol","ul","heading","h1","h2","h3","paragraph","text","underline","italic","link","quote","reference","table","tableCell","tableRow","tableCellHeader","layoutContainer","layoutItem","draggableBlockDemo","row","content","parserOptions","extensions","gfm","math","mdastExtensions","gfmFromMarkdown","mathFromMarkdown","serializerOptions","bullet","emphasis","gfmToMarkdown","mathToMarkdown","fence","fences","listItemIndent","rule","strong","fenceStart","line","normalizeLegacyInlineMath","codeFenceLength","result","index","length","end","slice","delimiter","normalizeLegacyMath","markdown","fencedCode","normalized","push","closingFence","character","openingFence","displayMath","indent","join","parseMarkdown","fromMarkdown","serializeMarkdownAst","tree","toMarkdown","trimEnd","serializeMarkdownBlock","children","serializeMarkdownInline","parseMarkdownInline","first","SAFE_LINK_PROTOCOLS","Set","SAFE_IMAGE_DATA_URL","PROTOCOL","hasSafeLinkProtocol","source","startsWith","has","URL","protocol","hasSafeImageProtocol","resolveMarkdownUrl","kind","resolver","resolved","MarkdownUrlContext","createContext","MarkdownUrlProvider","props","useMarkdownUrlResolver","useContext","MarkdownImage","alt","title","onLoad","Text","Image","MarkdownImageNode","__source","__alt","__title","isInline","getSource","getAlt","getTitle","$createMarkdownImageNode","keepFollowingSelectionVisible","isEditable","selectedBlockKey","getEditorState","read","selection","$getSelection","imageNode","$getNodeByKey","getKey","$isRangeSelection","isCollapsed","followingBlockKey","getTopLevelElement","getNextSibling","selectionBlock","anchor","getNode","blockKey","requestAnimationFrame","getElementByKey","scrollIntoView","block","$applyNodeReplacement","$isMarkdownImageNode","safeLinkUrl","MarkdownLinkNode","LinkNode","__url","rel","__rel","target","__target","resolvedUrl","attributes","setURL","writable","getWritable","$createMarkdownLinkNode","$isMarkdownLinkNode","isHtmlComment","trim","sanitizeMarkdownHtml","clean","DOMPurify","sanitize","FORBID_TAGS","template","innerHTML","element","querySelectorAll","attribute","hasAttribute","sourceUrl","getAttribute","setAttribute","removeAttribute","RawHtml","display","elementRef","useRef","current","attachElement","fragment","element_0","replaceChildren","cloneNode","createTextNode","useEffect","RawHtmlNode","__display","previous","getDisplay","$createRawHtmlNode","$isRawHtmlNode","EquationComponent","React","lazy","$convertEquationElement","domNode","equation","inline","atob","$createEquationNode","EquationNode","__equation","__inline","getEquation","className","exportDOM","btoa","katex","render","displayMode","errorColor","output","strict","throwOnError","trust","importDOM","div","conversion","priority","span","prevNode","setEquation","Suspense","equationNode","$isEquationNode","HRNode","ElementNode","_serializedNode","$createHRNode","style","$isHRNode","MermaidComponent","MermaidNode","__code","getCode","setCode","$isMermaidNode","$createMermaidNode","exportText","hasFormat","exportInlineNode","$isTextNode","$isLineBreakNode","$isLinkNode","getURL","exportInlineChildren","$isElementNode","getChildren","flatMap","paragraphFrom","exportListItem","child","$isListNode","splice","exportList","$isParagraphNode","unshift","checked","getChecked","spread","ordered","getListType","start","getStart","filter","$isListItemNode","map","exportTable","getTable","align","columns","column","alignment","rows","cells","id","exportBlock","$isHeadingNode","depth","Number","getTag","$isQuoteNode","$isCodeNode","lang","getLanguage","meta","$isDataTableNode","exportLexicalToMarkdown","root","REFERENCE_TOKEN","formattedText","formats","$createTextNode","format","toggleFormat","textWithReferences","nodes","matchAll","referenceDefinition","context","definitions","get","identifier","toLowerCase","importInlineNode","importInlineChildren","$createLineBreakNode","append","definition","underlineDepth","Math","max","activeFormats","add","tableValue","tableIndex","prefix","header","columnCount","Array","from","_","rowIndex","Object","fromEntries","columnIndex","appendListItem","parent","item","$createListItemNode","appendBlock","$createParagraphNode","$createHeadingNode","$createQuoteNode","hasTasks","some","listType","$createListNode","$createCodeNode","$createDataTableNode","importMarkdownToLexical","Map","$getRoot","clear","getCodeElementFromSelection","anchorNode","codeNode","$findMatchingParent","codeElement","HTMLElement","getCodeElementFromTarget","closest","getActionPosition","anchorElem","anchorRect","getBoundingClientRect","codeRect","top","left","right","CodeBlockActionsPlugin","useLexicalComposerContext","activeCodeElement","setActiveCodeElement","useState","isCopied","setIsCopied","copyResetTimeoutRef","clearTimeout","rootElement","getRootElement","handlePointerMove","nextCodeElement","handlePointerLeave","selectionCodeElement","addEventListener","removeEventListener","mergeRegister","registerUpdateListener","editorState","selectionCodeElement_0","registerCommand","SELECTION_CHANGE_COMMAND","selectionCodeElement_1","_temp","COMMAND_PRIORITY_CRITICAL","position","t11","textContent","navigator","clipboard","writeText","setTimeout","t12","Check","Copy","t13","IconButton","t14","Tooltip","t15","t16","createPortal","matches","isMermaidLanguage","language","replaceCodeNodeWithMermaidNode","ImportCodeBlocksPlugin","update","codeNodes","$nodesOfType","CodeNode","n","CodeHighlightingPlugin","registerCodeHighlighting","EQUATION_INLINE","EQUATION_MULTILINE","regExpStart","regExpEnd","rootNode","_children","_startMatch","_endMatch","linesInBetween","EquationPlugin","TOGGLE_LINK_EDIT_MODE_COMMAND","createCommand","getSelectedNode","focusNode","isBackward","$isAtNodeEnd","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","floatingElem","verticalGap","horizontalOffset","placement","coordinateSpace","scrollerElem","parentElement","opacity","transform","floatingElemRect","anchorElementRect","editorScrollerRect","DOMRect","documentElement","clientWidth","clientHeight","height","bottom","abs","ToolbarSeparator","margin","borderLeft","FloatingToolbarButtons","blockType","isBold","isItalic","isUnderline","isCode","isLink","formatHeading","formatList","formatQuote","insertLink","dispatchCommand","FORMAT_TEXT_COMMAND","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","Code","t29","t30","t31","t32","t33","LinkIcon","t34","t35","t36","t37","TextQuote","t38","t39","t40","t41","t42","List","t43","t44","t45","t46","ListOrdered","t47","t48","t49","t50","ListTodo","t51","t52","Stack","blockTypeToBlockName","check","h4","h5","h6","toKnownBlockType","findSelectionElement","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","parentList","shouldShowFloatingToolbar","params","hasSelection","isRangeSelection","hasNativeSelection","hasNativeRange","isAnchorInsideEditor","isEditorEditable","GAP","FloatingTextToolbar","isToolbarActive","setIsToolbarActive","editorRef","setBlockType","setIsBold","setIsItalic","setIsUnderline","setIsCode","setIsLink","updateFloatingToolbarRef","headingSize","$setBlocksType","REMOVE_LIST_COMMAND","command","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_CHECK_LIST_COMMAND","TOGGLE_LINK_COMMAND","updateToolbar","linkParent","autoLinkParent","$isAutoLinkNode","nextBlockType","editorElem","nativeSelection","getSelection","rangeCount","Boolean","contains","domRect","getRangeAt","bottomRect","_payload","CLICK_COMMAND","COMMAND_PRIORITY_HIGH","FloatingTextFormatToolbarPlugin","body","LinkEditorContent","isActive","isLinkEditMode","editedLinkUrl","editedLinkUrlIsValid","linkUrl","inputRef","onEditedLinkUrlChange","onInputKeyDown","onClose","onSubmit","onEdit","onRemove","Input","X","preventFocusLoss","jsxs","ChakraLink","Pencil","Trash2","preventDefault","shouldCancelLinkEdit","getSelectionLinkUrl","SUPPORTED_URL_PROTOCOLS","sanitizeUrl","parsedUrl","validateUrl","hostname","pathname","LinkEditor","setIsLinkEditMode","updateLinkEditorRef","setLinkUrl","setEditedLinkUrl","lastSelection","setLastSelection","nextLinkUrl","closeLinkEditor","activeElement","rangeRect","topRect","COMMAND_PRIORITY_LOW","KEY_ESCAPE_COMMAND","useLayoutEffect","monitorInputInteraction","handleLinkSubmission","$setSelection","linkNode","$createLinkNode","useLinkEditorToolbar","activeEditor","setActiveEditor","$updateToolbar","focusLinkNode","focusAutoLinkNode","badNode","getNodes","find","node_0","autoLinkNode","autoLinkIsUnlinked","getIsUnlinked","is","newEditor","_temp2","payload_0","payload","selection_0","node_1","linkNode_0","metaKey","ctrlKey","LinkEditorPlugin","LinkPlugin","LexicalLinkPlugin","ToggleEditablePlugin","setEditable","TreeViewPlugin","TreeView","FRONTMATTER_PATTERN","splitFrontmatter","frontmatter","normalizeHeading","matchMarkdownSectionAnchors","headings","anchors","normalizedHeadings","implicitOccurrences","occurrence","set","seen","headingIndex","candidate","entries","sort","resolveActiveMarkdownSection","sections","threshold","active","section","findScrollContainer","overflowY","getComputedStyle","includes","MarkdownSectionNavigationPlugin","targetId","onActiveSectionChange","callbackRef","cleanup","frame","headingElements","matchedElements","dataset","markdownSectionId","console","warn","tabIndex","preventScroll","scrollContainer","previousId","publishActiveSection","containerTop","activeId","scrollTarget","passive","cancelAnimationFrame","createEmptyMarkdownTable","commandDefinitions","icon","Table2","ImageIcon","Code2","Minus","slashTrigger","exec","leadOffset","matchingString","replaceableString","createTableId","globalThis","crypto","randomUUID","Date","now","random","replaceSlashWithBlock","queryNode","nextParagraph","insertAfter","select","SlashCommandMenu","options","selectedIndex","onSelect","onHighlight","getElementById","option","selected","Flex","setRefElement","background","Icon","MarkdownSlashCommandPlugin","query","setQuery","imageQueryNodeKey","setImageQueryNodeKey","imageUrl","setImageUrl","imageAlt","setImageAlt","_temp3","remove","selectEnd","HISTORY_MERGE_TAG","closeImageDialog","queryNode_0","parent_0","insertImage","option_1","queryNode_1","closeMenu","$addUpdateTag","$createHorizontalRuleNode","LexicalTypeaheadMenuPlugin","_temp4","details","Dialog","Field","event_0","event_1","Button","option_0","anchorElementRef","menu","ReactDOM","setHighlightedIndex","option_2","selectOptionAndCleanUp","MarkdownHistoryPlugin","historyState","redoStack","undoStack","KEY_DOWN_COMMAND","HTMLInputElement","HTMLTextAreaElement","shiftKey","REDO_COMMAND","UNDO_COMMAND","HistoryPlugin","INITIAL_IMPORT_TAG","MarkdownEditor","autoFocus","debug","defaultState","placeholder","sectionNavigation","onChange","shouldTrackChanges","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","editorNodes","onError","editable","editorTheme","initialConfig","AutoFocusPlugin","ListPlugin","TabIndentationPlugin","CheckListPlugin","MarkdownShortcutPlugin","editorTransformers","HorizontalRulePlugin","RichTextPlugin","LexicalErrorBoundary","Fragment","OnChangePlugin","tags","markdownBody","LexicalComposer","error","InlineChildren","Link","MarkdownInline","projectRows","projectColumns","MarkdownDataTable","nodeKey","isSelected","setSelected","containerRef","focusTable","change","setTable","HISTORY_PUSH_TAG","updateTable","handleColumnsChange","data","current_0","row_0","String","column_0","handleDataChange","deleteTable","handleClick","currentTarget","relatedTarget","handleBlur","target_0","isTextInput","isContentEditable","stopPropagation","handleKeyDown","onColumnsChange","onDataChange","renderHeader","renderCell","renderCellEditor","EditModeDataTable","DataTableNode","__table","getLatest","json","headers","separator","column_1","row_1","HR","parentNode","UNDERLINE_INS_TAG","TextNode","markdownText","UNDERLINE_U_TAG","_node","BARE_URL_REGEXP","unescapeUrl","escapeLinkTitle","unescapeLinkTitle","normalizeEscapedUrlText","exportedText","escapedHref","LINK","exportChildren","linkText","linkTitle","openBracketAmount","closeBracketAmount","parsedLinkText","outsideLinkText","linkTextParts","normalizedLinkText","linkTextNode","setFormat","getFormat","insertBefore","trigger","BARE_URL","AutoLinkNode","$createAutoLinkNode","TRANSFORMERS_EXTENDED","QuoteNode","HeadingNode","ListNode","ListItemNode","CodeHighlightNode","baseEditorTransformers","CHECK_LIST","TRANSFORMERS","transformer","LEXICAL_LINK"],"mappings":"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"}
|