@pstdio/ui 0.20.1 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/{MermaidComponent-BVMyKttu.js → MermaidComponent-D92GMhht.js} +3 -3
  2. package/dist/{MermaidComponent-BVMyKttu.js.map → MermaidComponent-D92GMhht.js.map} +1 -1
  3. package/dist/chat-ui.d.ts +2 -0
  4. package/dist/chat-ui.js +3 -7
  5. package/dist/chat-ui.js.map +1 -1
  6. package/dist/components/data-table/build-columns.d.ts +2 -0
  7. package/dist/components/data-table/data-table-column-menu.d.ts +2 -0
  8. package/dist/components/data-table/data-table-row-display.d.ts +11 -0
  9. package/dist/components/data-table/data-table-table-parts.d.ts +1 -0
  10. package/dist/components/data-table/edit-mode-data-table-body.d.ts +1 -0
  11. package/dist/components/data-table/edit-mode-data-table-cell.d.ts +1 -0
  12. package/dist/components/data-table/edit-mode-data-table-header.d.ts +1 -0
  13. package/dist/components/data-table/types.d.ts +1 -0
  14. package/dist/components/diff-viewer/code-editor.d.ts +8 -2
  15. package/dist/components/diff-viewer/index.d.ts +1 -0
  16. package/dist/components/kanban-renderer/collection-badge.d.ts +7 -0
  17. package/dist/components/kanban-renderer/index.d.ts +1 -1
  18. package/dist/components/kanban-renderer/kanban-renderer-helpers.d.ts +2 -1
  19. package/dist/components/kanban-renderer/types.d.ts +20 -1
  20. package/dist/components/list-row/list-row-content.d.ts +1 -0
  21. package/dist/components/param-editor/param-editor-presentation.d.ts +1 -1
  22. package/dist/components/param-editor/param-editor.types.d.ts +5 -193
  23. package/dist/components/rich-text/shared/markdown-ast.d.ts +1 -0
  24. package/dist/components/rich-text/shared/markdown-source-document.d.ts +7 -0
  25. package/dist/components/rich-text/shared/markdown-source-links.d.ts +11 -0
  26. package/dist/components/rich-text/shared/markdown-source-map.d.ts +10 -0
  27. package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
  28. package/dist/components/tag-editor/tag-editor-row.d.ts +2 -1
  29. package/dist/components/tag-editor/tag-editor.types.d.ts +13 -0
  30. package/dist/components/tag-editor/tag-settings-panel.d.ts +1 -1
  31. package/dist/components/tree-list/tree-list-drag-provider.d.ts +13 -0
  32. package/dist/components/tree-list/tree-list-order.store.d.ts +4 -1
  33. package/dist/components/tree-list/tree-list-reorder.d.ts +14 -3
  34. package/dist/components/tree-list/tree-list-sortable.d.ts +2 -0
  35. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +2 -2
  36. package/dist/components/tree-list/tree-list.d.ts +3 -0
  37. package/dist/components/tree-list/tree-list.types.d.ts +4 -0
  38. package/dist/data-table.d.ts +2 -0
  39. package/dist/data-table.js +740 -704
  40. package/dist/data-table.js.map +1 -1
  41. package/dist/diff.d.ts +2 -0
  42. package/dist/diff.js +532 -533
  43. package/dist/diff.js.map +1 -1
  44. package/dist/edit-mode-data-table-DGgRuSW3.js +846 -0
  45. package/dist/edit-mode-data-table-DGgRuSW3.js.map +1 -0
  46. package/dist/index.d.ts +2 -0
  47. package/dist/index.js +1603 -1492
  48. package/dist/index.js.map +1 -1
  49. package/dist/{kanban-renderer-toolbar-CpegGbwq.js → kanban-renderer-toolbar-Bl8xXdwU.js} +527 -469
  50. package/dist/kanban-renderer-toolbar-Bl8xXdwU.js.map +1 -0
  51. package/dist/kanban-renderer.d.ts +2 -0
  52. package/dist/kanban-renderer.js +21 -21
  53. package/dist/kanban-renderer.js.map +1 -1
  54. package/dist/lazy-markdown-editor-CCOchoJX.js +235 -0
  55. package/dist/lazy-markdown-editor-CCOchoJX.js.map +1 -0
  56. package/dist/list-row-DCgdza1i.js +812 -0
  57. package/dist/list-row-DCgdza1i.js.map +1 -0
  58. package/dist/markdown-CASvn1Z2.js +1643 -0
  59. package/dist/markdown-CASvn1Z2.js.map +1 -0
  60. package/dist/markdown-editor-C4GCyebp.js +1019 -0
  61. package/dist/markdown-editor-C4GCyebp.js.map +1 -0
  62. package/dist/{mermaid-renderer-H3IhLqnQ.js → mermaid-renderer-CVnuKs-A.js} +2 -2
  63. package/dist/{mermaid-renderer-H3IhLqnQ.js.map → mermaid-renderer-CVnuKs-A.js.map} +1 -1
  64. package/dist/mermaid.d.ts +2 -0
  65. package/dist/mermaid.js +1 -1
  66. package/dist/monaco-browser-CgvlArN7.js +21 -0
  67. package/dist/monaco-browser-CgvlArN7.js.map +1 -0
  68. package/dist/{param-editor-B8Ff9Nm8.js → param-editor-CkDq623X.js} +2 -2
  69. package/dist/{param-editor-B8Ff9Nm8.js.map → param-editor-CkDq623X.js.map} +1 -1
  70. package/dist/param-editor-field-DRgbnL7-.js +2809 -0
  71. package/dist/param-editor-field-DRgbnL7-.js.map +1 -0
  72. package/dist/rich-message-DARuDVOX.js +628 -0
  73. package/dist/{rich-message-DdFYRzTo.js.map → rich-message-DARuDVOX.js.map} +1 -1
  74. package/dist/rich-text.d.ts +2 -0
  75. package/dist/rich-text.js +48 -47
  76. package/dist/rich-text.js.map +1 -1
  77. package/dist/style.css +1 -1
  78. package/dist/terminal.d.ts +2 -0
  79. package/dist/terminal.js +1 -1
  80. package/dist/terminal.js.map +1 -1
  81. package/dist/theme/primitives/sizes.d.ts +9 -0
  82. package/dist/{theme-BH4fSst9.js → theme-B-l5_a6F.js} +69 -50
  83. package/dist/theme-B-l5_a6F.js.map +1 -0
  84. package/dist/theme-preference-Bpobguh4.js +114 -0
  85. package/dist/theme-preference-Bpobguh4.js.map +1 -0
  86. package/dist/theme.d.ts +2 -0
  87. package/dist/theme.js +1 -1
  88. package/dist/tree-list-AlO5ZmxQ.js +1262 -0
  89. package/dist/tree-list-AlO5ZmxQ.js.map +1 -0
  90. package/dist/utils/theme-preference.d.ts +4 -1
  91. package/dist/workspace-badge-BR_GgsAG.js +175 -0
  92. package/dist/workspace-badge-BR_GgsAG.js.map +1 -0
  93. package/package.json +5 -42
  94. package/dist/dialog-accept-shortcut-DAEBsoWW.js +0 -7
  95. package/dist/dialog-accept-shortcut-DAEBsoWW.js.map +0 -1
  96. package/dist/edit-mode-data-table-D6NeiDJx.js +0 -775
  97. package/dist/edit-mode-data-table-D6NeiDJx.js.map +0 -1
  98. package/dist/editor-config-D9OksZ93.js +0 -2416
  99. package/dist/editor-config-D9OksZ93.js.map +0 -1
  100. package/dist/kanban-renderer-toolbar-CpegGbwq.js.map +0 -1
  101. package/dist/lazy-markdown-editor-B7uP2ALS.js +0 -26
  102. package/dist/lazy-markdown-editor-B7uP2ALS.js.map +0 -1
  103. package/dist/list-row-9oxy-F0v.js +0 -796
  104. package/dist/list-row-9oxy-F0v.js.map +0 -1
  105. package/dist/monaco-browser-CO0NxK_Z.js +0 -19
  106. package/dist/monaco-browser-CO0NxK_Z.js.map +0 -1
  107. package/dist/number-input-WUfejtNx.js +0 -343
  108. package/dist/number-input-WUfejtNx.js.map +0 -1
  109. package/dist/param-editor-field-Cu4pto_a.js +0 -2845
  110. package/dist/param-editor-field-Cu4pto_a.js.map +0 -1
  111. package/dist/rich-message-DdFYRzTo.js +0 -658
  112. package/dist/theme-BH4fSst9.js.map +0 -1
  113. package/dist/theme-preference-DyymrYpR.js +0 -123
  114. package/dist/theme-preference-DyymrYpR.js.map +0 -1
  115. package/dist/tree-list-uV4UFj0x.js +0 -1116
  116. package/dist/tree-list-uV4UFj0x.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-editor-C4GCyebp.js","sources":["../src/components/rich-text/shared/plugins/CodePlugin/CodeBlockActionsPlugin.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/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"],"sourcesContent":["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 { 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","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 { createMarkdownSourceDocument } from \"../shared/markdown-source-document\";\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 sourceDocumentRef = useRef<ReturnType<typeof createMarkdownSourceDocument> | null>(null);\n sourceDocumentRef.current ??= createMarkdownSourceDocument(body, resolveMarkdownUrl);\n const sourceDocument = sourceDocumentRef.current;\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 sourceDocument.importToLexical();\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 = sourceDocument.exportFromLexical(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"],"names":["getCodeElementFromSelection","editor","selection","$getSelection","$isRangeSelection","anchorNode","anchor","getNode","codeNode","$isCodeNode","$findMatchingParent","node","codeElement","getElementByKey","getKey","HTMLElement","getCodeElementFromTarget","target","closest","getActionPosition","anchorElem","anchorRect","getBoundingClientRect","codeRect","top","left","right","CodeBlockActionsPlugin","t0","$","_c","useLexicalComposerContext","activeCodeElement","setActiveCodeElement","useState","isCopied","setIsCopied","copyResetTimeoutRef","useRef","t1","t2","Symbol","for","current","window","clearTimeout","useEffect","t3","t4","rootElement","getRootElement","handlePointerMove","event","nextCodeElement","handlePointerLeave","getEditorState","read","selectionCodeElement","addEventListener","removeEventListener","t5","t6","mergeRegister","registerUpdateListener","t7","editorState","selectionCodeElement_0","registerCommand","SELECTION_CHANGE_COMMAND","selectionCodeElement_1","_temp","COMMAND_PRIORITY_CRITICAL","position","t8","style","t9","t10","t11","textContent","code","navigator","clipboard","writeText","setTimeout","t12","Check","jsx","Copy","t13","IconButton","t14","Tooltip","t15","t16","createPortal","matches","TOGGLE_LINK_EDIT_MODE_COMMAND","createCommand","getSelectedNode","focus","focusNode","isBackward","$isAtNodeEnd","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","floatingElem","verticalGap","horizontalOffset","placement","coordinateSpace","scrollerElem","parentElement","opacity","transform","floatingElemRect","anchorElementRect","editorScrollerRect","DOMRect","document","documentElement","clientWidth","clientHeight","height","bottom","width","Math","abs","ToolbarSeparator","display","margin","borderLeft","FloatingToolbarButtons","props","blockType","isBold","isItalic","isUnderline","isCode","isLink","formatHeading","formatList","formatQuote","insertLink","undefined","dispatchCommand","FORMAT_TEXT_COMMAND","Text","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","bullet","check","h1","h2","h3","h4","h5","h6","number","paragraph","quote","toKnownBlockType","type","findSelectionElement","parent","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","element","$isListNode","getListType","parentList","$isHeadingNode","getTag","getType","shouldShowFloatingToolbar","params","hasSelection","isRangeSelection","isCollapsed","hasNativeSelection","hasNativeRange","isAnchorInsideEditor","isEditorEditable","GAP","FloatingTextToolbar","isToolbarActive","setIsToolbarActive","editorRef","setBlockType","setIsBold","setIsItalic","setIsUnderline","setIsCode","setIsLink","updateFloatingToolbarRef","headingSize","update","$setBlocksType","$createParagraphNode","$createHeadingNode","REMOVE_LIST_COMMAND","command","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_CHECK_LIST_COMMAND","$createQuoteNode","TOGGLE_LINK_COMMAND","updateToolbar","hasFormat","linkParent","$isLinkNode","autoLinkParent","$isAutoLinkNode","nextBlockType","editorElem","nativeSelection","getSelection","rangeCount","Boolean","contains","isEditable","domRect","getRangeAt","bottomRect","_payload","CLICK_COMMAND","COMMAND_PRIORITY_HIGH","Box","FloatingTextFormatToolbarPlugin","body","LinkEditorContent","isActive","isLinkEditMode","editedLinkUrl","editedLinkUrlIsValid","linkUrl","href","inputRef","onEditedLinkUrlChange","onInputKeyDown","onClose","onSubmit","onEdit","onRemove","value","Input","X","preventFocusLoss","jsxs","ChakraLink","Pencil","Trash2","preventDefault","shouldCancelLinkEdit","getSelectionLinkUrl","getURL","SUPPORTED_URL_PROTOCOLS","Set","sanitizeUrl","url","parsedUrl","URL","has","protocol","validateUrl","hostname","pathname","trim","LinkEditor","setIsLinkEditMode","updateLinkEditorRef","setLinkUrl","setEditedLinkUrl","lastSelection","setLastSelection","nextLinkUrl","closeLinkEditor","activeElement","rangeRect","topRect","COMMAND_PRIORITY_LOW","KEY_ESCAPE_COMMAND","useLayoutEffect","monitorInputInteraction","key","handleLinkSubmission","$setSelection","linkNode","$createLinkNode","rel","__rel","__target","title","__title","replace","useLinkEditorToolbar","activeEditor","setActiveEditor","$updateToolbar","focusLinkNode","focusAutoLinkNode","badNode","getNodes","filter","find","node_0","autoLinkNode","autoLinkIsUnlinked","getIsUnlinked","is","newEditor","_temp2","payload_0","payload","selection_0","node_1","linkNode_0","metaKey","ctrlKey","open","$isLineBreakNode","LinkEditorPlugin","LinkPlugin","LexicalLinkPlugin","normalizeHeading","matchMarkdownSectionAnchors","headings","anchors","normalizedHeadings","map","implicitOccurrences","Map","heading","occurrence","get","set","seen","headingIndex","candidate","entries","push","id","sort","resolveActiveMarkdownSection","sections","threshold","active","section","findScrollContainer","root","overflowY","getComputedStyle","includes","MarkdownSectionNavigationPlugin","targetId","onActiveSectionChange","callbackRef","cleanup","frame","requestAnimationFrame","headingElements","Array","from","querySelectorAll","matchedElements","match","dataset","markdownSectionId","console","warn","tabIndex","scrollIntoView","block","preventScroll","scrollContainer","previousId","publishActiveSection","containerTop","activeId","scrollTarget","passive","cancelAnimationFrame","createEmptyMarkdownTable","columns","label","alignment","rows","cells","commandDefinitions","icon","Table2","ImageIcon","Code2","Minus","slashTrigger","text","exec","leadOffset","matchingString","replaceableString","createTableId","globalThis","crypto","randomUUID","Date","now","random","replaceSlashWithBlock","queryNode","$isParagraphNode","nextParagraph","insertAfter","select","SlashCommandMenu","options","selectedIndex","onSelect","onHighlight","getElementById","length","option","index","selected","Flex","setRefElement","background","Icon","MarkdownSlashCommandPlugin","query","setQuery","imageQueryNodeKey","setImageQueryNodeKey","imageUrl","setImageUrl","imageAlt","setImageAlt","toLowerCase","_temp3","$getNodeByKey","$isTextNode","remove","selectEnd","tag","HISTORY_MERGE_TAG","closeImageDialog","queryNode_0","imageNode","$createMarkdownImageNode","parent_0","insertImage","option_1","queryNode_1","closeMenu","$addUpdateTag","$createDataTableNode","$createCodeNode","$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","fullWidth","padding","placeholder","scrollable","sectionNavigation","resolveMarkdownUrl","onChange","frontmatter","splitFrontmatter","shouldTrackChanges","editorContainerRef","sourceDocumentRef","createMarkdownSourceDocument","sourceDocument","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","MarkdownUrlProvider","LexicalComposer","namespace","nodes","editorNodes","importToLexical","onError","error","editable","theme","editorTheme","AutoFocusPlugin","ListPlugin","TabIndentationPlugin","CheckListPlugin","MarkdownShortcutPlugin","editorTransformers","HorizontalRulePlugin","CodeHighlightingPlugin","ImportCodeBlocksPlugin","EquationPlugin","RichTextPlugin","ContentEditable","LexicalErrorBoundary","Fragment","OnChangePlugin","_editor","tags","$getRoot","markdownBody","exportFromLexical","ToggleEditablePlugin","TreeViewPlugin"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { useState as $, useRef as le, useEffect as K } from "react";
5
5
  import { S as ge, T as Q } from "./browser-storage-DPtOQJx0.js";
6
6
  import { Download as pe, X as be, Pencil as xe, Maximize2 as we, Plus as ye, Minus as ve } from "lucide-react";
7
7
  import se from "mermaid";
8
- import { u as Se, g as Me } from "./theme-preference-DyymrYpR.js";
8
+ import { u as Se, g as Me } from "./theme-preference-Bpobguh4.js";
9
9
  const ae = 0.5, ce = 3, de = 0.25, ee = (n) => Number(Math.min(ce, Math.max(ae, n)).toFixed(2)), Pe = (n) => ee(n + de), _e = (n) => ee(n - de), te = (n) => {
10
10
  if (!n)
11
11
  return 0;
@@ -422,4 +422,4 @@ const Be = (n) => n === "dark" ? "dark" : "default", ke = (n) => {
422
422
  export {
423
423
  Ke as M
424
424
  };
425
- //# sourceMappingURL=mermaid-renderer-H3IhLqnQ.js.map
425
+ //# sourceMappingURL=mermaid-renderer-CVnuKs-A.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mermaid-renderer-H3IhLqnQ.js","sources":["../src/components/mermaid-renderer/mermaid-zoom.ts","../src/components/mermaid-renderer/svg-data-url.ts","../src/components/mermaid-renderer/download-png.ts","../src/components/mermaid-renderer/mermaid-error-state.tsx","../src/components/mermaid-renderer/mermaid-fullscreen.tsx","../src/components/mermaid-renderer/mermaid-toolbar.tsx","../src/components/mermaid-renderer/mermaid-svg-view.tsx","../src/components/mermaid-renderer/use-mermaid-render.ts","../src/components/mermaid-renderer/mermaid-renderer.tsx"],"sourcesContent":["export const MERMAID_MIN_ZOOM = 0.5;\nexport const MERMAID_MAX_ZOOM = 3;\nexport const MERMAID_ZOOM_STEP = 0.25;\n\nexport const clampMermaidZoom = (value: number) =>\n Number(Math.min(MERMAID_MAX_ZOOM, Math.max(MERMAID_MIN_ZOOM, value)).toFixed(2));\n\nexport const zoomIn = (zoom: number) => clampMermaidZoom(zoom + MERMAID_ZOOM_STEP);\n\nexport const zoomOut = (zoom: number) => clampMermaidZoom(zoom - MERMAID_ZOOM_STEP);\n","const parseSvgLength = (value: string | undefined) => {\n if (!value) {\n return 0;\n }\n\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : 0;\n};\n\nconst readAttribute = (svg: string, name: string) => {\n const match = svg.match(new RegExp(`\\\\s${name}=\"([^\"]+)\"`));\n return match?.[1];\n};\n\nexport const resolveSvgSize = (svg: string) => {\n const viewBox = readAttribute(svg, \"viewBox\")?.split(/\\s+/).map(Number) ?? [];\n const viewBoxWidth = viewBox[2] ?? 0;\n const viewBoxHeight = viewBox[3] ?? 0;\n\n if (viewBoxWidth > 0 && viewBoxHeight > 0) {\n return { width: viewBoxWidth, height: viewBoxHeight };\n }\n\n return {\n width: Math.max(parseSvgLength(readAttribute(svg, \"width\")), 1),\n height: Math.max(parseSvgLength(readAttribute(svg, \"height\")), 1),\n };\n};\n\n// SVG data URLs are parsed as strict XML by the browser; void HTML tags like `<br>`\n// must be self-closing or the image silently fails to decode (naturalWidth becomes 0).\n// Mermaid emits `<br/>` itself, but DOMPurify (used when securityLevel !== \"loose\")\n// normalises it back to the HTML5 form.\nconst closeVoidHtmlTags = (svg: string) => svg.replace(/<br(\\s[^>]*)?>/g, \"<br$1/>\");\n\nexport const normalizeSvgForImage = (svg: string) => {\n const { width, height } = resolveSvgSize(svg);\n\n const sized = svg.replace(/<svg\\b[^>]*>/, (tag) => {\n const withWidth = /\\swidth=/.test(tag)\n ? tag.replace(/\\swidth=\"[^\"]*\"/, ` width=\"${width}\"`)\n : tag.replace(\"<svg\", `<svg width=\"${width}\"`);\n\n return /\\sheight=/.test(withWidth)\n ? withWidth.replace(/\\sheight=\"[^\"]*\"/, ` height=\"${height}\"`)\n : withWidth.replace(\"<svg\", `<svg height=\"${height}\"`);\n });\n\n return closeVoidHtmlTags(sized);\n};\n\nexport const createSvgDataUrl = (svg: string) => {\n const bytes = new TextEncoder().encode(normalizeSvgForImage(svg));\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n\n return `data:image/svg+xml;base64,${btoa(binary)}`;\n};\n","import { clampMermaidZoom } from \"./mermaid-zoom\";\nimport { createSvgDataUrl, resolveSvgSize } from \"./svg-data-url\";\n\ninterface DownloadMermaidPngOptions {\n svg: string;\n zoom: number;\n filename?: string;\n}\n\nconst loadImage = (url: string) =>\n new Promise<{ image: HTMLImageElement; cleanup: () => void }>((resolve, reject) => {\n const image = new Image();\n image.style.position = \"fixed\";\n image.style.left = \"-10000px\";\n image.style.top = \"0\";\n image.style.pointerEvents = \"none\";\n image.onload = () => resolve({ image, cleanup: () => image.remove() });\n image.onerror = () => {\n image.remove();\n reject(new Error(\"Failed to load rendered Mermaid SVG for PNG export.\"));\n };\n document.body.append(image);\n image.src = url;\n });\n\nconst canvasToPngBlob = (canvas: HTMLCanvasElement) =>\n new Promise<Blob>((resolve, reject) => {\n canvas.toBlob((blob) => {\n if (blob) {\n resolve(blob);\n return;\n }\n\n reject(new Error(\"Failed to encode Mermaid diagram as PNG.\"));\n }, \"image/png\");\n });\n\nconst triggerDownload = (blob: Blob, filename: string) => {\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n document.body.append(anchor);\n anchor.click();\n anchor.remove();\n window.setTimeout(() => URL.revokeObjectURL(url), 0);\n};\n\nexport const downloadMermaidPng = async (options: DownloadMermaidPngOptions) => {\n const { svg, zoom, filename = \"mermaid-diagram.png\" } = options;\n const svgUrl = createSvgDataUrl(svg);\n\n const { image, cleanup } = await loadImage(svgUrl);\n try {\n const { width, height } = resolveSvgSize(svg);\n const scale = clampMermaidZoom(zoom);\n const canvas = document.createElement(\"canvas\");\n canvas.width = Math.ceil(width * scale);\n canvas.height = Math.ceil(height * scale);\n\n const context = canvas.getContext(\"2d\");\n if (!context) {\n throw new Error(\"Canvas rendering is unavailable for Mermaid PNG export.\");\n }\n\n context.scale(scale, scale);\n context.drawImage(image, 0, 0, width, height);\n triggerDownload(await canvasToPngBlob(canvas), filename);\n } finally {\n cleanup();\n }\n};\n","import { Box, Text } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\ninterface MermaidErrorStateProps {\n code: string;\n error: string;\n}\n\nexport const MermaidErrorState = (props: MermaidErrorStateProps) => {\n const { code, error } = props;\n\n return (\n <Box role=\"alert\" borderRadius=\"sm\" bg=\"bg.panel\" p=\"sm\">\n <Text color=\"fg.error\" textStyle=\"label/S/medium\">\n Mermaid parse failed\n </Text>\n <Text color=\"fg.muted\" textStyle=\"label/S/regular\" mt=\"2xs\" whiteSpace=\"pre-wrap\">\n {error}\n </Text>\n <ScrollArea\n mt=\"sm\"\n borderRadius=\"sm\"\n bg=\"bg.muted\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ p: \"sm\" }}\n >\n <Box as=\"pre\" m=\"0\" fontSize=\"sm\">\n {code}\n </Box>\n </ScrollArea>\n </Box>\n );\n};\n","import { Button, Dialog, Icon, IconButton, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Download, X } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\ninterface MermaidFullscreenProps {\n children: ReactNode;\n canDownload: boolean;\n open: boolean;\n onClose: () => void;\n onDownload: () => void;\n}\n\nexport const MermaidFullscreen = (props: MermaidFullscreenProps) => {\n const { children, canDownload, open, onClose, onDownload } = props;\n\n return (\n <Dialog.Root lazyMount unmountOnExit open={open} onOpenChange={(details) => !details.open && onClose()}>\n <Portal>\n <Dialog.Backdrop />\n <Dialog.Positioner padding={{ base: \"sm\", md: \"lg\" }}>\n <Dialog.Content\n width=\"min(72rem, calc(100vw - 2rem))\"\n height=\"min(48rem, calc(100dvh - 2rem))\"\n maxW=\"none\"\n borderRadius=\"xs\"\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n >\n <Dialog.Header\n data-testid=\"mermaid-fullscreen-header\"\n p=\"sm\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <Stack direction=\"row\" align=\"center\" justify=\"space-between\" width=\"100%\" gap=\"sm\">\n <Dialog.Title asChild>\n <Text textStyle=\"heading/S\">Mermaid diagram</Text>\n </Dialog.Title>\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <Button size=\"sm\" variant=\"subtle\" onClick={onDownload} disabled={!canDownload}>\n <Icon as={Download} boxSize=\"16px\" />\n Download as PNG\n </Button>\n <IconButton aria-label=\"Close\" size=\"sm\" variant=\"ghost\" onClick={onClose}>\n <Icon as={X} boxSize=\"16px\" />\n </IconButton>\n </Stack>\n </Stack>\n </Dialog.Header>\n <Dialog.Body data-testid=\"mermaid-fullscreen-body\" p=\"0\" flex=\"1\" minH=\"0\">\n {children}\n </Dialog.Body>\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n};\n","import { Icon, IconButton, Stack } from \"@chakra-ui/react\";\nimport { Maximize2, Minus, Pencil, Plus } from \"lucide-react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { MERMAID_MAX_ZOOM, MERMAID_MIN_ZOOM, zoomIn, zoomOut } from \"./mermaid-zoom\";\n\ninterface MermaidInlineToolbarProps {\n isEditable: boolean;\n onRequestEdit?: () => void;\n onOpenFullscreen: () => void;\n}\n\ninterface MermaidZoomControlsProps {\n zoom: number;\n onZoomChange: (zoom: number) => void;\n}\n\nexport const MermaidInlineToolbar = (props: MermaidInlineToolbarProps) => {\n const { isEditable, onRequestEdit, onOpenFullscreen } = props;\n\n return (\n <Stack\n data-testid=\"mermaid-inline-toolbar\"\n direction=\"row\"\n justify=\"flex-end\"\n align=\"center\"\n gap=\"xs\"\n position=\"absolute\"\n top=\"sm\"\n right=\"sm\"\n zIndex=\"1\"\n onPointerDown={(event) => event.stopPropagation()}\n >\n {isEditable && onRequestEdit ? (\n <Tooltip content=\"Edit source\">\n <IconButton aria-label=\"Edit\" size=\"xs\" variant=\"subtle\" onClick={onRequestEdit}>\n <Icon as={Pencil} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n ) : null}\n <Tooltip content=\"Open diagram\">\n <IconButton aria-label=\"Open diagram\" size=\"xs\" variant=\"subtle\" onClick={onOpenFullscreen}>\n <Icon as={Maximize2} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n};\n\nexport const MermaidZoomControls = (props: MermaidZoomControlsProps) => {\n const { zoom, onZoomChange } = props;\n\n return (\n <Stack\n data-testid=\"mermaid-zoom-controls\"\n gap=\"2xs\"\n position=\"absolute\"\n right=\"sm\"\n bottom=\"sm\"\n zIndex=\"1\"\n onPointerDown={(event) => event.stopPropagation()}\n >\n <Tooltip content=\"Zoom in\">\n <IconButton\n aria-label=\"Zoom in\"\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => onZoomChange(zoomIn(zoom))}\n disabled={zoom >= MERMAID_MAX_ZOOM}\n >\n <Icon as={Plus} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Zoom out\">\n <IconButton\n aria-label=\"Zoom out\"\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => onZoomChange(zoomOut(zoom))}\n disabled={zoom <= MERMAID_MIN_ZOOM}\n >\n <Icon as={Minus} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { PointerEvent, ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { MermaidZoomControls } from \"./mermaid-toolbar\";\nimport { createSvgDataUrl } from \"./svg-data-url\";\n\ninterface MermaidSvgViewProps {\n svg: string;\n zoom: number;\n allowPanAtDefaultZoom?: boolean;\n maxHeight?: string;\n minHeight?: string;\n overlayActions?: ReactNode;\n onZoomChange: (zoom: number) => void;\n}\n\nexport const MermaidSvgView = (props: MermaidSvgViewProps) => {\n const {\n allowPanAtDefaultZoom = false,\n maxHeight = \"420px\",\n minHeight = \"220px\",\n overlayActions,\n svg,\n zoom,\n onZoomChange,\n } = props;\n const [offset, setOffset] = useState({ x: 0, y: 0 });\n const [isPanning, setIsPanning] = useState(false);\n const panStartRef = useRef({ pointerId: -1, x: 0, y: 0 });\n const canPan = allowPanAtDefaultZoom || zoom > 1;\n\n const handlePointerDown = (event: PointerEvent<HTMLDivElement>) => {\n if (!canPan) {\n return;\n }\n\n panStartRef.current = {\n pointerId: event.pointerId,\n x: event.clientX - offset.x,\n y: event.clientY - offset.y,\n };\n setIsPanning(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n };\n\n const handlePointerMove = (event: PointerEvent<HTMLDivElement>) => {\n if (!canPan || !isPanning || panStartRef.current.pointerId !== event.pointerId) {\n return;\n }\n\n setOffset({\n x: event.clientX - panStartRef.current.x,\n y: event.clientY - panStartRef.current.y,\n });\n };\n\n const handlePointerUp = (event: PointerEvent<HTMLDivElement>) => {\n if (!canPan || panStartRef.current.pointerId !== event.pointerId) {\n return;\n }\n\n setIsPanning(false);\n event.currentTarget.releasePointerCapture(event.pointerId);\n };\n\n useEffect(() => {\n if (canPan) {\n return;\n }\n\n setOffset({ x: 0, y: 0 });\n setIsPanning(false);\n }, [canPan]);\n\n return (\n <Box\n data-testid=\"mermaid-diagram-surface\"\n position=\"relative\"\n minHeight={minHeight}\n maxHeight={maxHeight}\n overflow=\"hidden\"\n cursor={canPan ? (isPanning ? \"grabbing\" : \"grab\") : \"default\"}\n touchAction={canPan ? \"none\" : \"auto\"}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={() => {\n setIsPanning(false);\n }}\n >\n <Box\n data-testid=\"mermaid-diagram-transform\"\n data-pan-enabled={canPan ? \"true\" : \"false\"}\n width=\"100%\"\n maxHeight={maxHeight}\n textAlign=\"center\"\n transform={`translate3d(${offset.x}px, ${offset.y}px, 0) scale(${zoom})`}\n transformOrigin=\"top left\"\n cursor={canPan ? (isPanning ? \"grabbing\" : \"grab\") : \"default\"}\n css={{\n \"& img\": {\n display: \"inline-block\",\n width: \"auto\",\n maxWidth: \"100%\",\n maxHeight,\n height: \"auto\",\n userSelect: \"none\",\n },\n }}\n >\n <img alt=\"Mermaid diagram\" draggable={false} src={createSvgDataUrl(svg)} />\n </Box>\n {overlayActions}\n <MermaidZoomControls zoom={zoom} onZoomChange={onZoomChange} />\n </Box>\n );\n};\n","import mermaid from \"mermaid\";\nimport { useEffect, useState } from \"react\";\nimport { getThemePreferenceMode, type ThemePreferenceMode } from \"../../utils/apply-theme-preference\";\nimport { useThemePreference } from \"../../utils/theme-preference\";\n\nlet initializedMode: ThemePreferenceMode | null = null;\nlet renderSequence = 0;\nlet renderQueue = Promise.resolve();\n\nconst getMermaidTheme = (mode: ThemePreferenceMode) => (mode === \"dark\" ? \"dark\" : \"default\");\n\nconst initializeMermaid = (mode: ThemePreferenceMode) => {\n if (initializedMode === mode) {\n return;\n }\n\n mermaid.initialize({\n startOnLoad: false,\n htmlLabels: true,\n flowchart: {\n htmlLabels: true,\n },\n securityLevel: \"antiscript\",\n theme: getMermaidTheme(mode),\n });\n\n initializedMode = mode;\n};\n\nconst nextRenderId = () => {\n renderSequence += 1;\n return `mermaid-${renderSequence}`;\n};\n\nconst renderMermaidDiagram = (mode: ThemePreferenceMode, code: string) => {\n const render = async () => {\n // Mermaid keeps render config in a shared singleton, so theme changes must not overlap renders.\n initializeMermaid(mode);\n return mermaid.render(nextRenderId(), code);\n };\n\n const queuedRender = renderQueue.then(render, render);\n renderQueue = queuedRender.then(\n () => undefined,\n () => undefined,\n );\n\n return queuedRender;\n};\n\nconst formatMermaidError = (error: unknown) => {\n if (!(error instanceof Error)) {\n return \"Failed to render Mermaid diagram.\";\n }\n\n const message = error.message.trim();\n if (!message) {\n return \"Failed to render Mermaid diagram.\";\n }\n\n return message.split(\"\\n\").filter(Boolean).slice(0, 3).join(\"\\n\");\n};\n\nexport const useMermaidRender = (code: string) => {\n const { themePreference, themePreferences } = useThemePreference();\n const themeMode = getThemePreferenceMode(themePreference, themePreferences);\n const [svg, setSvg] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [isRendering, setIsRendering] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n\n const renderDiagram = async () => {\n setIsRendering(true);\n setError(\"\");\n\n try {\n const result = await renderMermaidDiagram(themeMode, code);\n if (cancelled) {\n return;\n }\n\n setSvg(result.svg);\n } catch (renderError) {\n if (cancelled) {\n return;\n }\n\n setSvg(\"\");\n setError(formatMermaidError(renderError));\n } finally {\n if (!cancelled) {\n setIsRendering(false);\n }\n }\n };\n\n void renderDiagram();\n\n return () => {\n cancelled = true;\n };\n }, [code, themeMode]);\n\n return { svg, error, isRendering };\n};\n","import { Box, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { downloadMermaidPng } from \"./download-png\";\nimport { MermaidErrorState } from \"./mermaid-error-state\";\nimport { MermaidFullscreen } from \"./mermaid-fullscreen\";\nimport { MermaidSvgView } from \"./mermaid-svg-view\";\nimport { MermaidInlineToolbar } from \"./mermaid-toolbar\";\nimport { useMermaidRender } from \"./use-mermaid-render\";\n\nexport interface MermaidRendererProps {\n code: string;\n initialFullscreenOpen?: boolean;\n initialZoom?: number;\n isEditable?: boolean;\n onRequestEdit?: () => void;\n}\n\ninterface MermaidPreviewContentProps {\n allowPanAtDefaultZoom?: boolean;\n code: string;\n error: string;\n isRendering: boolean;\n maxHeight?: string;\n minHeight?: string;\n overlayActions?: ReactNode;\n svg: string;\n zoom: number;\n onZoomChange: (zoom: number) => void;\n}\n\nconst MermaidPreviewContent = (props: MermaidPreviewContentProps) => {\n const {\n allowPanAtDefaultZoom,\n code,\n error,\n isRendering,\n maxHeight,\n minHeight,\n overlayActions,\n svg,\n zoom,\n onZoomChange,\n } = props;\n\n if (isRendering) {\n return (\n <Box position=\"relative\" minHeight={minHeight ?? \"220px\"} maxHeight={maxHeight} overflow=\"hidden\">\n <Text color=\"fg.muted\" textStyle=\"paragraph/S/regular\">\n Rendering diagram...\n </Text>\n {overlayActions}\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box position=\"relative\" minHeight={minHeight ?? \"220px\"} maxHeight={maxHeight} overflow=\"hidden\">\n <MermaidErrorState code={code} error={error} />\n {overlayActions}\n </Box>\n );\n }\n\n return (\n <MermaidSvgView\n key={svg}\n allowPanAtDefaultZoom={allowPanAtDefaultZoom}\n maxHeight={maxHeight}\n minHeight={minHeight}\n overlayActions={overlayActions}\n svg={svg}\n zoom={zoom}\n onZoomChange={onZoomChange}\n />\n );\n};\n\nexport const MermaidRenderer = (props: MermaidRendererProps) => {\n const { code, initialFullscreenOpen = false, initialZoom = 1, isEditable = false, onRequestEdit } = props;\n const { svg, error, isRendering } = useMermaidRender(code);\n const [inlineZoom, setInlineZoom] = useState(initialZoom);\n const [fullscreenZoom, setFullscreenZoom] = useState(1);\n const [isFullscreenOpen, setIsFullscreenOpen] = useState(initialFullscreenOpen);\n const previousResetValuesRef = useRef({ code, initialZoom });\n const canDownload = Boolean(svg) && !error && !isRendering;\n\n useEffect(() => {\n const previousResetValues = previousResetValuesRef.current;\n if (previousResetValues.code === code && previousResetValues.initialZoom === initialZoom) {\n return;\n }\n\n previousResetValuesRef.current = { code, initialZoom };\n setInlineZoom(initialZoom);\n setFullscreenZoom(1);\n }, [code, initialZoom]);\n\n const openFullscreen = () => {\n setFullscreenZoom(1);\n setIsFullscreenOpen(true);\n };\n\n return (\n <Box width=\"100%\">\n <MermaidPreviewContent\n code={code}\n error={error}\n isRendering={isRendering}\n overlayActions={\n <MermaidInlineToolbar\n isEditable={isEditable}\n onRequestEdit={onRequestEdit}\n onOpenFullscreen={openFullscreen}\n />\n }\n svg={svg}\n zoom={inlineZoom}\n onZoomChange={setInlineZoom}\n />\n <MermaidFullscreen\n open={isFullscreenOpen}\n canDownload={canDownload}\n onClose={() => setIsFullscreenOpen(false)}\n onDownload={() => downloadMermaidPng({ svg, zoom: fullscreenZoom })}\n >\n <MermaidPreviewContent\n allowPanAtDefaultZoom\n code={code}\n error={error}\n isRendering={isRendering}\n maxHeight=\"100%\"\n minHeight=\"100%\"\n svg={svg}\n zoom={fullscreenZoom}\n onZoomChange={setFullscreenZoom}\n />\n </MermaidFullscreen>\n </Box>\n );\n};\n"],"names":["MERMAID_MIN_ZOOM","MERMAID_MAX_ZOOM","MERMAID_ZOOM_STEP","clampMermaidZoom","value","Number","Math","min","max","toFixed","zoomIn","zoom","zoomOut","parseSvgLength","parsed","parseFloat","isFinite","readAttribute","svg","name","match","RegExp","resolveSvgSize","viewBox","split","map","viewBoxWidth","viewBoxHeight","width","height","closeVoidHtmlTags","replace","normalizeSvgForImage","sized","tag","withWidth","test","createSvgDataUrl","bytes","TextEncoder","encode","binary","byte","String","fromCharCode","btoa","loadImage","url","Promise","resolve","reject","image","Image","style","position","left","top","pointerEvents","onload","cleanup","remove","onerror","Error","document","body","append","src","canvasToPngBlob","canvas","toBlob","blob","triggerDownload","filename","URL","createObjectURL","anchor","createElement","href","download","click","window","setTimeout","revokeObjectURL","downloadMermaidPng","options","svgUrl","scale","ceil","context","getContext","drawImage","MermaidErrorState","props","$","_c","code","error","t0","Symbol","for","Text","t1","jsx","t2","p","t3","ScrollArea","Box","t4","jsxs","MermaidFullscreen","children","canDownload","open","onClose","onDownload","details","Dialog","base","md","t5","Icon","Download","t6","Button","t7","X","t8","IconButton","t9","Stack","t10","t11","Portal","t12","MermaidInlineToolbar","isEditable","onRequestEdit","onOpenFullscreen","Tooltip","Pencil","Maximize2","_temp","MermaidZoomControls","onZoomChange","Plus","Minus","_temp2","event","stopPropagation","MermaidSvgView","allowPanAtDefaultZoom","maxHeight","minHeight","overlayActions","undefined","x","y","offset","setOffset","useState","isPanning","setIsPanning","pointerId","panStartRef","useRef","canPan","current","clientX","clientY","currentTarget","setPointerCapture","handlePointerDown","event_0","handlePointerMove","event_1","releasePointerCapture","handlePointerUp","useEffect","t13","t14","t15","t16","display","maxWidth","userSelect","t17","t18","t19","t20","t21","initializedMode","renderSequence","renderQueue","getMermaidTheme","mode","initializeMermaid","mermaid","initialize","startOnLoad","htmlLabels","flowchart","securityLevel","theme","nextRenderId","renderMermaidDiagram","render","queuedRender","then","formatMermaidError","message","trim","filter","Boolean","slice","join","useMermaidRender","themePreference","themePreferences","useThemePreference","themeMode","getThemePreferenceMode","setSvg","setError","isRendering","setIsRendering","cancelled","result","renderError","renderDiagram","MermaidPreviewContent","MermaidRenderer","initialFullscreenOpen","initialZoom","inlineZoom","setInlineZoom","fullscreenZoom","setFullscreenZoom","isFullscreenOpen","setIsFullscreenOpen","previousResetValuesRef","previousResetValues","openFullscreen"],"mappings":"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"}
1
+ {"version":3,"file":"mermaid-renderer-CVnuKs-A.js","sources":["../src/components/mermaid-renderer/mermaid-zoom.ts","../src/components/mermaid-renderer/svg-data-url.ts","../src/components/mermaid-renderer/download-png.ts","../src/components/mermaid-renderer/mermaid-error-state.tsx","../src/components/mermaid-renderer/mermaid-fullscreen.tsx","../src/components/mermaid-renderer/mermaid-toolbar.tsx","../src/components/mermaid-renderer/mermaid-svg-view.tsx","../src/components/mermaid-renderer/use-mermaid-render.ts","../src/components/mermaid-renderer/mermaid-renderer.tsx"],"sourcesContent":["export const MERMAID_MIN_ZOOM = 0.5;\nexport const MERMAID_MAX_ZOOM = 3;\nexport const MERMAID_ZOOM_STEP = 0.25;\n\nexport const clampMermaidZoom = (value: number) =>\n Number(Math.min(MERMAID_MAX_ZOOM, Math.max(MERMAID_MIN_ZOOM, value)).toFixed(2));\n\nexport const zoomIn = (zoom: number) => clampMermaidZoom(zoom + MERMAID_ZOOM_STEP);\n\nexport const zoomOut = (zoom: number) => clampMermaidZoom(zoom - MERMAID_ZOOM_STEP);\n","const parseSvgLength = (value: string | undefined) => {\n if (!value) {\n return 0;\n }\n\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : 0;\n};\n\nconst readAttribute = (svg: string, name: string) => {\n const match = svg.match(new RegExp(`\\\\s${name}=\"([^\"]+)\"`));\n return match?.[1];\n};\n\nexport const resolveSvgSize = (svg: string) => {\n const viewBox = readAttribute(svg, \"viewBox\")?.split(/\\s+/).map(Number) ?? [];\n const viewBoxWidth = viewBox[2] ?? 0;\n const viewBoxHeight = viewBox[3] ?? 0;\n\n if (viewBoxWidth > 0 && viewBoxHeight > 0) {\n return { width: viewBoxWidth, height: viewBoxHeight };\n }\n\n return {\n width: Math.max(parseSvgLength(readAttribute(svg, \"width\")), 1),\n height: Math.max(parseSvgLength(readAttribute(svg, \"height\")), 1),\n };\n};\n\n// SVG data URLs are parsed as strict XML by the browser; void HTML tags like `<br>`\n// must be self-closing or the image silently fails to decode (naturalWidth becomes 0).\n// Mermaid emits `<br/>` itself, but DOMPurify (used when securityLevel !== \"loose\")\n// normalises it back to the HTML5 form.\nconst closeVoidHtmlTags = (svg: string) => svg.replace(/<br(\\s[^>]*)?>/g, \"<br$1/>\");\n\nexport const normalizeSvgForImage = (svg: string) => {\n const { width, height } = resolveSvgSize(svg);\n\n const sized = svg.replace(/<svg\\b[^>]*>/, (tag) => {\n const withWidth = /\\swidth=/.test(tag)\n ? tag.replace(/\\swidth=\"[^\"]*\"/, ` width=\"${width}\"`)\n : tag.replace(\"<svg\", `<svg width=\"${width}\"`);\n\n return /\\sheight=/.test(withWidth)\n ? withWidth.replace(/\\sheight=\"[^\"]*\"/, ` height=\"${height}\"`)\n : withWidth.replace(\"<svg\", `<svg height=\"${height}\"`);\n });\n\n return closeVoidHtmlTags(sized);\n};\n\nexport const createSvgDataUrl = (svg: string) => {\n const bytes = new TextEncoder().encode(normalizeSvgForImage(svg));\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n\n return `data:image/svg+xml;base64,${btoa(binary)}`;\n};\n","import { clampMermaidZoom } from \"./mermaid-zoom\";\nimport { createSvgDataUrl, resolveSvgSize } from \"./svg-data-url\";\n\ninterface DownloadMermaidPngOptions {\n svg: string;\n zoom: number;\n filename?: string;\n}\n\nconst loadImage = (url: string) =>\n new Promise<{ image: HTMLImageElement; cleanup: () => void }>((resolve, reject) => {\n const image = new Image();\n image.style.position = \"fixed\";\n image.style.left = \"-10000px\";\n image.style.top = \"0\";\n image.style.pointerEvents = \"none\";\n image.onload = () => resolve({ image, cleanup: () => image.remove() });\n image.onerror = () => {\n image.remove();\n reject(new Error(\"Failed to load rendered Mermaid SVG for PNG export.\"));\n };\n document.body.append(image);\n image.src = url;\n });\n\nconst canvasToPngBlob = (canvas: HTMLCanvasElement) =>\n new Promise<Blob>((resolve, reject) => {\n canvas.toBlob((blob) => {\n if (blob) {\n resolve(blob);\n return;\n }\n\n reject(new Error(\"Failed to encode Mermaid diagram as PNG.\"));\n }, \"image/png\");\n });\n\nconst triggerDownload = (blob: Blob, filename: string) => {\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n document.body.append(anchor);\n anchor.click();\n anchor.remove();\n window.setTimeout(() => URL.revokeObjectURL(url), 0);\n};\n\nexport const downloadMermaidPng = async (options: DownloadMermaidPngOptions) => {\n const { svg, zoom, filename = \"mermaid-diagram.png\" } = options;\n const svgUrl = createSvgDataUrl(svg);\n\n const { image, cleanup } = await loadImage(svgUrl);\n try {\n const { width, height } = resolveSvgSize(svg);\n const scale = clampMermaidZoom(zoom);\n const canvas = document.createElement(\"canvas\");\n canvas.width = Math.ceil(width * scale);\n canvas.height = Math.ceil(height * scale);\n\n const context = canvas.getContext(\"2d\");\n if (!context) {\n throw new Error(\"Canvas rendering is unavailable for Mermaid PNG export.\");\n }\n\n context.scale(scale, scale);\n context.drawImage(image, 0, 0, width, height);\n triggerDownload(await canvasToPngBlob(canvas), filename);\n } finally {\n cleanup();\n }\n};\n","import { Box, Text } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\ninterface MermaidErrorStateProps {\n code: string;\n error: string;\n}\n\nexport const MermaidErrorState = (props: MermaidErrorStateProps) => {\n const { code, error } = props;\n\n return (\n <Box role=\"alert\" borderRadius=\"sm\" bg=\"bg.panel\" p=\"sm\">\n <Text color=\"fg.error\" textStyle=\"label/S/medium\">\n Mermaid parse failed\n </Text>\n <Text color=\"fg.muted\" textStyle=\"label/S/regular\" mt=\"2xs\" whiteSpace=\"pre-wrap\">\n {error}\n </Text>\n <ScrollArea\n mt=\"sm\"\n borderRadius=\"sm\"\n bg=\"bg.muted\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ p: \"sm\" }}\n >\n <Box as=\"pre\" m=\"0\" fontSize=\"sm\">\n {code}\n </Box>\n </ScrollArea>\n </Box>\n );\n};\n","import { Button, Dialog, Icon, IconButton, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Download, X } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\ninterface MermaidFullscreenProps {\n children: ReactNode;\n canDownload: boolean;\n open: boolean;\n onClose: () => void;\n onDownload: () => void;\n}\n\nexport const MermaidFullscreen = (props: MermaidFullscreenProps) => {\n const { children, canDownload, open, onClose, onDownload } = props;\n\n return (\n <Dialog.Root lazyMount unmountOnExit open={open} onOpenChange={(details) => !details.open && onClose()}>\n <Portal>\n <Dialog.Backdrop />\n <Dialog.Positioner padding={{ base: \"sm\", md: \"lg\" }}>\n <Dialog.Content\n width=\"min(72rem, calc(100vw - 2rem))\"\n height=\"min(48rem, calc(100dvh - 2rem))\"\n maxW=\"none\"\n borderRadius=\"xs\"\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n >\n <Dialog.Header\n data-testid=\"mermaid-fullscreen-header\"\n p=\"sm\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <Stack direction=\"row\" align=\"center\" justify=\"space-between\" width=\"100%\" gap=\"sm\">\n <Dialog.Title asChild>\n <Text textStyle=\"heading/S\">Mermaid diagram</Text>\n </Dialog.Title>\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <Button size=\"sm\" variant=\"subtle\" onClick={onDownload} disabled={!canDownload}>\n <Icon as={Download} boxSize=\"16px\" />\n Download as PNG\n </Button>\n <IconButton aria-label=\"Close\" size=\"sm\" variant=\"ghost\" onClick={onClose}>\n <Icon as={X} boxSize=\"16px\" />\n </IconButton>\n </Stack>\n </Stack>\n </Dialog.Header>\n <Dialog.Body data-testid=\"mermaid-fullscreen-body\" p=\"0\" flex=\"1\" minH=\"0\">\n {children}\n </Dialog.Body>\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n};\n","import { Icon, IconButton, Stack } from \"@chakra-ui/react\";\nimport { Maximize2, Minus, Pencil, Plus } from \"lucide-react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { MERMAID_MAX_ZOOM, MERMAID_MIN_ZOOM, zoomIn, zoomOut } from \"./mermaid-zoom\";\n\ninterface MermaidInlineToolbarProps {\n isEditable: boolean;\n onRequestEdit?: () => void;\n onOpenFullscreen: () => void;\n}\n\ninterface MermaidZoomControlsProps {\n zoom: number;\n onZoomChange: (zoom: number) => void;\n}\n\nexport const MermaidInlineToolbar = (props: MermaidInlineToolbarProps) => {\n const { isEditable, onRequestEdit, onOpenFullscreen } = props;\n\n return (\n <Stack\n data-testid=\"mermaid-inline-toolbar\"\n direction=\"row\"\n justify=\"flex-end\"\n align=\"center\"\n gap=\"xs\"\n position=\"absolute\"\n top=\"sm\"\n right=\"sm\"\n zIndex=\"1\"\n onPointerDown={(event) => event.stopPropagation()}\n >\n {isEditable && onRequestEdit ? (\n <Tooltip content=\"Edit source\">\n <IconButton aria-label=\"Edit\" size=\"xs\" variant=\"subtle\" onClick={onRequestEdit}>\n <Icon as={Pencil} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n ) : null}\n <Tooltip content=\"Open diagram\">\n <IconButton aria-label=\"Open diagram\" size=\"xs\" variant=\"subtle\" onClick={onOpenFullscreen}>\n <Icon as={Maximize2} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n};\n\nexport const MermaidZoomControls = (props: MermaidZoomControlsProps) => {\n const { zoom, onZoomChange } = props;\n\n return (\n <Stack\n data-testid=\"mermaid-zoom-controls\"\n gap=\"2xs\"\n position=\"absolute\"\n right=\"sm\"\n bottom=\"sm\"\n zIndex=\"1\"\n onPointerDown={(event) => event.stopPropagation()}\n >\n <Tooltip content=\"Zoom in\">\n <IconButton\n aria-label=\"Zoom in\"\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => onZoomChange(zoomIn(zoom))}\n disabled={zoom >= MERMAID_MAX_ZOOM}\n >\n <Icon as={Plus} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Zoom out\">\n <IconButton\n aria-label=\"Zoom out\"\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => onZoomChange(zoomOut(zoom))}\n disabled={zoom <= MERMAID_MIN_ZOOM}\n >\n <Icon as={Minus} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { PointerEvent, ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { MermaidZoomControls } from \"./mermaid-toolbar\";\nimport { createSvgDataUrl } from \"./svg-data-url\";\n\ninterface MermaidSvgViewProps {\n svg: string;\n zoom: number;\n allowPanAtDefaultZoom?: boolean;\n maxHeight?: string;\n minHeight?: string;\n overlayActions?: ReactNode;\n onZoomChange: (zoom: number) => void;\n}\n\nexport const MermaidSvgView = (props: MermaidSvgViewProps) => {\n const {\n allowPanAtDefaultZoom = false,\n maxHeight = \"420px\",\n minHeight = \"220px\",\n overlayActions,\n svg,\n zoom,\n onZoomChange,\n } = props;\n const [offset, setOffset] = useState({ x: 0, y: 0 });\n const [isPanning, setIsPanning] = useState(false);\n const panStartRef = useRef({ pointerId: -1, x: 0, y: 0 });\n const canPan = allowPanAtDefaultZoom || zoom > 1;\n\n const handlePointerDown = (event: PointerEvent<HTMLDivElement>) => {\n if (!canPan) {\n return;\n }\n\n panStartRef.current = {\n pointerId: event.pointerId,\n x: event.clientX - offset.x,\n y: event.clientY - offset.y,\n };\n setIsPanning(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n };\n\n const handlePointerMove = (event: PointerEvent<HTMLDivElement>) => {\n if (!canPan || !isPanning || panStartRef.current.pointerId !== event.pointerId) {\n return;\n }\n\n setOffset({\n x: event.clientX - panStartRef.current.x,\n y: event.clientY - panStartRef.current.y,\n });\n };\n\n const handlePointerUp = (event: PointerEvent<HTMLDivElement>) => {\n if (!canPan || panStartRef.current.pointerId !== event.pointerId) {\n return;\n }\n\n setIsPanning(false);\n event.currentTarget.releasePointerCapture(event.pointerId);\n };\n\n useEffect(() => {\n if (canPan) {\n return;\n }\n\n setOffset({ x: 0, y: 0 });\n setIsPanning(false);\n }, [canPan]);\n\n return (\n <Box\n data-testid=\"mermaid-diagram-surface\"\n position=\"relative\"\n minHeight={minHeight}\n maxHeight={maxHeight}\n overflow=\"hidden\"\n cursor={canPan ? (isPanning ? \"grabbing\" : \"grab\") : \"default\"}\n touchAction={canPan ? \"none\" : \"auto\"}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={() => {\n setIsPanning(false);\n }}\n >\n <Box\n data-testid=\"mermaid-diagram-transform\"\n data-pan-enabled={canPan ? \"true\" : \"false\"}\n width=\"100%\"\n maxHeight={maxHeight}\n textAlign=\"center\"\n transform={`translate3d(${offset.x}px, ${offset.y}px, 0) scale(${zoom})`}\n transformOrigin=\"top left\"\n cursor={canPan ? (isPanning ? \"grabbing\" : \"grab\") : \"default\"}\n css={{\n \"& img\": {\n display: \"inline-block\",\n width: \"auto\",\n maxWidth: \"100%\",\n maxHeight,\n height: \"auto\",\n userSelect: \"none\",\n },\n }}\n >\n <img alt=\"Mermaid diagram\" draggable={false} src={createSvgDataUrl(svg)} />\n </Box>\n {overlayActions}\n <MermaidZoomControls zoom={zoom} onZoomChange={onZoomChange} />\n </Box>\n );\n};\n","import mermaid from \"mermaid\";\nimport { useEffect, useState } from \"react\";\nimport { getThemePreferenceMode, type ThemePreferenceMode } from \"../../utils/apply-theme-preference\";\nimport { useThemePreference } from \"../../utils/theme-preference\";\n\nlet initializedMode: ThemePreferenceMode | null = null;\nlet renderSequence = 0;\nlet renderQueue = Promise.resolve();\n\nconst getMermaidTheme = (mode: ThemePreferenceMode) => (mode === \"dark\" ? \"dark\" : \"default\");\n\nconst initializeMermaid = (mode: ThemePreferenceMode) => {\n if (initializedMode === mode) {\n return;\n }\n\n mermaid.initialize({\n startOnLoad: false,\n htmlLabels: true,\n flowchart: {\n htmlLabels: true,\n },\n securityLevel: \"antiscript\",\n theme: getMermaidTheme(mode),\n });\n\n initializedMode = mode;\n};\n\nconst nextRenderId = () => {\n renderSequence += 1;\n return `mermaid-${renderSequence}`;\n};\n\nconst renderMermaidDiagram = (mode: ThemePreferenceMode, code: string) => {\n const render = async () => {\n // Mermaid keeps render config in a shared singleton, so theme changes must not overlap renders.\n initializeMermaid(mode);\n return mermaid.render(nextRenderId(), code);\n };\n\n const queuedRender = renderQueue.then(render, render);\n renderQueue = queuedRender.then(\n () => undefined,\n () => undefined,\n );\n\n return queuedRender;\n};\n\nconst formatMermaidError = (error: unknown) => {\n if (!(error instanceof Error)) {\n return \"Failed to render Mermaid diagram.\";\n }\n\n const message = error.message.trim();\n if (!message) {\n return \"Failed to render Mermaid diagram.\";\n }\n\n return message.split(\"\\n\").filter(Boolean).slice(0, 3).join(\"\\n\");\n};\n\nexport const useMermaidRender = (code: string) => {\n const { themePreference, themePreferences } = useThemePreference();\n const themeMode = getThemePreferenceMode(themePreference, themePreferences);\n const [svg, setSvg] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [isRendering, setIsRendering] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n\n const renderDiagram = async () => {\n setIsRendering(true);\n setError(\"\");\n\n try {\n const result = await renderMermaidDiagram(themeMode, code);\n if (cancelled) {\n return;\n }\n\n setSvg(result.svg);\n } catch (renderError) {\n if (cancelled) {\n return;\n }\n\n setSvg(\"\");\n setError(formatMermaidError(renderError));\n } finally {\n if (!cancelled) {\n setIsRendering(false);\n }\n }\n };\n\n void renderDiagram();\n\n return () => {\n cancelled = true;\n };\n }, [code, themeMode]);\n\n return { svg, error, isRendering };\n};\n","import { Box, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { downloadMermaidPng } from \"./download-png\";\nimport { MermaidErrorState } from \"./mermaid-error-state\";\nimport { MermaidFullscreen } from \"./mermaid-fullscreen\";\nimport { MermaidSvgView } from \"./mermaid-svg-view\";\nimport { MermaidInlineToolbar } from \"./mermaid-toolbar\";\nimport { useMermaidRender } from \"./use-mermaid-render\";\n\nexport interface MermaidRendererProps {\n code: string;\n initialFullscreenOpen?: boolean;\n initialZoom?: number;\n isEditable?: boolean;\n onRequestEdit?: () => void;\n}\n\ninterface MermaidPreviewContentProps {\n allowPanAtDefaultZoom?: boolean;\n code: string;\n error: string;\n isRendering: boolean;\n maxHeight?: string;\n minHeight?: string;\n overlayActions?: ReactNode;\n svg: string;\n zoom: number;\n onZoomChange: (zoom: number) => void;\n}\n\nconst MermaidPreviewContent = (props: MermaidPreviewContentProps) => {\n const {\n allowPanAtDefaultZoom,\n code,\n error,\n isRendering,\n maxHeight,\n minHeight,\n overlayActions,\n svg,\n zoom,\n onZoomChange,\n } = props;\n\n if (isRendering) {\n return (\n <Box position=\"relative\" minHeight={minHeight ?? \"220px\"} maxHeight={maxHeight} overflow=\"hidden\">\n <Text color=\"fg.muted\" textStyle=\"paragraph/S/regular\">\n Rendering diagram...\n </Text>\n {overlayActions}\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box position=\"relative\" minHeight={minHeight ?? \"220px\"} maxHeight={maxHeight} overflow=\"hidden\">\n <MermaidErrorState code={code} error={error} />\n {overlayActions}\n </Box>\n );\n }\n\n return (\n <MermaidSvgView\n key={svg}\n allowPanAtDefaultZoom={allowPanAtDefaultZoom}\n maxHeight={maxHeight}\n minHeight={minHeight}\n overlayActions={overlayActions}\n svg={svg}\n zoom={zoom}\n onZoomChange={onZoomChange}\n />\n );\n};\n\nexport const MermaidRenderer = (props: MermaidRendererProps) => {\n const { code, initialFullscreenOpen = false, initialZoom = 1, isEditable = false, onRequestEdit } = props;\n const { svg, error, isRendering } = useMermaidRender(code);\n const [inlineZoom, setInlineZoom] = useState(initialZoom);\n const [fullscreenZoom, setFullscreenZoom] = useState(1);\n const [isFullscreenOpen, setIsFullscreenOpen] = useState(initialFullscreenOpen);\n const previousResetValuesRef = useRef({ code, initialZoom });\n const canDownload = Boolean(svg) && !error && !isRendering;\n\n useEffect(() => {\n const previousResetValues = previousResetValuesRef.current;\n if (previousResetValues.code === code && previousResetValues.initialZoom === initialZoom) {\n return;\n }\n\n previousResetValuesRef.current = { code, initialZoom };\n setInlineZoom(initialZoom);\n setFullscreenZoom(1);\n }, [code, initialZoom]);\n\n const openFullscreen = () => {\n setFullscreenZoom(1);\n setIsFullscreenOpen(true);\n };\n\n return (\n <Box width=\"100%\">\n <MermaidPreviewContent\n code={code}\n error={error}\n isRendering={isRendering}\n overlayActions={\n <MermaidInlineToolbar\n isEditable={isEditable}\n onRequestEdit={onRequestEdit}\n onOpenFullscreen={openFullscreen}\n />\n }\n svg={svg}\n zoom={inlineZoom}\n onZoomChange={setInlineZoom}\n />\n <MermaidFullscreen\n open={isFullscreenOpen}\n canDownload={canDownload}\n onClose={() => setIsFullscreenOpen(false)}\n onDownload={() => downloadMermaidPng({ svg, zoom: fullscreenZoom })}\n >\n <MermaidPreviewContent\n allowPanAtDefaultZoom\n code={code}\n error={error}\n isRendering={isRendering}\n maxHeight=\"100%\"\n minHeight=\"100%\"\n svg={svg}\n zoom={fullscreenZoom}\n onZoomChange={setFullscreenZoom}\n />\n </MermaidFullscreen>\n </Box>\n );\n};\n"],"names":["MERMAID_MIN_ZOOM","MERMAID_MAX_ZOOM","MERMAID_ZOOM_STEP","clampMermaidZoom","value","Number","Math","min","max","toFixed","zoomIn","zoom","zoomOut","parseSvgLength","parsed","parseFloat","isFinite","readAttribute","svg","name","match","RegExp","resolveSvgSize","viewBox","split","map","viewBoxWidth","viewBoxHeight","width","height","closeVoidHtmlTags","replace","normalizeSvgForImage","sized","tag","withWidth","test","createSvgDataUrl","bytes","TextEncoder","encode","binary","byte","String","fromCharCode","btoa","loadImage","url","Promise","resolve","reject","image","Image","style","position","left","top","pointerEvents","onload","cleanup","remove","onerror","Error","document","body","append","src","canvasToPngBlob","canvas","toBlob","blob","triggerDownload","filename","URL","createObjectURL","anchor","createElement","href","download","click","window","setTimeout","revokeObjectURL","downloadMermaidPng","options","svgUrl","scale","ceil","context","getContext","drawImage","MermaidErrorState","props","$","_c","code","error","t0","Symbol","for","Text","t1","jsx","t2","p","t3","ScrollArea","Box","t4","jsxs","MermaidFullscreen","children","canDownload","open","onClose","onDownload","details","Dialog","base","md","t5","Icon","Download","t6","Button","t7","X","t8","IconButton","t9","Stack","t10","t11","Portal","t12","MermaidInlineToolbar","isEditable","onRequestEdit","onOpenFullscreen","Tooltip","Pencil","Maximize2","_temp","MermaidZoomControls","onZoomChange","Plus","Minus","_temp2","event","stopPropagation","MermaidSvgView","allowPanAtDefaultZoom","maxHeight","minHeight","overlayActions","undefined","x","y","offset","setOffset","useState","isPanning","setIsPanning","pointerId","panStartRef","useRef","canPan","current","clientX","clientY","currentTarget","setPointerCapture","handlePointerDown","event_0","handlePointerMove","event_1","releasePointerCapture","handlePointerUp","useEffect","t13","t14","t15","t16","display","maxWidth","userSelect","t17","t18","t19","t20","t21","initializedMode","renderSequence","renderQueue","getMermaidTheme","mode","initializeMermaid","mermaid","initialize","startOnLoad","htmlLabels","flowchart","securityLevel","theme","nextRenderId","renderMermaidDiagram","render","queuedRender","then","formatMermaidError","message","trim","filter","Boolean","slice","join","useMermaidRender","themePreference","themePreferences","useThemePreference","themeMode","getThemePreferenceMode","setSvg","setError","isRendering","setIsRendering","cancelled","result","renderError","renderDiagram","MermaidPreviewContent","MermaidRenderer","initialFullscreenOpen","initialZoom","inlineZoom","setInlineZoom","fullscreenZoom","setFullscreenZoom","isFullscreenOpen","setIsFullscreenOpen","previousResetValuesRef","previousResetValues","openFullscreen"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './components/mermaid-renderer/index'
2
+ export {}
package/dist/mermaid.js CHANGED
@@ -1,4 +1,4 @@
1
- import { M as a } from "./mermaid-renderer-H3IhLqnQ.js";
1
+ import { M as a } from "./mermaid-renderer-CVnuKs-A.js";
2
2
  export {
3
3
  a as MermaidRenderer
4
4
  };