mardora 1.2.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 (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -0
  3. package/dist/chunk-3OCUX4OO.js +7690 -0
  4. package/dist/chunk-3OCUX4OO.js.map +1 -0
  5. package/dist/chunk-3ZOCCFDL.cjs +74 -0
  6. package/dist/chunk-3ZOCCFDL.cjs.map +1 -0
  7. package/dist/chunk-7JOEPNEV.cjs +7740 -0
  8. package/dist/chunk-7JOEPNEV.cjs.map +1 -0
  9. package/dist/chunk-BIKZQZ6W.js +33 -0
  10. package/dist/chunk-BIKZQZ6W.js.map +1 -0
  11. package/dist/chunk-EQJESPP2.js +234 -0
  12. package/dist/chunk-EQJESPP2.js.map +1 -0
  13. package/dist/chunk-G4SE26YY.js +70 -0
  14. package/dist/chunk-G4SE26YY.js.map +1 -0
  15. package/dist/chunk-KNDWF2DP.cjs +35 -0
  16. package/dist/chunk-KNDWF2DP.cjs.map +1 -0
  17. package/dist/chunk-MLBEBFHB.cjs +2971 -0
  18. package/dist/chunk-MLBEBFHB.cjs.map +1 -0
  19. package/dist/chunk-P7JFCYU3.js +905 -0
  20. package/dist/chunk-P7JFCYU3.js.map +1 -0
  21. package/dist/chunk-SWFUKJDO.cjs +243 -0
  22. package/dist/chunk-SWFUKJDO.cjs.map +1 -0
  23. package/dist/chunk-WFVCG4LD.cjs +926 -0
  24. package/dist/chunk-WFVCG4LD.cjs.map +1 -0
  25. package/dist/chunk-XL6WFGJT.js +2901 -0
  26. package/dist/chunk-XL6WFGJT.js.map +1 -0
  27. package/dist/editor/index.cjs +277 -0
  28. package/dist/editor/index.cjs.map +1 -0
  29. package/dist/editor/index.d.cts +186 -0
  30. package/dist/editor/index.d.ts +186 -0
  31. package/dist/editor/index.js +4 -0
  32. package/dist/editor/index.js.map +1 -0
  33. package/dist/index.cjs +405 -0
  34. package/dist/index.cjs.map +1 -0
  35. package/dist/index.d.cts +13 -0
  36. package/dist/index.d.ts +13 -0
  37. package/dist/index.js +8 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/lib/index.cjs +12 -0
  40. package/dist/lib/index.cjs.map +1 -0
  41. package/dist/lib/index.d.cts +16 -0
  42. package/dist/lib/index.d.ts +16 -0
  43. package/dist/lib/index.js +3 -0
  44. package/dist/lib/index.js.map +1 -0
  45. package/dist/mardora-DCwjomil.d.cts +640 -0
  46. package/dist/mardora-DCwjomil.d.ts +640 -0
  47. package/dist/plugins/index.cjs +104 -0
  48. package/dist/plugins/index.cjs.map +1 -0
  49. package/dist/plugins/index.d.cts +740 -0
  50. package/dist/plugins/index.d.ts +740 -0
  51. package/dist/plugins/index.js +7 -0
  52. package/dist/plugins/index.js.map +1 -0
  53. package/dist/preview/index.cjs +38 -0
  54. package/dist/preview/index.cjs.map +1 -0
  55. package/dist/preview/index.d.cts +101 -0
  56. package/dist/preview/index.d.ts +101 -0
  57. package/dist/preview/index.js +5 -0
  58. package/dist/preview/index.js.map +1 -0
  59. package/dist/types-NBsaxl4d.d.cts +71 -0
  60. package/dist/types-Pw2SWWAR.d.ts +71 -0
  61. package/package.json +92 -0
  62. package/src/editor/attachments/extension.ts +181 -0
  63. package/src/editor/attachments/format.ts +63 -0
  64. package/src/editor/attachments/index.ts +3 -0
  65. package/src/editor/attachments/types.ts +37 -0
  66. package/src/editor/heading-fold/config.ts +25 -0
  67. package/src/editor/heading-fold/extension.ts +268 -0
  68. package/src/editor/heading-fold/extract.ts +88 -0
  69. package/src/editor/heading-fold/index.ts +5 -0
  70. package/src/editor/heading-fold/theme.ts +85 -0
  71. package/src/editor/heading-fold/types.ts +24 -0
  72. package/src/editor/i18n.ts +13 -0
  73. package/src/editor/icons/index.ts +367 -0
  74. package/src/editor/index.ts +16 -0
  75. package/src/editor/mardora.ts +257 -0
  76. package/src/editor/media-lightbox-theme.ts +146 -0
  77. package/src/editor/media-lightbox.ts +125 -0
  78. package/src/editor/plugin.ts +294 -0
  79. package/src/editor/selection-toolbar/activation.ts +123 -0
  80. package/src/editor/selection-toolbar/commands.ts +279 -0
  81. package/src/editor/selection-toolbar/extension.ts +564 -0
  82. package/src/editor/selection-toolbar/i18n.ts +164 -0
  83. package/src/editor/selection-toolbar/index.ts +7 -0
  84. package/src/editor/selection-toolbar/menu.ts +252 -0
  85. package/src/editor/selection-toolbar/position.ts +43 -0
  86. package/src/editor/selection-toolbar/theme.ts +195 -0
  87. package/src/editor/selection-toolbar/types.ts +155 -0
  88. package/src/editor/slash/default-commands.ts +190 -0
  89. package/src/editor/slash/extension.ts +319 -0
  90. package/src/editor/slash/index.ts +7 -0
  91. package/src/editor/slash/insertions.ts +26 -0
  92. package/src/editor/slash/menu.ts +123 -0
  93. package/src/editor/slash/position.ts +61 -0
  94. package/src/editor/slash/query.ts +33 -0
  95. package/src/editor/slash/theme.ts +113 -0
  96. package/src/editor/slash/types.ts +40 -0
  97. package/src/editor/table-of-contents/extension.ts +202 -0
  98. package/src/editor/table-of-contents/extract.ts +53 -0
  99. package/src/editor/table-of-contents/index.ts +7 -0
  100. package/src/editor/table-of-contents/panel.ts +83 -0
  101. package/src/editor/table-of-contents/slug.ts +50 -0
  102. package/src/editor/table-of-contents/storage.ts +35 -0
  103. package/src/editor/table-of-contents/theme.ts +153 -0
  104. package/src/editor/table-of-contents/types.ts +44 -0
  105. package/src/editor/theme.ts +72 -0
  106. package/src/editor/utils.ts +176 -0
  107. package/src/editor/view-plugin.ts +189 -0
  108. package/src/index.ts +5 -0
  109. package/src/lib/index.ts +2 -0
  110. package/src/lib/input-handler.ts +47 -0
  111. package/src/plugins/code-plugin.theme.ts +545 -0
  112. package/src/plugins/code-plugin.ts +1892 -0
  113. package/src/plugins/emoji-plugin.ts +140 -0
  114. package/src/plugins/heading-plugin.ts +194 -0
  115. package/src/plugins/hr-plugin.ts +102 -0
  116. package/src/plugins/html-plugin.ts +353 -0
  117. package/src/plugins/image-plugin.ts +806 -0
  118. package/src/plugins/index.ts +71 -0
  119. package/src/plugins/inline-plugin.ts +311 -0
  120. package/src/plugins/link-plugin.ts +509 -0
  121. package/src/plugins/list-plugin.ts +492 -0
  122. package/src/plugins/math-plugin.ts +526 -0
  123. package/src/plugins/mermaid-plugin.ts +513 -0
  124. package/src/plugins/paragraph-plugin.ts +38 -0
  125. package/src/plugins/quote-plugin.ts +733 -0
  126. package/src/plugins/table-controls-theme.ts +126 -0
  127. package/src/plugins/table-controls.ts +423 -0
  128. package/src/plugins/table-model.ts +661 -0
  129. package/src/plugins/table-plugin.ts +2111 -0
  130. package/src/preview/context.ts +45 -0
  131. package/src/preview/css-generator.ts +64 -0
  132. package/src/preview/default-renderers.ts +29 -0
  133. package/src/preview/index.ts +29 -0
  134. package/src/preview/preview.ts +41 -0
  135. package/src/preview/renderer.ts +184 -0
  136. package/src/preview/syntax-theme.ts +112 -0
  137. package/src/preview/toc.ts +23 -0
  138. package/src/preview/types.ts +89 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editor/theme.ts","../src/editor/view-plugin.ts","../src/editor/slash/query.ts","../src/editor/slash/insertions.ts","../src/editor/slash/default-commands.ts","../src/editor/slash/menu.ts","../src/editor/slash/theme.ts","../src/editor/attachments/format.ts","../src/editor/attachments/extension.ts","../src/editor/i18n.ts","../src/editor/slash/position.ts","../src/editor/slash/extension.ts","../src/editor/selection-toolbar/position.ts","../src/editor/selection-toolbar/commands.ts","../src/editor/selection-toolbar/menu.ts","../src/editor/selection-toolbar/theme.ts","../src/editor/selection-toolbar/i18n.ts","../src/editor/selection-toolbar/activation.ts","../src/editor/selection-toolbar/extension.ts","../src/editor/heading-fold/config.ts","../src/editor/heading-fold/extract.ts","../src/editor/heading-fold/theme.ts","../src/editor/heading-fold/extension.ts","../src/editor/mardora.ts","../src/editor/plugin.ts"],"names":["t","EditorView","ViewPlugin","viewportPadding","anchorGap","clamp","insert","delta","newContentFrom","newContentTo","syntaxTree","Prec","Facet","Decoration"],"mappings":"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","file":"chunk-XL6WFGJT.js","sourcesContent":["import { EditorView } from \"@codemirror/view\";\n\n/**\n * Base theme for mardora styling\n * Note: Layout styles are scoped under .cm-mardora which is added by the view plugin\n */\nexport const mardoraBaseTheme = EditorView.theme({\n // Container styles - only apply when view plugin is enabled\n \"&.cm-mardora\": {\n fontSize: \"16px\",\n lineHeight: \"1.6\",\n minHeight: \"100%\",\n backgroundColor: \"transparent !important\",\n },\n\n \"&.cm-mardora.cm-focused\": {\n outline: \"none\",\n },\n\n \"&.cm-mardora .cm-scroller\": {\n minHeight: \"100%\",\n },\n\n \"&.cm-mardora .cm-content\": {\n width: \"100%\",\n maxWidth: \"48rem\",\n padding: \"0 0.5rem\",\n margin: \"0 auto\",\n fontFamily: \"var(--font-sans, sans-serif)\",\n fontSize: \"16px\",\n lineHeight: \"1.6\",\n },\n\n \"&.cm-mardora .cm-content .cm-line\": {\n paddingInline: 0,\n },\n\n \"&.cm-mardora .cm-content .cm-widgetBuffer\": {\n display: \"none !important\",\n },\n});\n\nimport { HighlightStyle, syntaxHighlighting } from \"@codemirror/language\";\nimport { tags as t } from \"@lezer/highlight\";\n\n/**\n * Reset syntax highlighting for markdown elements\n * Used to disable theme colors for markdown syntax\n */\nconst markdownResetStyle = HighlightStyle.define([\n {\n tag: [\n t.heading,\n t.strong,\n t.emphasis,\n t.strikethrough,\n t.link,\n t.url,\n t.quote,\n t.list,\n t.meta,\n t.contentSeparator,\n t.labelName,\n ],\n color: \"inherit\",\n fontWeight: \"inherit\",\n fontStyle: \"inherit\",\n textDecoration: \"none\",\n },\n]);\n\nexport const markdownResetExtension = syntaxHighlighting(markdownResetStyle, { fallback: false });\n","import { Decoration, DecorationSet, EditorView, ViewPlugin, ViewUpdate } from \"@codemirror/view\";\nimport { Extension, Facet, Range, RangeSetBuilder } from \"@codemirror/state\";\nimport { syntaxTree } from \"@codemirror/language\";\nimport { cursorInRange, selectionOverlapsRange, ThemeEnum } from \"./utils\";\nimport { mardoraBaseTheme } from \"./theme\";\nimport { DecorationContext, MardoraPlugin } from \"./plugin\";\nimport { MardoraNode } from \"./mardora\";\n\n/**\n * Facet to register plugins with the view plugin\n */\nexport const MardoraPluginsFacet = Facet.define<MardoraPlugin[], MardoraPlugin[]>({\n combine: (values) => values.flat(),\n});\n\n/**\n * Facet to register the onNodesChange callback\n */\nexport const mardoraOnNodesChangeFacet = Facet.define<\n ((nodes: MardoraNode[]) => void) | undefined,\n ((nodes: MardoraNode[]) => void) | undefined\n>({\n combine: (values) => values.find((v) => v !== undefined),\n});\n\n/**\n * Facet to register the theme\n */\nexport const mardoraThemeFacet = Facet.define<ThemeEnum, ThemeEnum>({\n combine: (values) => values.find((v) => v !== undefined) || ThemeEnum.AUTO,\n});\n\n/**\n * Build decorations for the visible viewport\n * @param view - The EditorView instance\n * @param plugins - Optional array of plugins to invoke for decorations\n */\nfunction buildDecorations(view: EditorView, plugins: MardoraPlugin[] = []): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const decorations: Range<Decoration>[] = [];\n\n // Allow plugins to contribute decorations\n if (plugins.length > 0) {\n const ctx: DecorationContext = {\n view,\n decorations,\n selectionOverlapsRange: (from, to) => selectionOverlapsRange(view, from, to),\n cursorInRange: (from, to) => cursorInRange(view, from, to),\n };\n\n // Sort plugins by priority and invoke each one's decoration builder\n const sortedPlugins = [...plugins].sort((a, b) => a.decorationPriority - b.decorationPriority);\n\n for (const plugin of sortedPlugins) {\n try {\n plugin.buildDecorations(ctx);\n } catch {\n // Silently ignore errors from partial tree states (e.g., Lezer TreeBuffer\n // \"Invalid child in posBefore\"). These resolve on the next update cycle.\n }\n }\n }\n\n // Sort decorations by position (required for RangeSetBuilder)\n decorations.sort((a, b) => a.from - b.from || a.value.startSide - b.value.startSide);\n\n // Build the decoration set\n for (const decoration of decorations) {\n builder.add(decoration.from, decoration.to, decoration.value);\n }\n\n return builder.finish();\n}\n\n/**\n * mardora View Plugin\n * Handles rich markdown rendering with decorations\n */\nclass mardoraViewPluginClass {\n decorations: DecorationSet;\n private plugins: MardoraPlugin[];\n private onNodesChange: ((nodes: MardoraNode[]) => void) | undefined;\n\n constructor(view: EditorView) {\n this.plugins = view.state.facet(MardoraPluginsFacet);\n this.onNodesChange = view.state.facet(mardoraOnNodesChangeFacet);\n this.decorations = buildDecorations(view, this.plugins);\n\n // Notify plugins that view is ready\n for (const plugin of this.plugins) {\n plugin.onViewReady(view);\n }\n\n // Call onNodesChange callback with initial nodes\n if (this.onNodesChange && typeof this.onNodesChange === \"function\") {\n this.onNodesChange(this.buildNodes(view));\n }\n }\n\n update(update: ViewUpdate) {\n // Update plugins list if facet changed\n this.plugins = update.view.state.facet(MardoraPluginsFacet);\n this.onNodesChange = update.view.state.facet(mardoraOnNodesChangeFacet);\n\n // Notify plugins of the update\n for (const plugin of this.plugins) {\n plugin.onViewUpdate(update);\n }\n\n // Rebuild decorations when:\n // - Document changes\n // - Selection changes (to show/hide syntax markers)\n // - Viewport changes\n if (update.docChanged || update.selectionSet || update.viewportChanged) {\n this.decorations = buildDecorations(update.view, this.plugins);\n\n // Call onNodesChange callback\n if (this.onNodesChange) {\n this.onNodesChange(this.buildNodes(update.view));\n }\n }\n }\n\n private buildNodes(view: EditorView): MardoraNode[] {\n const tree = syntaxTree(view.state);\n const roots: MardoraNode[] = [];\n const stack: MardoraNode[] = [];\n\n tree.iterate({\n enter: (nodeRef) => {\n const node: MardoraNode = {\n from: nodeRef.from,\n to: nodeRef.to,\n name: nodeRef.name,\n children: [],\n isSelected: selectionOverlapsRange(view, nodeRef.from, nodeRef.to),\n };\n\n if (stack.length > 0) {\n stack[stack.length - 1]!.children.push(node);\n } else {\n roots.push(node);\n }\n\n stack.push(node);\n },\n leave: () => {\n stack.pop();\n },\n });\n\n return roots;\n }\n}\n\n/**\n * The main mardora ViewPlugin extension\n */\nexport const mardoraViewPlugin = ViewPlugin.fromClass(mardoraViewPluginClass, {\n decorations: (v) => v.decorations,\n provide: () => [],\n});\n\n/**\n * Extension to add the cm-mardora-enabled class to the editor\n */\nconst mardoraEditorClass = EditorView.editorAttributes.of({ class: \"cm-mardora\" });\n\n/**\n * Create mardora view extension bundle with plugin support\n * @param plugins - Optional array of MardoraPlugin instances\n * @param onNodesChange - Optional callback to receive nodes on every update\n * @returns Extension array including view plugin, theme, and plugin facet\n */\nexport function createMardoraViewExtension(\n theme: ThemeEnum = ThemeEnum.AUTO,\n baseStyles: boolean = true,\n plugins: MardoraPlugin[] = [],\n onNodesChange?: (nodes: MardoraNode[]) => void\n): Extension[] {\n return [\n mardoraEditorClass,\n MardoraPluginsFacet.of(plugins),\n mardoraOnNodesChangeFacet.of(onNodesChange),\n mardoraThemeFacet.of(theme),\n mardoraViewPlugin,\n ...(baseStyles ? [mardoraBaseTheme] : []),\n ];\n}\n","import type { MardoraSlashCommand, MardoraSlashQuery } from \"./types\";\n\nconst slashLinePattern = /^\\/([^\\s]*)$/;\n\nexport function detectSlashQuery(documentText: string, cursorPosition: number): MardoraSlashQuery | null {\n const safeCursor = Math.max(0, Math.min(cursorPosition, documentText.length));\n const lineStart = documentText.lastIndexOf(\"\\n\", safeCursor - 1) + 1;\n const lineTextBeforeCursor = documentText.slice(lineStart, safeCursor);\n const match = lineTextBeforeCursor.match(slashLinePattern);\n\n if (!match) {\n return null;\n }\n\n return {\n from: lineStart,\n to: safeCursor,\n query: match[1] ?? \"\",\n };\n}\n\nexport function filterSlashCommands(commands: readonly MardoraSlashCommand[], query: string): MardoraSlashCommand[] {\n const normalizedQuery = query.trim().toLocaleLowerCase();\n\n if (!normalizedQuery) {\n return [...commands];\n }\n\n return commands.filter((command) => {\n const searchable = [command.title, command.id, command.hint, ...command.aliases].join(\" \").toLocaleLowerCase();\n return searchable.includes(normalizedQuery);\n });\n}\n","import type { ChangeSpec } from \"@codemirror/state\";\nimport type { MardoraSlashQuery } from \"./types\";\n\nexport type MardoraSlashReplacementTemplate = {\n marker: string;\n cursorOffset: number;\n};\n\nexport type MardoraSlashReplacement = {\n changes: ChangeSpec;\n selectionAnchor: number;\n};\n\nexport function buildSlashReplacement(\n template: MardoraSlashReplacementTemplate,\n query: MardoraSlashQuery\n): MardoraSlashReplacement {\n return {\n changes: {\n from: query.from,\n to: query.to,\n insert: template.marker,\n },\n selectionAnchor: query.from + template.cursorOffset,\n };\n}\n","import type { MardoraSlashCommand } from \"./types\";\nimport { buildSlashReplacement } from \"./insertions\";\nimport type { MardoraAttachmentKind } from \"../attachments\";\nimport type { MardoraLocale } from \"../i18n\";\n\ntype LocalizedSlashCommandCopy = {\n title: string;\n aliases: string[];\n};\n\nconst commandCopy: Record<MardoraLocale, Record<string, LocalizedSlashCommandCopy>> = {\n \"zh-CN\": {\n paragraph: { title: \"文本\", aliases: [\"text\", \"plain\", \"wenben\"] },\n \"heading-1\": { title: \"标题 1\", aliases: [\"h1\", \"heading\", \"heading1\", \"biaoti\", \"标题\"] },\n \"heading-2\": { title: \"标题 2\", aliases: [\"h2\", \"heading\", \"heading2\", \"biaoti\", \"标题\"] },\n \"heading-3\": { title: \"标题 3\", aliases: [\"h3\", \"heading\", \"heading3\", \"biaoti\", \"标题\"] },\n \"heading-4\": { title: \"标题 4\", aliases: [\"h4\", \"heading\", \"heading4\", \"biaoti\", \"标题\"] },\n \"heading-5\": { title: \"标题 5\", aliases: [\"h5\", \"heading\", \"heading5\", \"biaoti\", \"标题\"] },\n \"heading-6\": { title: \"标题 6\", aliases: [\"h6\", \"heading\", \"heading6\", \"biaoti\", \"标题\"] },\n quote: { title: \"引用\", aliases: [\"quote\", \"blockquote\", \"yinyong\"] },\n \"callout-note\": {\n title: \"说明 Callout\",\n aliases: [\"callout\", \"note\", \"info\", \"告警\", \"说明\", \"提示\", \"shuoming\", \"tishi\"],\n },\n \"callout-tip\": {\n title: \"技巧 Callout\",\n aliases: [\"callout\", \"tip\", \"hint\", \"告警\", \"技巧\", \"提示\", \"jiqiao\", \"tishi\"],\n },\n \"callout-important\": { title: \"重要 Callout\", aliases: [\"callout\", \"important\", \"告警\", \"重要\", \"zhongyao\"] },\n \"callout-warning\": { title: \"警告 Callout\", aliases: [\"callout\", \"warning\", \"warn\", \"告警\", \"警告\", \"jinggao\"] },\n \"callout-caution\": {\n title: \"严重警告 Callout\",\n aliases: [\"callout\", \"caution\", \"danger\", \"告警\", \"严重\", \"风险\", \"yanzhong\", \"fengxian\"],\n },\n \"code-block\": { title: \"代码块\", aliases: [\"code\", \"codeblock\", \"fence\", \"代码\", \"代码块\", \"daima\"] },\n \"ordered-list\": { title: \"有序列表\", aliases: [\"ol\", \"ordered\", \"numbered\", \"youxu\", \"有序\"] },\n \"unordered-list\": { title: \"项目符号列表\", aliases: [\"ul\", \"bullet\", \"unordered\", \"bulleted\", \"wuxu\", \"无序\"] },\n \"task-list\": { title: \"待办清单\", aliases: [\"todo\", \"task\", \"check\", \"daiban\", \"待办\"] },\n table: { title: \"表格\", aliases: [\"table\", \"biaoge\"] },\n divider: { title: \"分隔线\", aliases: [\"hr\", \"divider\", \"line\", \"fengexian\", \"分隔\"] },\n link: { title: \"链接\", aliases: [\"link\", \"url\", \"lianjie\"] },\n file: { title: \"文件\", aliases: [\"file\", \"wenjian\"] },\n image: { title: \"图片\", aliases: [\"image\", \"img\", \"tu\", \"tupian\", \"图片\"] },\n video: { title: \"视频\", aliases: [\"video\", \"shipin\"] },\n audio: { title: \"音频\", aliases: [\"audio\", \"music\", \"yinpin\"] },\n },\n \"en-US\": {\n paragraph: { title: \"Text\", aliases: [\"文本\", \"text\", \"plain\", \"wenben\"] },\n \"heading-1\": { title: \"Heading 1\", aliases: [\"标题\", \"h1\", \"heading\", \"heading1\", \"biaoti\"] },\n \"heading-2\": { title: \"Heading 2\", aliases: [\"标题\", \"h2\", \"heading\", \"heading2\", \"biaoti\"] },\n \"heading-3\": { title: \"Heading 3\", aliases: [\"标题\", \"h3\", \"heading\", \"heading3\", \"biaoti\"] },\n \"heading-4\": { title: \"Heading 4\", aliases: [\"标题\", \"h4\", \"heading\", \"heading4\", \"biaoti\"] },\n \"heading-5\": { title: \"Heading 5\", aliases: [\"标题\", \"h5\", \"heading\", \"heading5\", \"biaoti\"] },\n \"heading-6\": { title: \"Heading 6\", aliases: [\"标题\", \"h6\", \"heading\", \"heading6\", \"biaoti\"] },\n quote: { title: \"Quote\", aliases: [\"引用\", \"quote\", \"blockquote\", \"yinyong\"] },\n \"callout-note\": { title: \"Note callout\", aliases: [\"说明\", \"提示\", \"告警\", \"callout\", \"note\", \"info\"] },\n \"callout-tip\": { title: \"Tip callout\", aliases: [\"技巧\", \"提示\", \"告警\", \"callout\", \"tip\", \"hint\"] },\n \"callout-important\": { title: \"Important callout\", aliases: [\"重要\", \"告警\", \"callout\", \"important\"] },\n \"callout-warning\": { title: \"Warning callout\", aliases: [\"警告\", \"告警\", \"callout\", \"warning\", \"warn\"] },\n \"callout-caution\": { title: \"Caution callout\", aliases: [\"严重\", \"风险\", \"告警\", \"callout\", \"caution\", \"danger\"] },\n \"code-block\": { title: \"Code block\", aliases: [\"代码\", \"代码块\", \"code\", \"codeblock\", \"fence\", \"daima\"] },\n \"ordered-list\": { title: \"Numbered list\", aliases: [\"有序\", \"ol\", \"ordered\", \"numbered\", \"youxu\"] },\n \"unordered-list\": { title: \"Bulleted list\", aliases: [\"无序\", \"ul\", \"bullet\", \"unordered\", \"bulleted\", \"wuxu\"] },\n \"task-list\": { title: \"To-do list\", aliases: [\"待办\", \"todo\", \"task\", \"check\", \"daiban\"] },\n table: { title: \"Table\", aliases: [\"表格\", \"table\", \"biaoge\"] },\n divider: { title: \"Divider\", aliases: [\"分隔\", \"hr\", \"divider\", \"line\", \"fengexian\"] },\n link: { title: \"Link\", aliases: [\"链接\", \"link\", \"url\", \"lianjie\"] },\n file: { title: \"File\", aliases: [\"文件\", \"file\", \"wenjian\"] },\n image: { title: \"Image\", aliases: [\"图片\", \"image\", \"img\", \"tu\", \"tupian\"] },\n video: { title: \"Video\", aliases: [\"视频\", \"video\", \"shipin\"] },\n audio: { title: \"Audio\", aliases: [\"音频\", \"audio\", \"music\", \"yinpin\"] },\n },\n};\n\nfunction commandMeta(\n locale: MardoraLocale,\n id: string,\n group: MardoraSlashCommand[\"group\"],\n icon: string,\n hint: string\n): Omit<MardoraSlashCommand, \"run\"> {\n const copy = commandCopy[locale][id];\n if (!copy) {\n throw new Error(`Missing slash command copy: ${locale}:${id}`);\n }\n\n return {\n id,\n group,\n title: copy.title,\n aliases: copy.aliases,\n icon,\n hint,\n };\n}\n\nfunction markdownCommand(\n command: Omit<MardoraSlashCommand, \"run\">,\n marker: string,\n cursorOffset: number = marker.length\n): MardoraSlashCommand {\n return {\n ...command,\n run: ({ view, queryRange }) => {\n const replacement = buildSlashReplacement({ marker, cursorOffset }, { ...queryRange, query: \"\" });\n view.dispatch({\n changes: replacement.changes,\n selection: { anchor: replacement.selectionAnchor },\n scrollIntoView: true,\n });\n view.focus();\n return true;\n },\n };\n}\n\nfunction calloutCommand(\n locale: MardoraLocale,\n id: string,\n icon: string,\n type: \"NOTE\" | \"TIP\" | \"IMPORTANT\" | \"WARNING\" | \"CAUTION\"\n): MardoraSlashCommand {\n return markdownCommand(commandMeta(locale, id, \"basic\", icon, `[!${type}]`), `> [!${type}]\\n> `);\n}\n\nfunction mediaCommand(command: Omit<MardoraSlashCommand, \"run\">, kind: MardoraAttachmentKind): MardoraSlashCommand {\n return {\n ...command,\n run: (context) => {\n if (context.requestAttachment?.(kind, context)) {\n return true;\n }\n\n const fallbackByKind: Record<MardoraAttachmentKind, string> = {\n image: \"![image](url)\",\n video: '<video src=\"url\" controls></video>',\n audio: '<audio src=\"url\" controls></audio>',\n file: \"[filename](url)\",\n };\n const fallback = fallbackByKind[kind];\n const replacement = buildSlashReplacement(\n { marker: fallback, cursorOffset: kind === \"file\" ? 1 : fallback.indexOf(\"url\") },\n { ...context.queryRange, query: \"\" }\n );\n\n context.view.dispatch({\n changes: replacement.changes,\n selection: { anchor: replacement.selectionAnchor },\n scrollIntoView: true,\n });\n context.view.focus();\n return true;\n },\n };\n}\n\nexport function getDefaultSlashCommands(locale: MardoraLocale = \"zh-CN\"): MardoraSlashCommand[] {\n return [\n markdownCommand(commandMeta(locale, \"paragraph\", \"basic\", \"type\", \"\"), \"\", 0),\n markdownCommand(commandMeta(locale, \"heading-1\", \"basic\", \"heading-1\", \"#\"), \"# \"),\n markdownCommand(commandMeta(locale, \"heading-2\", \"basic\", \"heading-2\", \"##\"), \"## \"),\n markdownCommand(commandMeta(locale, \"heading-3\", \"basic\", \"heading-3\", \"###\"), \"### \"),\n markdownCommand(commandMeta(locale, \"heading-4\", \"basic\", \"heading-4\", \"####\"), \"#### \"),\n markdownCommand(commandMeta(locale, \"heading-5\", \"basic\", \"heading-5\", \"#####\"), \"##### \"),\n markdownCommand(commandMeta(locale, \"heading-6\", \"basic\", \"heading-6\", \"######\"), \"###### \"),\n markdownCommand(commandMeta(locale, \"quote\", \"basic\", \"text-quote\", \">\"), \"> \"),\n calloutCommand(locale, \"callout-note\", \"info\", \"NOTE\"),\n calloutCommand(locale, \"callout-tip\", \"lightbulb\", \"TIP\"),\n calloutCommand(locale, \"callout-important\", \"badge-alert\", \"IMPORTANT\"),\n calloutCommand(locale, \"callout-warning\", \"triangle-alert\", \"WARNING\"),\n calloutCommand(locale, \"callout-caution\", \"octagon-alert\", \"CAUTION\"),\n markdownCommand(commandMeta(locale, \"code-block\", \"basic\", \"code-xml\", \"```\"), \"```\\n\\n```\", 4),\n markdownCommand(commandMeta(locale, \"ordered-list\", \"basic\", \"list-ordered\", \"1.\"), \"1. \"),\n markdownCommand(commandMeta(locale, \"unordered-list\", \"basic\", \"list\", \"-\"), \"- \"),\n markdownCommand(commandMeta(locale, \"task-list\", \"basic\", \"list-todo\", \"[]\"), \"- [ ] \"),\n markdownCommand(\n commandMeta(locale, \"table\", \"basic\", \"table\", \"| |\"),\n \"| Column 1 | Column 2 |\\n| --- | --- |\\n| | |\\n\",\n 2\n ),\n markdownCommand(commandMeta(locale, \"divider\", \"basic\", \"minus\", \"---\"), \"---\\n\"),\n markdownCommand(commandMeta(locale, \"link\", \"basic\", \"link\", \"[]()\"), \"[]()\", 1),\n mediaCommand(commandMeta(locale, \"file\", \"media\", \"file\", \"file\"), \"file\"),\n mediaCommand(commandMeta(locale, \"image\", \"media\", \"image\", \"img\"), \"image\"),\n mediaCommand(commandMeta(locale, \"video\", \"media\", \"play\", \"video\"), \"video\"),\n mediaCommand(commandMeta(locale, \"audio\", \"media\", \"music-2\", \"audio\"), \"audio\"),\n ];\n}\n\nexport const defaultSlashCommands: MardoraSlashCommand[] = getDefaultSlashCommands(\"zh-CN\");\n","import type { MardoraSlashCommand } from \"./types\";\nimport { createMardoraIcon } from \"../icons\";\nimport type { MardoraLocale } from \"../i18n\";\nimport type { MardoraSlashMessages } from \"./types\";\n\nexport type MardoraSlashMenuState = {\n commands: MardoraSlashCommand[];\n activeIndex: number;\n messages: MardoraSlashMessages;\n};\n\nexport type MardoraSlashMenuCallbacks = {\n onHover: (index: number) => void;\n onSelect: (index: number) => void;\n};\n\nconst slashMessages: Record<MardoraLocale, MardoraSlashMessages> = {\n \"zh-CN\": {\n groups: {\n basic: \"基本区块\",\n media: \"媒体\",\n },\n empty: \"没有匹配的命令\",\n close: \"关闭菜单\",\n closeHint: \"esc\",\n },\n \"en-US\": {\n groups: {\n basic: \"Basic blocks\",\n media: \"Media\",\n },\n empty: \"No matching commands\",\n close: \"Close menu\",\n closeHint: \"esc\",\n },\n};\n\nexport function getSlashMessages(locale: MardoraLocale): MardoraSlashMessages {\n return slashMessages[locale];\n}\n\nexport function createSlashMenuElement(\n state: MardoraSlashMenuState,\n callbacks: MardoraSlashMenuCallbacks\n): HTMLElement {\n const { messages } = state;\n const root = document.createElement(\"div\");\n root.className = \"cm-mardora-slash-menu\";\n root.setAttribute(\"role\", \"listbox\");\n\n const list = document.createElement(\"div\");\n list.className = \"cm-mardora-slash-list\";\n root.addEventListener(\n \"wheel\",\n (event) => {\n list.scrollTop += event.deltaY;\n event.preventDefault();\n event.stopPropagation();\n },\n { capture: true, passive: false }\n );\n\n if (state.commands.length === 0) {\n const empty = document.createElement(\"div\");\n empty.className = \"cm-mardora-slash-empty\";\n empty.textContent = messages.empty;\n list.appendChild(empty);\n root.appendChild(list);\n return root;\n }\n\n let currentGroup: MardoraSlashCommand[\"group\"] | null = null;\n\n for (const [index, command] of state.commands.entries()) {\n if (command.group !== currentGroup) {\n currentGroup = command.group;\n const label = document.createElement(\"div\");\n label.className = \"cm-mardora-slash-group\";\n label.textContent = messages.groups[currentGroup];\n list.appendChild(label);\n }\n\n const item = document.createElement(\"button\");\n item.type = \"button\";\n item.className =\n index === state.activeIndex ? \"cm-mardora-slash-item cm-mardora-slash-item-active\" : \"cm-mardora-slash-item\";\n item.dataset.mardoraSlashIndex = String(index);\n item.setAttribute(\"role\", \"option\");\n item.setAttribute(\"aria-selected\", String(index === state.activeIndex));\n item.addEventListener(\"mouseenter\", () => callbacks.onHover(index));\n item.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n callbacks.onSelect(index);\n });\n\n const icon = document.createElement(\"span\");\n icon.className = \"cm-mardora-slash-icon\";\n const svgIcon = createMardoraIcon(command.icon);\n if (svgIcon) {\n icon.appendChild(svgIcon);\n } else {\n icon.textContent = command.icon;\n }\n\n const title = document.createElement(\"span\");\n title.className = \"cm-mardora-slash-title\";\n title.textContent = command.title;\n\n const hint = document.createElement(\"span\");\n hint.className = \"cm-mardora-slash-hint\";\n hint.textContent = command.hint;\n\n item.append(icon, title, hint);\n list.appendChild(item);\n }\n\n const footer = document.createElement(\"div\");\n footer.className = \"cm-mardora-slash-footer\";\n footer.innerHTML = `<span>${messages.close}</span><span>${messages.closeHint}</span>`;\n root.append(list, footer);\n\n return root;\n}\n","import { EditorView } from \"@codemirror/view\";\n\nexport const slashMenuTheme = EditorView.baseTheme({\n \".cm-mardora-slash-menu\": {\n position: \"fixed\",\n display: \"flex\",\n flexDirection: \"column\",\n zIndex: \"1000\",\n width: \"328px\",\n maxHeight: \"420px\",\n overflow: \"hidden\",\n border: \"1px solid rgba(120, 113, 108, 0.22)\",\n borderRadius: \"12px\",\n background: \"var(--mardora-slash-bg, #ffffff)\",\n boxShadow: \"0 18px 48px rgba(15, 23, 42, 0.16)\",\n padding: \"8px 0 0\",\n caretColor: \"transparent\",\n cursor: \"default\",\n fontFamily: \"var(--font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif)\",\n userSelect: \"none\",\n },\n \".cm-mardora-slash-open .cm-cursor\": {\n visibility: \"hidden\",\n },\n \".cm-mardora-slash-open .cm-content\": {\n caretColor: \"transparent\",\n },\n \".cm-mardora-slash-list\": {\n flex: \"1 1 auto\",\n minHeight: \"0\",\n overflowY: \"auto\",\n },\n \".cm-mardora-slash-group\": {\n padding: \"8px 14px 6px\",\n color: \"var(--mardora-slash-muted, #a8a29e)\",\n fontSize: \"12px\",\n fontWeight: \"500\",\n },\n \".cm-mardora-slash-item\": {\n display: \"grid\",\n gridTemplateColumns: \"34px 1fr auto\",\n alignItems: \"center\",\n width: \"100%\",\n minHeight: \"34px\",\n border: \"0\",\n padding: \"0 14px\",\n background: \"transparent\",\n color: \"var(--mardora-slash-fg, #27272a)\",\n textAlign: \"left\",\n cursor: \"default\",\n },\n \".cm-mardora-slash-item-active\": {\n background: \"var(--mardora-slash-active, #f4f4f5)\",\n },\n \".cm-mardora-slash-icon\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--mardora-slash-icon, #3f3f46)\",\n fontSize: \"13px\",\n fontWeight: \"400\",\n textAlign: \"center\",\n },\n \".cm-mardora-slash-icon svg\": {\n display: \"block\",\n width: \"17px\",\n height: \"17px\",\n strokeWidth: \"1.9\",\n },\n \".cm-mardora-slash-title\": {\n overflow: \"hidden\",\n color: \"inherit\",\n fontSize: \"14px\",\n fontWeight: \"400\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n \".cm-mardora-slash-hint\": {\n marginLeft: \"12px\",\n color: \"var(--mardora-slash-muted, #a8a29e)\",\n fontSize: \"12px\",\n fontWeight: \"400\",\n },\n \".cm-mardora-slash-footer\": {\n display: \"flex\",\n flex: \"0 0 auto\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n minHeight: \"40px\",\n borderTop: \"1px solid rgba(120, 113, 108, 0.18)\",\n background: \"var(--mardora-slash-bg, #ffffff)\",\n padding: \"0 14px\",\n color: \"var(--mardora-slash-fg, #27272a)\",\n fontSize: \"14px\",\n },\n \".cm-mardora-slash-footer span:last-child\": {\n color: \"var(--mardora-slash-muted, #a8a29e)\",\n fontSize: \"12px\",\n fontWeight: \"400\",\n },\n \".cm-mardora-slash-empty\": {\n padding: \"14px\",\n color: \"var(--mardora-slash-muted, #a8a29e)\",\n fontSize: \"13px\",\n },\n \"&dark .cm-mardora-slash-menu\": {\n \"--mardora-slash-bg\": \"#18181b\",\n \"--mardora-slash-fg\": \"#f4f4f5\",\n \"--mardora-slash-muted\": \"#a1a1aa\",\n \"--mardora-slash-active\": \"#27272a\",\n \"--mardora-slash-icon\": \"#e4e4e7\",\n },\n});\n","import type { MardoraAttachmentKind, MardoraAttachmentUploadResult, MardoraFileLike } from \"./types\";\n\nexport type MardoraUploadMarkerState = \"uploading\" | \"failed\";\n\nexport type MardoraUploadMarkerInput = {\n taskId: string;\n kind: MardoraAttachmentKind;\n name: string;\n state: MardoraUploadMarkerState;\n};\n\nexport function detectAttachmentKind(file: MardoraFileLike): MardoraAttachmentKind {\n if (file.type.startsWith(\"image/\")) return \"image\";\n if (file.type.startsWith(\"video/\")) return \"video\";\n if (file.type.startsWith(\"audio/\")) return \"audio\";\n return \"file\";\n}\n\nexport function isAcceptedAttachment(file: MardoraFileLike, acceptRules: readonly string[]): boolean {\n if (acceptRules.includes(\"*/*\")) return true;\n\n return acceptRules.some((rule) => {\n if (rule.endsWith(\"/*\")) {\n return file.type.startsWith(rule.slice(0, -1));\n }\n\n if (rule.startsWith(\".\")) {\n return file.name.toLocaleLowerCase().endsWith(rule.toLocaleLowerCase());\n }\n\n return file.type === rule;\n });\n}\n\nexport function createUploadMarker(input: MardoraUploadMarkerInput): string {\n if (input.state === \"failed\") {\n return `[Upload failed: ${input.name}](mardora-upload://${input.taskId})`;\n }\n\n if (input.kind === \"image\") {\n return `![${input.name}](mardora-upload://${input.taskId})`;\n }\n\n return `[Uploading ${input.name}](mardora-upload://${input.taskId})`;\n}\n\nexport function formatAttachmentMarkdown(kind: MardoraAttachmentKind, result: MardoraAttachmentUploadResult): string {\n const name = result.name || \"attachment\";\n\n if (kind === \"image\") {\n return result.title ? `![${name}](${result.url} \"${result.title}\")` : `![${name}](${result.url})`;\n }\n\n if (kind === \"video\") {\n return `<video src=\"${result.url}\" controls></video>`;\n }\n\n if (kind === \"audio\") {\n return `<audio src=\"${result.url}\" controls></audio>`;\n }\n\n return `[${name}](${result.url})`;\n}\n","import { Extension } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { createUploadMarker, detectAttachmentKind, formatAttachmentMarkdown, isAcceptedAttachment } from \"./format\";\nimport type {\n MardoraAttachmentKind,\n MardoraAttachmentsConfig,\n MardoraAttachmentUploadSource,\n MardoraAttachmentUploader,\n} from \"./types\";\n\nlet uploadSequence = 0;\n\nexport type MardoraAttachmentEditorView = {\n state: {\n doc: {\n length: number;\n toString(): string;\n lineAt(position: number): { from: number; to: number };\n };\n selection: {\n main: { from: number; to: number };\n };\n };\n dispatch(spec: {\n changes?: { from: number; to?: number; insert?: string } | Array<{ from: number; to?: number; insert?: string }>;\n selection?: { anchor: number };\n scrollIntoView?: boolean;\n }): void;\n focus?(): void;\n};\n\nexport type MardoraUploadAttachmentOptions = {\n kind?: MardoraAttachmentKind;\n source: MardoraAttachmentUploadSource;\n range?: { from: number; to: number };\n uploader: MardoraAttachmentUploader;\n};\n\nfunction nextUploadTaskId(): string {\n uploadSequence += 1;\n return `task-${Date.now()}-${uploadSequence}`;\n}\n\nfunction findMarkerRange(view: MardoraAttachmentEditorView, taskId: string): { from: number; to: number } | null {\n const doc = view.state.doc.toString();\n const marker = `mardora-upload://${taskId}`;\n const markerIndex = doc.indexOf(marker);\n\n if (markerIndex === -1) {\n return null;\n }\n\n const line = view.state.doc.lineAt(markerIndex);\n return { from: line.from, to: line.to };\n}\n\nexport async function uploadAttachmentFile(\n view: MardoraAttachmentEditorView,\n file: File,\n options: MardoraUploadAttachmentOptions\n): Promise<void> {\n const kind = options.kind ?? detectAttachmentKind(file);\n const range = options.range ?? {\n from: view.state.selection.main.from,\n to: view.state.selection.main.to,\n };\n const taskId = nextUploadTaskId();\n const marker = createUploadMarker({ taskId, kind, name: file.name, state: \"uploading\" });\n\n view.dispatch({\n changes: { from: range.from, to: range.to, insert: marker },\n selection: { anchor: range.from + marker.length },\n scrollIntoView: true,\n });\n\n try {\n const result = await options.uploader(file, {\n kind,\n source: options.source,\n documentText: view.state.doc.toString(),\n selection: { from: range.from, to: range.from + marker.length },\n });\n const markerRange = findMarkerRange(view, taskId);\n\n if (!markerRange) {\n return;\n }\n\n const output = formatAttachmentMarkdown(kind, {\n ...result,\n name: result.name ?? file.name,\n mimeType: result.mimeType ?? file.type,\n });\n\n view.dispatch({\n changes: { from: markerRange.from, to: markerRange.to, insert: output },\n selection: { anchor: markerRange.from + output.length },\n scrollIntoView: true,\n });\n } catch {\n const markerRange = findMarkerRange(view, taskId);\n\n if (!markerRange) {\n return;\n }\n\n const failedMarker = createUploadMarker({ taskId, kind, name: file.name, state: \"failed\" });\n view.dispatch({\n changes: { from: markerRange.from, to: markerRange.to, insert: failedMarker },\n selection: { anchor: markerRange.from + failedMarker.length },\n scrollIntoView: true,\n });\n }\n}\n\nfunction getFilesFromEvent(event: ClipboardEvent | DragEvent): File[] {\n const files =\n event.type === \"paste\" ? (event as ClipboardEvent).clipboardData?.files : (event as DragEvent).dataTransfer?.files;\n return files ? Array.from(files) : [];\n}\n\nfunction uploadFilesFromEvent(\n view: EditorView,\n event: ClipboardEvent | DragEvent,\n source: MardoraAttachmentUploadSource,\n config: Required<Pick<MardoraAttachmentsConfig, \"uploader\">> & MardoraAttachmentsConfig\n): boolean {\n const files = getFilesFromEvent(event);\n if (files.length === 0) {\n return false;\n }\n\n event.preventDefault();\n\n for (const file of files) {\n const kind = detectAttachmentKind(file);\n const acceptRules = config.accept?.[kind] ?? [\"*/*\"];\n\n if (!isAcceptedAttachment(file, acceptRules)) {\n continue;\n }\n\n void uploadAttachmentFile(view, file, {\n kind,\n source,\n uploader: config.uploader,\n });\n }\n\n return true;\n}\n\nexport function attachments(config: MardoraAttachmentsConfig = {}): Extension[] {\n if (config.enabled === false || !config.uploader) {\n return [];\n }\n\n const normalizedConfig = {\n enablePaste: true,\n enableDrop: true,\n ...config,\n uploader: config.uploader,\n };\n\n return [\n EditorView.domEventHandlers({\n paste(event, view) {\n if (!normalizedConfig.enablePaste) {\n return false;\n }\n return uploadFilesFromEvent(view, event, \"paste\", normalizedConfig);\n },\n drop(event, view) {\n if (!normalizedConfig.enableDrop) {\n return false;\n }\n return uploadFilesFromEvent(view, event, \"drop\", normalizedConfig);\n },\n }),\n ];\n}\n","export type MardoraLocale = \"zh-CN\" | \"en-US\";\n\nexport type MardoraI18nConfig = {\n locale?: MardoraLocale;\n};\n\nexport const defaultMardoraLocale: MardoraLocale = \"zh-CN\";\n\nconst supportedMardoraLocales = new Set<MardoraLocale>([\"zh-CN\", \"en-US\"]);\n\nexport function resolveMardoraLocale(locale?: MardoraLocale): MardoraLocale {\n return locale && supportedMardoraLocales.has(locale) ? locale : defaultMardoraLocale;\n}\n","export type SlashMenuAnchorRect = {\n left: number;\n top: number;\n bottom: number;\n};\n\nexport type SlashMenuViewport = {\n width: number;\n height: number;\n};\n\nexport type SlashMenuLayoutInput = {\n anchor: SlashMenuAnchorRect;\n viewport: SlashMenuViewport;\n};\n\nexport type SlashMenuPlacement = \"top\" | \"bottom\";\n\nexport type SlashMenuLayout = {\n placement: SlashMenuPlacement;\n left: number;\n top: number | null;\n bottom: number | null;\n maxHeight: number;\n};\n\nconst menuWidth = 328;\nconst menuMaxHeight = 420;\nconst viewportPadding = 8;\nconst anchorGap = 6;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function computeSlashMenuLayout(input: SlashMenuLayoutInput): SlashMenuLayout {\n const maxLeft = Math.max(viewportPadding, input.viewport.width - menuWidth - viewportPadding);\n const left = clamp(input.anchor.left, viewportPadding, maxLeft);\n const availableBelow = Math.max(1, input.viewport.height - input.anchor.bottom - anchorGap - viewportPadding);\n const availableAbove = Math.max(1, input.anchor.top - anchorGap - viewportPadding);\n const placement: SlashMenuPlacement =\n availableBelow >= menuMaxHeight || availableBelow >= availableAbove ? \"bottom\" : \"top\";\n\n if (placement === \"bottom\") {\n return {\n placement,\n left,\n top: input.anchor.bottom + anchorGap,\n bottom: null,\n maxHeight: Math.min(menuMaxHeight, availableBelow),\n };\n }\n\n return {\n placement,\n left,\n top: null,\n bottom: input.viewport.height - input.anchor.top + anchorGap,\n maxHeight: Math.min(menuMaxHeight, availableAbove),\n };\n}\n","import { Extension, Prec } from \"@codemirror/state\";\nimport { EditorView, ViewPlugin, ViewUpdate } from \"@codemirror/view\";\nimport type { MardoraAttachmentKind, MardoraAttachmentUploader } from \"../attachments\";\nimport { uploadAttachmentFile } from \"../attachments\";\nimport type { MardoraLocale } from \"../i18n\";\nimport { resolveMardoraLocale } from \"../i18n\";\nimport { getDefaultSlashCommands } from \"./default-commands\";\nimport { createSlashMenuElement, getSlashMessages } from \"./menu\";\nimport { computeSlashMenuLayout } from \"./position\";\nimport { detectSlashQuery, filterSlashCommands } from \"./query\";\nimport { slashMenuTheme } from \"./theme\";\nimport type {\n MardoraSlashCommand,\n MardoraSlashCommandsConfig,\n MardoraSlashMessages,\n MardoraSlashQuery,\n} from \"./types\";\n\nexport type MardoraSlashRuntimeConfig = MardoraSlashCommandsConfig & {\n attachmentUploader?: MardoraAttachmentUploader | undefined;\n inheritedLocale?: MardoraLocale | undefined;\n};\n\nexport type ResolvedMardoraSlashRuntimeConfig = Required<Pick<MardoraSlashRuntimeConfig, \"commands\">> &\n MardoraSlashRuntimeConfig & {\n locale: MardoraLocale;\n messages: MardoraSlashMessages;\n };\n\nexport function createSlashRuntimeConfig(config: MardoraSlashRuntimeConfig = {}): ResolvedMardoraSlashRuntimeConfig {\n const locale = resolveMardoraLocale(config.locale ?? config.inheritedLocale);\n return {\n ...config,\n locale,\n commands: config.commands ?? getDefaultSlashCommands(locale),\n messages: getSlashMessages(locale),\n };\n}\n\nfunction requestFile(kind: MardoraAttachmentKind): Promise<File | null> {\n return new Promise((resolve) => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = kind === \"image\" ? \"image/*\" : kind === \"video\" ? \"video/*\" : kind === \"audio\" ? \"audio/*\" : \"*/*\";\n input.addEventListener(\"change\", () => resolve(input.files?.[0] ?? null), { once: true });\n input.click();\n });\n}\n\nclass SlashCommandViewPlugin {\n private query: MardoraSlashQuery | null = null;\n private commands: MardoraSlashCommand[] = [];\n private activeIndex = 0;\n private menu: HTMLElement | null = null;\n private renderVersion = 0;\n private previousCaretColor: string | null = null;\n\n constructor(\n private readonly view: EditorView,\n private readonly config: ResolvedMardoraSlashRuntimeConfig\n ) {\n this.view.dom.ownerDocument.addEventListener(\"keydown\", this.handleDocumentKeydown, true);\n this.updateState();\n }\n\n update(update: ViewUpdate): void {\n if (update.docChanged || update.selectionSet || update.viewportChanged) {\n this.updateState();\n }\n }\n\n destroy(): void {\n this.view.dom.ownerDocument.removeEventListener(\"keydown\", this.handleDocumentKeydown, true);\n this.renderVersion += 1;\n this.removeMenu();\n }\n\n move(delta: number): boolean {\n if (!this.query || this.commands.length === 0) return false;\n this.activeIndex = (this.activeIndex + delta + this.commands.length) % this.commands.length;\n this.syncActiveItem(\"center\");\n return true;\n }\n\n close(): boolean {\n if (!this.query) return false;\n this.query = null;\n this.commands = [];\n this.renderVersion += 1;\n this.removeMenu();\n return true;\n }\n\n selectActive(): boolean {\n if (!this.query || this.commands.length === 0) return false;\n return this.select(this.activeIndex);\n }\n\n handleKeydown(event: KeyboardEvent): boolean {\n if (event.key === \"ArrowDown\") {\n return this.move(1);\n }\n\n if (event.key === \"ArrowUp\") {\n return this.move(-1);\n }\n\n if (event.key === \"Enter\") {\n return this.selectActive();\n }\n\n if (event.key === \"Escape\") {\n return this.close();\n }\n\n return false;\n }\n\n private select(index: number): boolean {\n const command = this.commands[index];\n if (!this.query || !command) return false;\n\n const queryRange = { from: this.query.from, to: this.query.to };\n this.close();\n\n return command.run({\n view: this.view,\n queryRange,\n requestAttachment: (kind, context) => this.requestAttachment(kind, context.queryRange),\n });\n }\n\n private requestAttachment(kind: MardoraAttachmentKind, queryRange: { from: number; to: number }): boolean {\n if (!this.config.attachmentUploader) {\n return false;\n }\n\n void requestFile(kind).then((file) => {\n if (!file || !this.config.attachmentUploader) return;\n void uploadAttachmentFile(this.view, file, {\n kind,\n source: \"slash\",\n range: queryRange,\n uploader: this.config.attachmentUploader,\n });\n });\n\n return true;\n }\n\n private readonly handleDocumentKeydown = (event: KeyboardEvent): void => {\n if (!this.query || event.defaultPrevented) return;\n\n const handled = this.handleKeydown(event);\n if (!handled) return;\n\n event.preventDefault();\n event.stopPropagation();\n };\n\n private updateState(): void {\n const cursor = this.view.state.selection.main.head;\n const query = detectSlashQuery(this.view.state.doc.toString(), cursor);\n\n if (!query) {\n this.query = null;\n this.commands = [];\n this.renderVersion += 1;\n this.removeMenu();\n return;\n }\n\n if (!this.query || this.query.query !== query.query || this.query.from !== query.from) {\n this.activeIndex = 0;\n }\n\n this.query = query;\n this.commands = filterSlashCommands(this.config.commands, query.query);\n this.activeIndex = Math.min(this.activeIndex, Math.max(0, this.commands.length - 1));\n this.renderMenu();\n }\n\n private renderMenu(): void {\n if (!this.query) return;\n const renderVersion = ++this.renderVersion;\n const queryFrom = this.query.from;\n this.removeMenu();\n\n this.view.requestMeasure({\n read: (view) => view.coordsAtPos(queryFrom),\n write: (coords) => {\n if (renderVersion !== this.renderVersion || !this.query || !coords) return;\n\n this.removeMenu();\n this.menu = createSlashMenuElement(\n { commands: this.commands, activeIndex: this.activeIndex, messages: this.config.messages },\n {\n onHover: (index) => {\n this.activeIndex = index;\n this.syncActiveItem(\"nearest\");\n },\n onSelect: (index) => {\n this.select(index);\n },\n }\n );\n\n const layout = computeSlashMenuLayout({\n anchor: { left: coords.left, top: coords.top, bottom: coords.bottom },\n viewport: {\n width: this.view.dom.ownerDocument.defaultView?.innerWidth ?? window.innerWidth,\n height: this.view.dom.ownerDocument.defaultView?.innerHeight ?? window.innerHeight,\n },\n });\n this.menu.dataset.mardoraSlashPlacement = layout.placement;\n this.menu.style.left = `${layout.left}px`;\n this.menu.style.maxHeight = `${layout.maxHeight}px`;\n this.menu.style.top = layout.top === null ? \"\" : `${layout.top}px`;\n this.menu.style.bottom = layout.bottom === null ? \"\" : `${layout.bottom}px`;\n this.view.dom.classList.add(\"cm-mardora-slash-open\");\n this.hideEditorCaret();\n this.view.dom.appendChild(this.menu);\n this.syncActiveItem(\"nearest\");\n },\n });\n }\n\n private syncActiveItem(scrollMode: \"center\" | \"nearest\"): void {\n if (!this.menu) return;\n\n const items = this.menu.querySelectorAll<HTMLElement>(\".cm-mardora-slash-item\");\n let activeItem: HTMLElement | null = null;\n\n items.forEach((item) => {\n const itemIndex = Number(item.dataset.mardoraSlashIndex);\n const isActive = itemIndex === this.activeIndex;\n item.classList.toggle(\"cm-mardora-slash-item-active\", isActive);\n item.setAttribute(\"aria-selected\", String(isActive));\n if (isActive) {\n activeItem = item;\n }\n });\n\n if (activeItem) {\n this.scrollActiveItemIntoView(activeItem, scrollMode);\n }\n }\n\n private scrollActiveItemIntoView(activeItem: HTMLElement, mode: \"center\" | \"nearest\"): void {\n const list = this.menu?.querySelector<HTMLElement>(\".cm-mardora-slash-list\");\n if (!list) return;\n\n const itemTop = activeItem.offsetTop;\n const itemBottom = itemTop + activeItem.offsetHeight;\n const visibleTop = list.scrollTop;\n const visibleBottom = visibleTop + list.clientHeight;\n\n if (mode === \"center\") {\n list.scrollTop = itemTop - (list.clientHeight - activeItem.offsetHeight) / 2;\n return;\n }\n\n if (itemTop < visibleTop) {\n list.scrollTop = itemTop;\n return;\n }\n\n if (itemBottom > visibleBottom) {\n list.scrollTop = itemBottom - list.clientHeight;\n }\n }\n\n private hideEditorCaret(): void {\n if (this.previousCaretColor === null) {\n this.previousCaretColor = this.view.contentDOM.style.caretColor;\n }\n this.view.contentDOM.style.caretColor = \"transparent\";\n }\n\n private restoreEditorCaret(): void {\n if (this.previousCaretColor === null) return;\n this.view.contentDOM.style.caretColor = this.previousCaretColor;\n this.previousCaretColor = null;\n }\n\n private removeMenu(): void {\n this.menu?.remove();\n this.menu = null;\n this.view.dom.classList.remove(\"cm-mardora-slash-open\");\n this.restoreEditorCaret();\n }\n}\n\nexport function slashCommands(config: MardoraSlashRuntimeConfig = {}): Extension[] {\n if (config.enabled === false) {\n return [];\n }\n\n const normalizedConfig = createSlashRuntimeConfig(config);\n\n const plugin = ViewPlugin.define((view) => new SlashCommandViewPlugin(view, normalizedConfig));\n\n return [\n slashMenuTheme,\n plugin,\n Prec.highest(\n EditorView.domEventHandlers({\n keydown(event, view) {\n const value = view.plugin(plugin);\n if (!value) return false;\n\n const handled = value.handleKeydown(event);\n if (handled) event.preventDefault();\n return handled;\n },\n })\n ),\n ];\n}\n","import type { SelectionToolbarLayout, SelectionToolbarLayoutInput, SelectionToolbarPlacement } from \"./types\";\n\nconst viewportPadding = 8;\nconst anchorGap = 8;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function computeSelectionToolbarLayout(input: SelectionToolbarLayoutInput): SelectionToolbarLayout {\n const selectionCenter = (input.anchor.left + input.anchor.right) / 2;\n const boundary = input.boundary ?? {\n left: viewportPadding,\n right: input.viewport.width - viewportPadding,\n top: viewportPadding,\n bottom: input.viewport.height - viewportPadding,\n };\n const minLeft = Math.max(viewportPadding, boundary.left);\n const maxLeft = Math.max(minLeft, Math.min(input.viewport.width - input.floating.width - viewportPadding, boundary.right - input.floating.width));\n const left = clamp(Math.round(selectionCenter - input.floating.width / 2), minLeft, maxLeft);\n const topLimit = Math.max(viewportPadding, boundary.top);\n const bottomLimit = Math.min(input.viewport.height - viewportPadding, boundary.bottom);\n const availableAbove = Math.max(1, input.anchor.top - anchorGap - topLimit);\n const availableBelow = Math.max(1, bottomLimit - input.anchor.bottom - anchorGap);\n const placement: SelectionToolbarPlacement =\n availableAbove >= input.floating.height || availableAbove >= availableBelow ? \"top\" : \"bottom\";\n\n if (placement === \"top\") {\n return {\n placement,\n left,\n top: Math.max(topLimit, Math.round(input.anchor.top - anchorGap - input.floating.height)),\n maxHeight: availableAbove,\n };\n }\n\n return {\n placement,\n left,\n top: Math.round(input.anchor.bottom + anchorGap),\n maxHeight: availableBelow,\n };\n}\n","import type {\n InlineFormatInput,\n LinkChangeInput,\n ParsedSelectionLink,\n SelectionToolbarListKind,\n SelectionToolbarBlockType,\n TextChange,\n TextCommandResult,\n} from \"./types\";\n\nconst markdownLinkPattern = /^\\[([^\\]]*)\\]\\(([^)]*)\\)$/;\nconst urlPattern = /^(https?:\\/\\/|www\\.)[^\\s]+$/i;\nconst listMarkerPattern = /^(\\s*)([-*+]|\\d+\\.)\\s(\\[[ xX]\\]\\s)?/;\nconst headingMarkerPattern = /^(\\s*)(#{1,6})(?:[ \\t]+|$)/;\n\nfunction selectedText(input: Pick<InlineFormatInput, \"doc\" | \"from\" | \"to\">): string {\n return input.doc.slice(input.from, input.to);\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction buildHtmlWrapper(input: InlineFormatInput): { open: string; close: string } {\n if (input.htmlTag) {\n return { open: `<${input.htmlTag}>`, close: `</${input.htmlTag}>` };\n }\n if (input.spanStyle) {\n return { open: `<span style=\"${input.spanStyle.property}: ${input.spanStyle.value}\">`, close: \"</span>\" };\n }\n const marker = input.marker ?? \"\";\n return { open: marker, close: marker };\n}\n\nexport function buildInlineFormatChange(input: InlineFormatInput): TextCommandResult {\n const text = selectedText(input);\n const { open, close } = buildHtmlWrapper(input);\n\n if (input.clear) {\n const tagPattern = input.spanStyle\n ? new RegExp(\n `^<span style=\"${escapeRegExp(input.spanStyle.property)}: ${\n input.spanStyle.value ? escapeRegExp(input.spanStyle.value) : \"#[0-9a-fA-F]{6}\"\n }\">([\\\\s\\\\S]*)<\\\\/span>$`\n )\n : input.htmlTag\n ? new RegExp(`^<${input.htmlTag}>([\\\\s\\\\S]*)<\\\\/${input.htmlTag}>$`)\n : null;\n const match = tagPattern ? text.match(tagPattern) : null;\n const insert = match?.[1] ?? text;\n return {\n changes: { from: input.from, to: input.to, insert },\n selection: { anchor: input.from, head: input.from + insert.length },\n };\n }\n\n const beforeFrom = Math.max(0, input.from - open.length);\n const afterTo = Math.min(input.doc.length, input.to + close.length);\n const before = input.doc.slice(beforeFrom, input.from);\n const after = input.doc.slice(input.to, afterTo);\n\n if (before === open && after === close) {\n return {\n changes: [\n { from: beforeFrom, to: input.from, insert: \"\" },\n { from: input.to, to: afterTo, insert: \"\" },\n ],\n selection: { anchor: beforeFrom, head: beforeFrom + text.length },\n };\n }\n\n const insert = `${open}${text}${close}`;\n return {\n changes: { from: input.from, to: input.to, insert },\n selection: { anchor: input.from + open.length, head: input.from + open.length + text.length },\n };\n}\n\nexport function parseSelectedLink(text: string): ParsedSelectionLink {\n const linkMatch = text.match(markdownLinkPattern);\n if (linkMatch) {\n return { kind: \"markdown-link\", title: linkMatch[1] ?? \"\", url: linkMatch[2] ?? \"\" };\n }\n if (urlPattern.test(text)) {\n return { kind: \"url\", title: \"\", url: text };\n }\n return { kind: \"text\", title: text, url: \"\" };\n}\n\nexport function buildLinkChange(input: LinkChangeInput): TextCommandResult {\n if (input.remove) {\n return {\n changes: { from: input.from, to: input.to, insert: input.title },\n selection: { anchor: input.from, head: input.from + input.title.length },\n };\n }\n\n if (!input.url.trim()) {\n throw new Error(\"Link URL is required\");\n }\n\n const insert = `[${input.title}](${input.url})`;\n return {\n changes: { from: input.from, to: input.to, insert },\n selection: { anchor: input.from, head: input.from + insert.length },\n };\n}\n\nfunction lineRanges(doc: string, from: number, to: number): Array<{ from: number; text: string }> {\n const ranges: Array<{ from: number; text: string }> = [];\n let position = 0;\n\n for (const text of doc.split(\"\\n\")) {\n const lineFrom = position;\n const lineTo = position + text.length;\n if (lineTo >= from && lineFrom <= to) {\n ranges.push({ from: lineFrom, text });\n }\n position = lineTo + 1;\n }\n\n return ranges;\n}\n\nfunction markerFor(kind: SelectionToolbarListKind, order: number): string {\n if (kind === \"ordered\") return `${order}. `;\n if (kind === \"task\") return \"- [ ] \";\n return \"- \";\n}\n\nexport function buildListChange(input: { doc: string; from: number; to: number; kind: SelectionToolbarListKind }): {\n changes: TextChange[];\n} {\n const changes: TextChange[] = [];\n let order = 1;\n\n for (const line of lineRanges(input.doc, input.from, input.to)) {\n const match = line.text.match(listMarkerPattern);\n const actualMarker = markerFor(input.kind, order);\n\n if (match) {\n const indent = match[1] ?? \"\";\n const isOrdered = /^\\d+\\.$/.test(match[2] ?? \"\");\n const isUnordered = /^[-*+]$/.test(match[2] ?? \"\");\n const hasTask = !!match[3];\n const same =\n (input.kind === \"ordered\" && isOrdered && !hasTask) ||\n (input.kind === \"unordered\" && isUnordered && !hasTask) ||\n (input.kind === \"task\" && hasTask);\n\n changes.push({\n from: line.from,\n to: line.from + match[0].length,\n insert: same ? indent : indent + actualMarker,\n });\n } else {\n const indentLength = line.text.match(/^(\\s*)/)?.[1]?.length ?? 0;\n changes.push({ from: line.from + indentLength, to: line.from + indentLength, insert: actualMarker });\n }\n\n if (input.kind === \"ordered\") order += 1;\n }\n\n return { changes };\n}\n\nfunction headingLevelForLine(text: string): number {\n return text.match(headingMarkerPattern)?.[2]?.length ?? 0;\n}\n\nfunction escapePlainTextBlockStart(text: string): string {\n if (/^\\d+[.)]\\s/.test(text)) {\n return text.replace(/^(\\d+)([.)])/, \"$1\\\\$2\");\n }\n if (/^[-*+]\\s/.test(text) || /^#{1,6}(\\s|$)/.test(text) || /^>\\s?/.test(text)) {\n return `\\\\${text}`;\n }\n return text;\n}\n\nfunction unescapePlainTextBlockStart(text: string): string {\n if (/^\\d+\\\\[.)]\\s/.test(text)) {\n return text.replace(/^(\\d+)\\\\([.)])/, \"$1$2\");\n }\n if (/^\\\\([-*+#>])/.test(text)) {\n return text.slice(1);\n }\n return text;\n}\n\nexport function detectSelectionBlockType(input: { doc: string; from: number; to: number }): SelectionToolbarBlockType {\n const line = lineRanges(input.doc, input.from, input.to)[0];\n const level = line ? headingLevelForLine(line.text) : 0;\n return level > 0 ? (`heading-${level}` as SelectionToolbarBlockType) : \"text\";\n}\n\nexport function buildBlockTypeChange(input: {\n doc: string;\n from: number;\n to: number;\n level: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n}): TextCommandResult {\n const changes: TextChange[] = [];\n const lines = lineRanges(input.doc, input.from, input.to);\n let accumulatedDelta = 0;\n let selectionAnchor: number | null = null;\n let selectionHead: number | null = null;\n\n for (const line of lines) {\n const lineTo = line.from + line.text.length;\n const headingMatch = line.text.match(headingMarkerPattern);\n const indent = headingMatch?.[1] ?? line.text.match(/^(\\s*)/)?.[1] ?? \"\";\n const oldPrefixLength = headingMatch ? headingMatch[0].length : indent.length;\n const content = line.text.slice(oldPrefixLength);\n\n if (input.level === 0 && headingMatch) {\n const escapedContent = escapePlainTextBlockStart(content);\n if (escapedContent !== content) {\n const insert = `${indent}${escapedContent}`;\n const delta = insert.length - line.text.length;\n changes.push({\n from: line.from,\n to: lineTo,\n insert,\n });\n\n const newContentFrom = line.from + accumulatedDelta + indent.length;\n const newContentTo = lineTo + accumulatedDelta + delta;\n selectionAnchor ??= newContentFrom;\n selectionHead = newContentTo;\n accumulatedDelta += delta;\n continue;\n }\n }\n\n const newPrefix = input.level === 0 ? indent : `${indent}${\"#\".repeat(input.level)} `;\n const delta = newPrefix.length - oldPrefixLength;\n const headingContent = input.level > 0 ? unescapePlainTextBlockStart(content) : content;\n\n if (input.level > 0 && headingContent !== content) {\n const insert = `${newPrefix}${headingContent}`;\n const lineDelta = insert.length - line.text.length;\n changes.push({\n from: line.from,\n to: lineTo,\n insert,\n });\n\n const newContentFrom = line.from + accumulatedDelta + newPrefix.length;\n const newContentTo = lineTo + accumulatedDelta + lineDelta;\n selectionAnchor ??= newContentFrom;\n selectionHead = newContentTo;\n accumulatedDelta += lineDelta;\n continue;\n }\n\n if (newPrefix !== line.text.slice(0, oldPrefixLength)) {\n changes.push({\n from: line.from,\n to: line.from + oldPrefixLength,\n insert: newPrefix,\n });\n }\n\n const newContentFrom = line.from + accumulatedDelta + newPrefix.length;\n const newContentTo = lineTo + accumulatedDelta + delta;\n selectionAnchor ??= newContentFrom;\n selectionHead = newContentTo;\n accumulatedDelta += delta;\n }\n\n return {\n changes,\n selection: {\n anchor: selectionAnchor ?? input.from,\n head: selectionHead ?? input.to,\n },\n };\n}\n","import { createMardoraIcon } from \"../icons\";\nimport type {\n SelectionToolbarBlockType,\n SelectionToolbarButton,\n SelectionToolbarMenuCallbacks,\n SelectionToolbarMenuState,\n SelectionToolbarPaletteItem,\n} from \"./types\";\n\nfunction iconButton(button: SelectionToolbarButton, callbacks: SelectionToolbarMenuCallbacks): HTMLButtonElement {\n const element = document.createElement(\"button\");\n element.type = \"button\";\n element.className = button.active\n ? \"cm-mardora-selection-toolbar-button cm-mardora-selection-toolbar-button-active\"\n : \"cm-mardora-selection-toolbar-button\";\n element.setAttribute(\"aria-label\", button.label);\n element.setAttribute(\"aria-pressed\", String(!!button.active));\n element.dataset.mardoraSelectionAction = button.id;\n element.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n callbacks.onAction(button.id);\n });\n\n if (button.text) {\n element.classList.add(\"cm-mardora-selection-toolbar-block-button\");\n const label = document.createElement(\"span\");\n label.className = \"cm-mardora-selection-toolbar-button-text\";\n label.textContent = button.text;\n element.appendChild(label);\n } else if (button.id === \"block-type\") {\n element.classList.add(\"cm-mardora-selection-toolbar-block-button\");\n const icon = createMardoraIcon(button.icon);\n if (icon) element.appendChild(icon);\n } else {\n const icon = createMardoraIcon(button.icon);\n if (icon) {\n element.appendChild(icon);\n } else {\n element.textContent = button.label;\n }\n }\n return element;\n}\n\nfunction blockTypeIcon(type: SelectionToolbarBlockType): HTMLElement {\n const icon = document.createElement(\"span\");\n icon.className = \"cm-mardora-selection-toolbar-block-menu-icon\";\n if (type === \"text\") {\n const svg = createMardoraIcon(\"text-align-start\");\n if (svg) icon.appendChild(svg);\n } else {\n icon.textContent = `H${type.slice(\"heading-\".length)}`;\n }\n return icon;\n}\n\nfunction appendBlockTypePanel(\n root: HTMLElement,\n state: SelectionToolbarMenuState,\n callbacks: SelectionToolbarMenuCallbacks\n): void {\n const list = document.createElement(\"div\");\n list.className = \"cm-mardora-selection-toolbar-block-menu\";\n list.setAttribute(\"role\", \"menu\");\n\n for (const item of state.blockTypes) {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className =\n item.type === state.blockType\n ? \"cm-mardora-selection-toolbar-block-item cm-mardora-selection-toolbar-block-item-active\"\n : \"cm-mardora-selection-toolbar-block-item\";\n button.setAttribute(\"aria-label\", item.label);\n button.setAttribute(\"aria-pressed\", String(item.type === state.blockType));\n button.setAttribute(\"role\", \"menuitemradio\");\n button.dataset.mardoraBlockType = item.type;\n button.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n callbacks.onBlockType(item.type);\n });\n\n const label = document.createElement(\"span\");\n label.className = \"cm-mardora-selection-toolbar-block-menu-label\";\n label.textContent = item.label;\n\n button.append(blockTypeIcon(item.type), label);\n list.appendChild(button);\n }\n\n root.appendChild(list);\n}\n\nfunction divider(): HTMLSpanElement {\n const element = document.createElement(\"span\");\n element.className = \"cm-mardora-selection-toolbar-divider\";\n element.setAttribute(\"aria-hidden\", \"true\");\n return element;\n}\n\nfunction appendToolbarButtons(\n root: HTMLElement,\n buttons: SelectionToolbarButton[],\n callbacks: SelectionToolbarMenuCallbacks\n): void {\n const groups: SelectionToolbarButton[][] = [buttons.slice(0, 1), buttons.slice(1, 8), buttons.slice(8, 9), buttons.slice(9)];\n\n groups.forEach((group, index) => {\n if (group.length === 0) return;\n if (index > 0) root.appendChild(divider());\n for (const button of group) root.appendChild(iconButton(button, callbacks));\n });\n}\n\nfunction paletteButton(\n item: SelectionToolbarPaletteItem,\n className: string,\n callback: (value: string | null) => void\n): HTMLButtonElement {\n const element = document.createElement(\"button\");\n element.type = \"button\";\n element.className = className;\n element.setAttribute(\"aria-label\", item.label);\n element.title = item.label;\n element.dataset.mardoraSwatch = item.id;\n if (item.value) element.style.setProperty(\"--mardora-swatch-color\", item.value);\n element.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n callback(item.value);\n });\n return element;\n}\n\nfunction appendPalette(\n root: HTMLElement,\n title: string,\n items: SelectionToolbarPaletteItem[],\n callback: (value: string | null) => void\n): void {\n const group = document.createElement(\"div\");\n group.className = \"cm-mardora-selection-toolbar-palette-group\";\n\n const label = document.createElement(\"div\");\n label.className = \"cm-mardora-selection-toolbar-palette-label\";\n label.textContent = title;\n group.appendChild(label);\n\n const grid = document.createElement(\"div\");\n grid.className = \"cm-mardora-selection-toolbar-swatch-grid\";\n for (const item of items) {\n grid.appendChild(paletteButton(item, \"cm-mardora-selection-toolbar-swatch\", callback));\n }\n group.appendChild(grid);\n root.appendChild(group);\n}\n\nfunction appendLinkAction(\n actions: HTMLElement,\n label: string,\n iconName: string,\n callback: () => void,\n danger = false\n): void {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = danger\n ? \"cm-mardora-selection-toolbar-link-button cm-mardora-selection-toolbar-link-button-danger\"\n : \"cm-mardora-selection-toolbar-link-button\";\n button.setAttribute(\"aria-label\", label);\n const svg = createMardoraIcon(iconName);\n if (svg) button.appendChild(svg);\n button.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n callback();\n });\n actions.appendChild(button);\n}\n\nfunction appendLinkPanel(\n root: HTMLElement,\n state: SelectionToolbarMenuState,\n callbacks: SelectionToolbarMenuCallbacks\n): void {\n const title = document.createElement(\"input\");\n title.className = \"cm-mardora-selection-toolbar-link-input\";\n title.setAttribute(\"aria-label\", state.messages.link.title);\n title.value = state.link.title;\n title.addEventListener(\"input\", () => callbacks.onLinkInput(\"title\", title.value));\n title.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\") callbacks.onLinkSubmit();\n if (event.key === \"Escape\") callbacks.onCancelPanel();\n });\n\n const url = document.createElement(\"input\");\n url.className = \"cm-mardora-selection-toolbar-link-input\";\n url.setAttribute(\"aria-label\", state.messages.link.url);\n url.value = state.link.url;\n url.addEventListener(\"input\", () => callbacks.onLinkInput(\"url\", url.value));\n url.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\") callbacks.onLinkSubmit();\n if (event.key === \"Escape\") callbacks.onCancelPanel();\n });\n\n const actions = document.createElement(\"div\");\n actions.className = \"cm-mardora-selection-toolbar-link-actions\";\n\n appendLinkAction(actions, state.link.copied ? state.messages.link.copied : state.messages.link.copy, \"copy\", callbacks.onLinkCopy);\n appendLinkAction(actions, state.messages.link.open, \"external-link\", callbacks.onLinkOpen);\n if (state.link.canRemove) appendLinkAction(actions, state.messages.link.remove, \"trash-2\", callbacks.onLinkRemove, true);\n\n root.append(title, url);\n if (state.link.error) {\n const error = document.createElement(\"div\");\n error.className = \"cm-mardora-selection-toolbar-error\";\n error.textContent = state.link.error;\n root.appendChild(error);\n }\n root.appendChild(actions);\n queueMicrotask(() => {\n title.focus();\n title.select();\n });\n}\n\nexport function createSelectionToolbarElement(\n state: SelectionToolbarMenuState,\n callbacks: SelectionToolbarMenuCallbacks\n): HTMLElement {\n const root = document.createElement(\"div\");\n root.className =\n state.panel === \"toolbar\" || state.panel === \"block-type\"\n ? \"cm-mardora-selection-toolbar\"\n : \"cm-mardora-selection-toolbar cm-mardora-selection-toolbar-panel\";\n root.setAttribute(\"role\", \"toolbar\");\n root.addEventListener(\"mousedown\", (event) => {\n const target = event.target;\n if (target instanceof HTMLElement && target.closest(\".cm-mardora-selection-toolbar-link-input\")) return;\n event.preventDefault();\n });\n\n if (state.panel === \"toolbar\" || state.panel === \"block-type\") {\n appendToolbarButtons(root, state.buttons, callbacks);\n if (state.panel === \"block-type\") appendBlockTypePanel(root, state, callbacks);\n } else if (state.panel === \"link\") {\n appendLinkPanel(root, state, callbacks);\n } else if (state.panel === \"color\") {\n appendPalette(root, state.messages.panels.textColor, state.textColors, callbacks.onColor);\n } else {\n appendPalette(root, state.messages.panels.highlightColor, state.highlightColors, callbacks.onHighlight);\n }\n\n return root;\n}\n","import { EditorView } from \"@codemirror/view\";\n\nexport const selectionToolbarTheme = EditorView.baseTheme({\n \".cm-mardora-selection-toolbar\": {\n position: \"fixed\",\n zIndex: \"1001\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"2px\",\n border: \"1px solid rgba(24, 24, 27, 0.14)\",\n borderRadius: \"10px\",\n background: \"var(--mardora-selection-toolbar-bg, #ffffff)\",\n boxShadow: \"0 14px 38px rgba(15, 23, 42, 0.16)\",\n padding: \"4px\",\n color: \"var(--mardora-selection-toolbar-fg, #18181b)\",\n fontFamily: \"var(--font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif)\",\n userSelect: \"none\",\n },\n \".cm-mardora-selection-toolbar-panel\": {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n width: \"336px\",\n gap: \"6px\",\n padding: \"8px\",\n },\n \".cm-mardora-selection-toolbar-block-button\": {\n minWidth: \"44px\",\n width: \"44px\",\n fontWeight: \"400\",\n },\n \".cm-mardora-selection-toolbar-button-text\": {\n fontSize: \"13px\",\n lineHeight: \"1\",\n },\n \".cm-mardora-selection-toolbar-button, .cm-mardora-selection-toolbar-link-button\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"30px\",\n height: \"30px\",\n border: \"0\",\n borderRadius: \"7px\",\n background: \"transparent\",\n color: \"inherit\",\n cursor: \"default\",\n padding: \"0\",\n },\n \".cm-mardora-selection-toolbar-button:hover, .cm-mardora-selection-toolbar-button-active\": {\n background: \"var(--mardora-selection-toolbar-active, #f4f4f5)\",\n },\n \".cm-mardora-selection-toolbar-button svg, .cm-mardora-selection-toolbar-link-button svg\": {\n width: \"16px\",\n height: \"16px\",\n strokeWidth: \"2\",\n },\n \".cm-mardora-selection-toolbar-divider\": {\n width: \"1px\",\n height: \"22px\",\n margin: \"0 4px\",\n background: \"var(--mardora-selection-toolbar-border, #e4e4e7)\",\n },\n \".cm-mardora-selection-toolbar-block-menu\": {\n position: \"absolute\",\n left: \"0\",\n zIndex: \"1002\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"1px\",\n boxSizing: \"border-box\",\n width: \"168px\",\n maxHeight: \"var(--mardora-selection-toolbar-popover-max-height, 240px)\",\n overflowY: \"auto\",\n border: \"1px solid rgba(24, 24, 27, 0.14)\",\n borderRadius: \"8px\",\n background: \"var(--mardora-selection-toolbar-bg, #ffffff)\",\n boxShadow: \"0 12px 28px rgba(15, 23, 42, 0.14)\",\n padding: \"5px\",\n },\n '.cm-mardora-selection-toolbar[data-mardora-selection-placement=\"bottom\"] .cm-mardora-selection-toolbar-block-menu': {\n top: \"calc(100% + 6px)\",\n },\n '.cm-mardora-selection-toolbar[data-mardora-selection-placement=\"top\"] .cm-mardora-selection-toolbar-block-menu': {\n bottom: \"calc(100% + 6px)\",\n },\n \".cm-mardora-selection-toolbar-block-item\": {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n border: \"0\",\n borderRadius: \"6px\",\n background: \"transparent\",\n color: \"inherit\",\n cursor: \"default\",\n font: \"inherit\",\n minHeight: \"28px\",\n padding: \"4px 8px\",\n textAlign: \"left\",\n },\n \".cm-mardora-selection-toolbar-block-item:hover, .cm-mardora-selection-toolbar-block-item-active\": {\n background: \"var(--mardora-selection-toolbar-active, #f4f4f5)\",\n },\n \".cm-mardora-selection-toolbar-block-menu-icon\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"22px\",\n color: \"inherit\",\n fontSize: \"12px\",\n fontWeight: \"400\",\n lineHeight: \"1\",\n },\n \".cm-mardora-selection-toolbar-block-menu-label\": {\n fontSize: \"13px\",\n lineHeight: \"1.1\",\n },\n \".cm-mardora-selection-toolbar-link-input\": {\n boxSizing: \"border-box\",\n width: \"100%\",\n border: \"0\",\n borderRadius: \"7px\",\n background: \"var(--mardora-selection-toolbar-input, #f4f4f5)\",\n color: \"inherit\",\n font: \"inherit\",\n fontSize: \"14px\",\n outline: \"none\",\n padding: \"8px 10px\",\n },\n \".cm-mardora-selection-toolbar-link-actions\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: \"6px\",\n },\n \".cm-mardora-selection-toolbar-link-button:hover\": {\n background: \"var(--mardora-selection-toolbar-active, #f4f4f5)\",\n },\n \".cm-mardora-selection-toolbar-link-button-danger\": {\n color: \"var(--mardora-selection-toolbar-danger, #dc2626)\",\n },\n \".cm-mardora-selection-toolbar-link-button-danger:hover\": {\n background: \"var(--mardora-selection-toolbar-danger-bg, #fee2e2)\",\n },\n \".cm-mardora-selection-toolbar-error\": {\n color: \"var(--mardora-selection-toolbar-danger, #dc2626)\",\n fontSize: \"12px\",\n padding: \"0 2px\",\n },\n \".cm-mardora-selection-toolbar-palette-label\": {\n color: \"var(--mardora-selection-toolbar-muted, #71717a)\",\n fontSize: \"12px\",\n padding: \"0 2px 4px\",\n },\n \".cm-mardora-selection-toolbar-swatch-grid\": {\n display: \"grid\",\n gridTemplateColumns: \"repeat(8, 24px)\",\n gap: \"6px\",\n },\n \".cm-mardora-selection-toolbar-swatch\": {\n width: \"24px\",\n height: \"24px\",\n border: \"1px solid var(--mardora-selection-toolbar-border, #e4e4e7)\",\n borderRadius: \"6px\",\n background: \"var(--mardora-swatch-color, transparent)\",\n boxShadow: \"inset 0 0 0 1px rgba(255, 255, 255, 0.72)\",\n cursor: \"default\",\n outline: \"none\",\n padding: \"0\",\n transition: \"border-color 120ms ease, box-shadow 120ms ease, transform 120ms ease\",\n },\n \".cm-mardora-selection-toolbar-swatch:hover\": {\n borderColor: \"var(--mardora-selection-toolbar-swatch-hover-border, #a1a1aa)\",\n boxShadow:\n \"0 0 0 3px var(--mardora-selection-toolbar-swatch-hover-ring, rgba(24, 24, 27, 0.08)), inset 0 0 0 1px rgba(255, 255, 255, 0.72)\",\n transform: \"translateY(-1px)\",\n },\n \".cm-mardora-selection-toolbar-swatch:focus-visible\": {\n borderColor: \"var(--mardora-selection-toolbar-swatch-hover-border, #71717a)\",\n boxShadow:\n \"0 0 0 3px var(--mardora-selection-toolbar-swatch-hover-ring, rgba(24, 24, 27, 0.12)), inset 0 0 0 1px rgba(255, 255, 255, 0.72)\",\n },\n \"&dark .cm-mardora-selection-toolbar\": {\n \"--mardora-selection-toolbar-bg\": \"#18181b\",\n \"--mardora-selection-toolbar-fg\": \"#f4f4f5\",\n \"--mardora-selection-toolbar-active\": \"#27272a\",\n \"--mardora-selection-toolbar-border\": \"#3f3f46\",\n \"--mardora-selection-toolbar-input\": \"#27272a\",\n \"--mardora-selection-toolbar-muted\": \"#a1a1aa\",\n \"--mardora-selection-toolbar-link\": \"#60a5fa\",\n \"--mardora-selection-toolbar-danger\": \"#f87171\",\n \"--mardora-selection-toolbar-danger-bg\": \"rgba(248, 113, 113, 0.18)\",\n \"--mardora-selection-toolbar-swatch-hover-border\": \"#71717a\",\n \"--mardora-selection-toolbar-swatch-hover-ring\": \"rgba(244, 244, 245, 0.12)\",\n },\n});\n","import type { MardoraLocale } from \"../i18n\";\nimport type { SelectionToolbarBlockType } from \"./types\";\n\nexport type SelectionToolbarMessages = {\n buttons: {\n blockType: string;\n bold: string;\n italic: string;\n strike: string;\n underline: string;\n code: string;\n highlight: string;\n color: string;\n link: string;\n orderedList: string;\n unorderedList: string;\n taskList: string;\n };\n panels: {\n textColor: string;\n highlightColor: string;\n };\n link: {\n title: string;\n url: string;\n copy: string;\n copied: string;\n open: string;\n remove: string;\n invalid: string;\n };\n blockTypes: Record<SelectionToolbarBlockType, string>;\n colors: {\n defaultText: string;\n gray: string;\n red: string;\n orange: string;\n yellow: string;\n green: string;\n blue: string;\n purple: string;\n defaultHighlight: string;\n yellowHighlight: string;\n greenHighlight: string;\n blueHighlight: string;\n pinkHighlight: string;\n purpleHighlight: string;\n };\n};\n\nconst selectionToolbarMessages: Record<MardoraLocale, SelectionToolbarMessages> = {\n \"zh-CN\": {\n buttons: {\n blockType: \"块类型\",\n bold: \"加粗\",\n italic: \"斜体\",\n strike: \"删除线\",\n underline: \"下划线\",\n code: \"行内代码\",\n highlight: \"高亮\",\n color: \"文字颜色\",\n link: \"链接\",\n orderedList: \"有序列表\",\n unorderedList: \"无序列表\",\n taskList: \"任务列表\",\n },\n panels: {\n textColor: \"文字颜色\",\n highlightColor: \"高亮颜色\",\n },\n link: {\n title: \"链接标题\",\n url: \"链接 URL\",\n copy: \"复制链接\",\n copied: \"已复制\",\n open: \"打开链接\",\n remove: \"移除链接\",\n invalid: \"请输入有效链接\",\n },\n blockTypes: {\n text: \"文本\",\n \"heading-1\": \"标题 1\",\n \"heading-2\": \"标题 2\",\n \"heading-3\": \"标题 3\",\n \"heading-4\": \"标题 4\",\n \"heading-5\": \"标题 5\",\n \"heading-6\": \"标题 6\",\n },\n colors: {\n defaultText: \"默认文字颜色\",\n gray: \"灰色\",\n red: \"红色\",\n orange: \"橙色\",\n yellow: \"黄色\",\n green: \"绿色\",\n blue: \"蓝色\",\n purple: \"紫色\",\n defaultHighlight: \"默认高亮\",\n yellowHighlight: \"黄色高亮\",\n greenHighlight: \"绿色高亮\",\n blueHighlight: \"蓝色高亮\",\n pinkHighlight: \"粉色高亮\",\n purpleHighlight: \"紫色高亮\",\n },\n },\n \"en-US\": {\n buttons: {\n blockType: \"Block type\",\n bold: \"Bold\",\n italic: \"Italic\",\n strike: \"Strikethrough\",\n underline: \"Underline\",\n code: \"Inline code\",\n highlight: \"Highlight\",\n color: \"Text color\",\n link: \"Link\",\n orderedList: \"Numbered list\",\n unorderedList: \"Bulleted list\",\n taskList: \"To-do list\",\n },\n panels: {\n textColor: \"Text color\",\n highlightColor: \"Highlight color\",\n },\n link: {\n title: \"Link title\",\n url: \"Link URL\",\n copy: \"Copy link\",\n copied: \"Copied\",\n open: \"Open link\",\n remove: \"Remove link\",\n invalid: \"Enter a valid link\",\n },\n blockTypes: {\n text: \"Text\",\n \"heading-1\": \"Heading 1\",\n \"heading-2\": \"Heading 2\",\n \"heading-3\": \"Heading 3\",\n \"heading-4\": \"Heading 4\",\n \"heading-5\": \"Heading 5\",\n \"heading-6\": \"Heading 6\",\n },\n colors: {\n defaultText: \"Default text color\",\n gray: \"Gray\",\n red: \"Red\",\n orange: \"Orange\",\n yellow: \"Yellow\",\n green: \"Green\",\n blue: \"Blue\",\n purple: \"Purple\",\n defaultHighlight: \"Default highlight\",\n yellowHighlight: \"Yellow highlight\",\n greenHighlight: \"Green highlight\",\n blueHighlight: \"Blue highlight\",\n pinkHighlight: \"Pink highlight\",\n purpleHighlight: \"Purple highlight\",\n },\n },\n};\n\nexport function getSelectionToolbarMessages(locale: MardoraLocale): SelectionToolbarMessages {\n return selectionToolbarMessages[locale];\n}\n","export type NativeSelectionActivationInput = {\n editorSelectionEmpty: boolean;\n nativeSelectionCollapsed: boolean;\n anchorInEditor: boolean;\n focusInEditor: boolean;\n rangeCount: number;\n anchorExcluded?: boolean;\n focusExcluded?: boolean;\n};\n\nexport type SelectionToolbarSyntaxNodeInput = {\n selectionFrom: number;\n selectionTo: number;\n nodeFrom: number;\n nodeTo: number;\n nodeName: string;\n};\n\ntype ClassListLike = {\n length: number;\n item(index: number): string | null;\n};\n\ntype ElementLike = {\n className?: unknown;\n classList?: unknown;\n parentElement?: unknown;\n};\n\nconst excludedClassPrefixes = [\n \"cm-mardora-code-block\",\n \"cm-mardora-code-caption\",\n \"cm-mardora-code-copy\",\n \"cm-mardora-code-diff\",\n \"cm-mardora-code-fence\",\n \"cm-mardora-code-header\",\n \"cm-mardora-code-line\",\n \"cm-mardora-image-\",\n \"cm-mardora-math-\",\n \"cm-mardora-mermaid-\",\n] as const;\n\nconst excludedSyntaxNodeNames = new Set([\"FencedCode\", \"MermaidBlock\", \"MathBlock\", \"InlineMath\", \"Image\"]);\n\n/** Returns whether a browser native selection should activate the toolbar. */\nexport function canActivateFromNativeSelection(input: NativeSelectionActivationInput): boolean {\n return (\n !input.nativeSelectionCollapsed &&\n input.anchorInEditor &&\n input.focusInEditor &&\n input.rangeCount > 0 &&\n !input.anchorExcluded &&\n !input.focusExcluded\n );\n}\n\nexport function hasSelectionToolbarExcludedAncestor(target: unknown, root?: unknown): boolean {\n let current = toElementLike(target);\n while (current) {\n if (hasExcludedClass(current)) {\n return true;\n }\n if (current === root) {\n return false;\n }\n current = toElementLike(current.parentElement);\n }\n return false;\n}\n\nexport function selectionOverlapsExcludedSyntaxNode(input: SelectionToolbarSyntaxNodeInput): boolean {\n return (\n excludedSyntaxNodeNames.has(input.nodeName) &&\n input.selectionFrom < input.nodeTo &&\n input.selectionTo > input.nodeFrom\n );\n}\n\nfunction toElementLike(value: unknown): ElementLike | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n const element = value as ElementLike;\n if (hasClassData(element)) {\n return element;\n }\n return toElementLike(element.parentElement);\n}\n\nfunction hasClassData(value: ElementLike): boolean {\n return value.className !== undefined || value.classList !== undefined || value.parentElement !== undefined;\n}\n\nfunction hasExcludedClass(element: ElementLike): boolean {\n for (const className of classNamesFrom(element)) {\n if (excludedClassPrefixes.some((prefix) => className.startsWith(prefix))) {\n return true;\n }\n }\n return false;\n}\n\nfunction classNamesFrom(element: ElementLike): string[] {\n const classList = element.classList;\n if (isClassListLike(classList)) {\n const classNames: string[] = [];\n for (let index = 0; index < classList.length; index += 1) {\n const item = classList.item(index);\n if (item) classNames.push(item);\n }\n return classNames;\n }\n return typeof element.className === \"string\" ? element.className.split(/\\s+/).filter(Boolean) : [];\n}\n\nfunction isClassListLike(value: unknown): value is ClassListLike {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as ClassListLike).length === \"number\" &&\n typeof (value as ClassListLike).item === \"function\"\n );\n}\n","import { Extension, Prec } from \"@codemirror/state\";\nimport { EditorView, ViewPlugin, ViewUpdate } from \"@codemirror/view\";\nimport { syntaxTree } from \"@codemirror/language\";\nimport {\n buildBlockTypeChange,\n buildInlineFormatChange,\n buildLinkChange,\n buildListChange,\n detectSelectionBlockType,\n parseSelectedLink,\n} from \"./commands\";\nimport { createSelectionToolbarElement } from \"./menu\";\nimport { computeSelectionToolbarLayout } from \"./position\";\nimport { selectionToolbarTheme } from \"./theme\";\nimport { resolveMardoraLocale } from \"../i18n\";\nimport { getSelectionToolbarMessages } from \"./i18n\";\nimport {\n canActivateFromNativeSelection,\n hasSelectionToolbarExcludedAncestor,\n selectionOverlapsExcludedSyntaxNode,\n} from \"./activation\";\nimport type { MardoraLocale } from \"../i18n\";\nimport type {\n MardoraSelectionToolbarConfig,\n SelectionToolbarAnchorRect,\n SelectionToolbarBoundary,\n SelectionToolbarActionId,\n SelectionToolbarBlockType,\n SelectionToolbarButton,\n SelectionToolbarLinkState,\n SelectionToolbarMenuState,\n SelectionToolbarPaletteItem,\n SelectionToolbarPanel,\n TextCommandResult,\n} from \"./types\";\n\ntype MardoraSelectionToolbarRuntimeConfig = MardoraSelectionToolbarConfig & {\n inheritedLocale?: MardoraLocale;\n};\n\nconst toolbarWidth = 448;\nconst toolbarHeight = 40;\nconst panelWidth = 336;\nconst blockTypePanelHeight = 300;\nconst linkPanelHeight = 138;\nconst palettePanelHeight = 72;\nconst popoverGap = 6;\n\nfunction textColors(messages: ReturnType<typeof getSelectionToolbarMessages>): SelectionToolbarPaletteItem[] {\n return [\n { id: \"default\", label: messages.colors.defaultText, value: null },\n { id: \"gray\", label: messages.colors.gray, value: \"#71717a\" },\n { id: \"red\", label: messages.colors.red, value: \"#dc2626\" },\n { id: \"orange\", label: messages.colors.orange, value: \"#ea580c\" },\n { id: \"yellow\", label: messages.colors.yellow, value: \"#ca8a04\" },\n { id: \"green\", label: messages.colors.green, value: \"#16a34a\" },\n { id: \"blue\", label: messages.colors.blue, value: \"#2563eb\" },\n { id: \"purple\", label: messages.colors.purple, value: \"#7c3aed\" },\n ];\n}\n\nfunction highlightColors(messages: ReturnType<typeof getSelectionToolbarMessages>): SelectionToolbarPaletteItem[] {\n return [\n { id: \"default\", label: messages.colors.defaultHighlight, value: null },\n { id: \"yellow\", label: messages.colors.yellowHighlight, value: \"#fef08a\" },\n { id: \"green\", label: messages.colors.greenHighlight, value: \"#bbf7d0\" },\n { id: \"blue\", label: messages.colors.blueHighlight, value: \"#bfdbfe\" },\n { id: \"pink\", label: messages.colors.pinkHighlight, value: \"#fbcfe8\" },\n { id: \"purple\", label: messages.colors.purpleHighlight, value: \"#ddd6fe\" },\n ];\n}\n\nfunction blockTypeOptions(messages: ReturnType<typeof getSelectionToolbarMessages>): SelectionToolbarMenuState[\"blockTypes\"] {\n return [\n { type: \"text\", label: messages.blockTypes.text, icon: \"text-align-start\" },\n { type: \"heading-1\", label: messages.blockTypes[\"heading-1\"], icon: \"heading-1\" },\n { type: \"heading-2\", label: messages.blockTypes[\"heading-2\"], icon: \"heading-2\" },\n { type: \"heading-3\", label: messages.blockTypes[\"heading-3\"], icon: \"heading-3\" },\n { type: \"heading-4\", label: messages.blockTypes[\"heading-4\"], icon: \"heading-4\" },\n { type: \"heading-5\", label: messages.blockTypes[\"heading-5\"], icon: \"heading-5\" },\n { type: \"heading-6\", label: messages.blockTypes[\"heading-6\"], icon: \"heading-6\" },\n ];\n}\n\nfunction blockButton(blockType: SelectionToolbarBlockType, messages: ReturnType<typeof getSelectionToolbarMessages>): SelectionToolbarButton {\n return blockType === \"text\"\n ? { id: \"block-type\", label: messages.buttons.blockType, icon: \"text-align-start\" }\n : {\n id: \"block-type\",\n label: messages.buttons.blockType,\n icon: blockType,\n text: `H${blockType.slice(\"heading-\".length)}`,\n };\n}\n\nfunction defaultButtons(\n messages: ReturnType<typeof getSelectionToolbarMessages>,\n blockType: SelectionToolbarBlockType\n): SelectionToolbarButton[] {\n return [\n blockButton(blockType, messages),\n { id: \"bold\", label: messages.buttons.bold, icon: \"bold\" },\n { id: \"italic\", label: messages.buttons.italic, icon: \"italic\" },\n { id: \"strike\", label: messages.buttons.strike, icon: \"strikethrough\" },\n { id: \"underline\", label: messages.buttons.underline, icon: \"underline\" },\n { id: \"code\", label: messages.buttons.code, icon: \"code\" },\n { id: \"highlight\", label: messages.buttons.highlight, icon: \"highlighter\" },\n { id: \"color\", label: messages.buttons.color, icon: \"baseline\" },\n { id: \"link\", label: messages.buttons.link, icon: \"link\" },\n { id: \"ordered-list\", label: messages.buttons.orderedList, icon: \"list-ordered\" },\n { id: \"unordered-list\", label: messages.buttons.unorderedList, icon: \"list\" },\n { id: \"task-list\", label: messages.buttons.taskList, icon: \"list-todo\" },\n ];\n}\n\nfunction isValidUrl(value: string): boolean {\n return /^(https?:\\/\\/|www\\.)[^\\s]+$/i.test(value);\n}\n\nfunction normalizedUrl(value: string): string {\n return value.startsWith(\"http\") ? value : `https://${value}`;\n}\n\nfunction floatingSizeForPanel(panel: SelectionToolbarPanel): { width: number; height: number } {\n if (panel === \"toolbar\" || panel === \"block-type\") return { width: toolbarWidth, height: toolbarHeight };\n if (panel === \"link\") return { width: panelWidth, height: linkPanelHeight };\n return { width: panelWidth, height: palettePanelHeight };\n}\n\nfunction boundaryFromRect(rect: DOMRect): SelectionToolbarBoundary {\n return {\n left: rect.left,\n right: rect.right,\n top: rect.top,\n bottom: rect.bottom,\n };\n}\n\nclass SelectionToolbarViewPlugin {\n private menu: HTMLElement | null = null;\n private panel: SelectionToolbarPanel = \"toolbar\";\n private savedRange: { from: number; to: number; text: string } | null = null;\n private selectionAnchor: SelectionToolbarAnchorRect | null = null;\n private link: SelectionToolbarLinkState = { title: \"\", url: \"\", canRemove: false };\n private renderVersion = 0;\n\n private readonly messages;\n\n constructor(\n private readonly view: EditorView,\n private readonly config: MardoraSelectionToolbarRuntimeConfig\n ) {\n const locale = resolveMardoraLocale(config.locale ?? config.inheritedLocale);\n this.messages = getSelectionToolbarMessages(locale);\n this.view.dom.ownerDocument.addEventListener(\"mousedown\", this.handleDocumentMouseDown, true);\n this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.handleDocumentSelectionChange);\n this.updateState();\n }\n\n update(update: ViewUpdate): void {\n if (update.docChanged || update.selectionSet || update.viewportChanged || update.focusChanged) {\n this.updateState();\n }\n }\n\n destroy(): void {\n this.view.dom.ownerDocument.removeEventListener(\"mousedown\", this.handleDocumentMouseDown, true);\n this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.handleDocumentSelectionChange);\n this.removeMenu();\n }\n\n closeFromKeyboard(): boolean {\n if (!this.menu) return false;\n if (this.panel !== \"toolbar\") {\n this.panel = \"toolbar\";\n this.renderMenu();\n return true;\n }\n this.close();\n return true;\n }\n\n private readonly handleDocumentMouseDown = (event: MouseEvent): void => {\n if (!this.menu) return;\n const target = event.target;\n if (target instanceof Node && (this.menu.contains(target) || this.view.dom.contains(target))) return;\n this.close();\n };\n\n private readonly handleDocumentSelectionChange = (): void => {\n const doc = this.view.dom.ownerDocument;\n const activeElement = doc.activeElement;\n if (this.menu && activeElement instanceof Node && this.menu.contains(activeElement)) return;\n if (!this.view.hasFocus || this.view.dom.classList.contains(\"cm-mardora-slash-open\")) return;\n\n const selection = doc.getSelection();\n if (!selection || !selection.anchorNode || !selection.focusNode) return;\n if (\n !canActivateFromNativeSelection({\n editorSelectionEmpty: this.view.state.selection.main.empty,\n nativeSelectionCollapsed: selection.isCollapsed,\n anchorInEditor: this.view.contentDOM.contains(selection.anchorNode),\n focusInEditor: this.view.contentDOM.contains(selection.focusNode),\n rangeCount: selection.rangeCount,\n anchorExcluded: hasSelectionToolbarExcludedAncestor(selection.anchorNode, this.view.contentDOM),\n focusExcluded: hasSelectionToolbarExcludedAncestor(selection.focusNode, this.view.contentDOM),\n })\n ) {\n return;\n }\n\n let anchor: number;\n let head: number;\n try {\n anchor = this.view.posAtDOM(selection.anchorNode, selection.anchorOffset);\n head = this.view.posAtDOM(selection.focusNode, selection.focusOffset);\n } catch {\n return;\n }\n const from = Math.min(anchor, head);\n const to = Math.max(anchor, head);\n if (from === to) return;\n if (this.selectionTouchesExcludedSyntax(from, to)) return;\n\n const rect = selection.getRangeAt(0).getBoundingClientRect();\n this.savedRange = {\n from,\n to,\n text: this.view.state.sliceDoc(from, to),\n };\n this.selectionAnchor = {\n left: rect.left,\n right: rect.right,\n top: rect.top,\n bottom: rect.bottom,\n };\n this.renderMenu();\n };\n\n private updateState(): void {\n const selection = this.view.state.selection.main;\n if (this.view.dom.classList.contains(\"cm-mardora-slash-open\")) {\n this.close();\n return;\n }\n if (!this.view.hasFocus) {\n if (this.isMenuActive() && this.savedRange) return;\n this.close();\n return;\n }\n if (selection.empty) {\n this.close();\n return;\n }\n if (this.selectionTouchesExcludedSyntax(selection.from, selection.to)) {\n this.close();\n return;\n }\n\n this.savedRange = {\n from: selection.from,\n to: selection.to,\n text: this.view.state.sliceDoc(selection.from, selection.to),\n };\n this.selectionAnchor = null;\n this.renderMenu();\n }\n\n private isMenuActive(): boolean {\n const activeElement = this.view.dom.ownerDocument.activeElement;\n return !!this.menu && activeElement instanceof Node && this.menu.contains(activeElement);\n }\n\n private selectionTouchesExcludedSyntax(from: number, to: number): boolean {\n let excluded = false;\n syntaxTree(this.view.state).iterate({\n from,\n to,\n enter: (node) => {\n if (\n selectionOverlapsExcludedSyntaxNode({\n selectionFrom: from,\n selectionTo: to,\n nodeFrom: node.from,\n nodeTo: node.to,\n nodeName: node.name,\n })\n ) {\n excluded = true;\n return false;\n }\n return undefined;\n },\n });\n return excluded;\n }\n\n private close(): void {\n this.panel = \"toolbar\";\n this.savedRange = null;\n this.selectionAnchor = null;\n this.removeMenu();\n }\n\n private removeMenu(): void {\n this.renderVersion += 1;\n this.detachMenu();\n }\n\n private detachMenu(): void {\n this.menu?.remove();\n this.menu = null;\n }\n\n private menuState(): SelectionToolbarMenuState {\n const range = this.savedRange;\n const blockType = range\n ? detectSelectionBlockType({ doc: this.view.state.doc.toString(), from: range.from, to: range.to })\n : \"text\";\n return {\n panel: this.panel,\n buttons: defaultButtons(this.messages, blockType),\n blockType,\n blockTypes: blockTypeOptions(this.messages),\n textColors: textColors(this.messages),\n highlightColors: highlightColors(this.messages),\n link: this.link,\n messages: this.messages,\n };\n }\n\n private renderMenu(): void {\n const range = this.savedRange;\n if (!range) return;\n const renderVersion = ++this.renderVersion;\n const floating = floatingSizeForPanel(this.panel);\n this.detachMenu();\n const anchorFromSelection = this.selectionAnchor;\n\n this.view.requestMeasure({\n read: (view) => {\n const boundary = boundaryFromRect(view.dom.getBoundingClientRect());\n if (anchorFromSelection) return { anchor: anchorFromSelection, boundary };\n const from = view.coordsAtPos(range.from);\n const to = view.coordsAtPos(range.to);\n if (!from || !to) return null;\n const anchor = {\n left: Math.min(from.left, to.left),\n right: Math.max(from.right, to.right),\n top: Math.min(from.top, to.top),\n bottom: Math.max(from.bottom, to.bottom),\n };\n return { anchor, boundary };\n },\n write: (measure) => {\n if (renderVersion !== this.renderVersion || !measure) return;\n const win = this.view.dom.ownerDocument.defaultView ?? window;\n const layout = computeSelectionToolbarLayout({\n anchor: measure.anchor,\n viewport: { width: win.innerWidth, height: win.innerHeight },\n boundary: measure.boundary,\n floating,\n });\n this.menu = createSelectionToolbarElement(this.menuState(), {\n onAction: (id) => this.handleAction(id),\n onBlockType: (type) => this.applyBlockType(type),\n onColor: (value) => this.applyColor(value),\n onHighlight: (value) => this.applyHighlight(value),\n onLinkInput: (field, value) => {\n const next = { ...this.link, [field]: value };\n delete next.error;\n this.link = next;\n },\n onLinkSubmit: () => this.submitLink(),\n onLinkCopy: () => void this.copyLink(),\n onLinkOpen: () => this.openLink(),\n onLinkRemove: () => this.removeLink(),\n onCancelPanel: () => {\n this.panel = \"toolbar\";\n this.renderMenu();\n },\n });\n this.menu.style.left = `${layout.left}px`;\n this.menu.style.top = `${layout.top}px`;\n this.menu.style.maxHeight = `${layout.maxHeight}px`;\n this.menu.dataset.mardoraSelectionPlacement = layout.placement;\n if (this.panel === \"block-type\") {\n const opensDown = layout.placement === \"bottom\";\n const available = opensDown\n ? measure.boundary.bottom - (layout.top + toolbarHeight) - popoverGap\n : layout.top - measure.boundary.top - popoverGap;\n this.menu.style.setProperty(\n \"--mardora-selection-toolbar-popover-max-height\",\n `${Math.max(96, Math.min(blockTypePanelHeight, Math.floor(available)))}px`\n );\n }\n this.view.dom.appendChild(this.menu);\n },\n });\n }\n\n private dispatchResult(result: TextCommandResult): void {\n if (!this.isSavedRangeCurrent()) {\n this.close();\n return;\n }\n\n this.view.dispatch({\n changes: result.changes,\n selection: result.selection,\n scrollIntoView: true,\n });\n this.view.focus();\n this.close();\n }\n\n private isSavedRangeCurrent(): boolean {\n if (!this.savedRange) return false;\n return this.view.state.sliceDoc(this.savedRange.from, this.savedRange.to) === this.savedRange.text;\n }\n\n private handleAction(id: SelectionToolbarActionId): void {\n const range = this.savedRange;\n if (!range) return;\n const doc = this.view.state.doc.toString();\n\n if (id === \"link\") {\n const parsed = parseSelectedLink(range.text);\n this.link = { title: parsed.title || range.text, url: parsed.url, canRemove: parsed.kind === \"markdown-link\" };\n this.panel = \"link\";\n this.renderMenu();\n return;\n }\n\n if (id === \"block-type\") {\n this.panel = \"block-type\";\n this.renderMenu();\n return;\n }\n\n if (id === \"color\") {\n this.panel = \"color\";\n this.renderMenu();\n return;\n }\n\n if (id === \"highlight\") {\n this.panel = \"highlight\";\n this.renderMenu();\n return;\n }\n\n if (id === \"ordered-list\" || id === \"unordered-list\" || id === \"task-list\") {\n const kind = id === \"ordered-list\" ? \"ordered\" : id === \"task-list\" ? \"task\" : \"unordered\";\n this.dispatchResult(buildListChange({ doc, from: range.from, to: range.to, kind }));\n return;\n }\n\n if (id === \"underline\") {\n this.dispatchResult(buildInlineFormatChange({ doc, from: range.from, to: range.to, htmlTag: \"u\" }));\n return;\n }\n\n const marker = id === \"bold\" ? \"**\" : id === \"italic\" ? \"*\" : id === \"strike\" ? \"~~\" : id === \"code\" ? \"`\" : null;\n if (!marker) return;\n const result = buildInlineFormatChange({ doc, from: range.from, to: range.to, marker });\n this.dispatchResult(result);\n }\n\n private applyBlockType(type: SelectionToolbarBlockType): void {\n const range = this.savedRange;\n if (!range) return;\n const level = type === \"text\" ? 0 : Number(type.slice(\"heading-\".length));\n if (level < 0 || level > 6) return;\n this.dispatchResult(\n buildBlockTypeChange({\n doc: this.view.state.doc.toString(),\n from: range.from,\n to: range.to,\n level: level as 0 | 1 | 2 | 3 | 4 | 5 | 6,\n })\n );\n }\n\n private applyColor(value: string | null): void {\n const range = this.savedRange;\n if (!range) return;\n this.dispatchResult(\n buildInlineFormatChange({\n doc: this.view.state.doc.toString(),\n from: range.from,\n to: range.to,\n spanStyle: { property: \"color\", value: value ?? \"\" },\n clear: value === null,\n })\n );\n }\n\n private applyHighlight(value: string | null): void {\n const range = this.savedRange;\n if (!range) return;\n const result = value\n ? buildInlineFormatChange({\n doc: this.view.state.doc.toString(),\n from: range.from,\n to: range.to,\n spanStyle: { property: \"background-color\", value },\n })\n : buildInlineFormatChange({ doc: this.view.state.doc.toString(), from: range.from, to: range.to, marker: \"==\" });\n this.dispatchResult(result);\n }\n\n private submitLink(): void {\n const range = this.savedRange;\n if (!range) return;\n if (!this.link.url || !isValidUrl(this.link.url)) {\n this.link = { ...this.link, error: this.messages.link.invalid };\n this.renderMenu();\n return;\n }\n const title = this.link.title || range.text || this.link.url;\n this.dispatchResult(buildLinkChange({ from: range.from, to: range.to, title, url: this.link.url }));\n }\n\n private removeLink(): void {\n const range = this.savedRange;\n if (!range) return;\n this.dispatchResult(\n buildLinkChange({ from: range.from, to: range.to, title: this.link.title || range.text, url: \"\", remove: true })\n );\n }\n\n private async copyLink(): Promise<void> {\n if (!this.link.url) return;\n await this.view.dom.ownerDocument.defaultView?.navigator.clipboard?.writeText(this.link.url);\n this.link = { ...this.link, copied: true };\n this.renderMenu();\n }\n\n private openLink(): void {\n if (!this.link.url || !isValidUrl(this.link.url)) return;\n this.view.dom.ownerDocument.defaultView?.open(normalizedUrl(this.link.url), \"_blank\", \"noopener,noreferrer\");\n }\n}\n\nexport function selectionToolbar(config: MardoraSelectionToolbarRuntimeConfig = {}): Extension[] {\n if (config.enabled === false) return [];\n const plugin = ViewPlugin.define((view) => new SelectionToolbarViewPlugin(view, config));\n return [\n selectionToolbarTheme,\n plugin,\n Prec.highest(\n EditorView.domEventHandlers({\n keydown(event, view) {\n const value = view.plugin(plugin);\n if (!value || event.key !== \"Escape\") return false;\n const handled = value.closeFromKeyboard();\n if (handled) event.preventDefault();\n return handled;\n },\n })\n ),\n ];\n}\n","import type {\n MardoraHeadingFoldConfig,\n MardoraHeadingFoldLevel,\n ResolvedMardoraHeadingFoldConfig,\n} from \"./types\";\n\nconst minSupportedLevel = 2;\nconst maxSupportedLevel = 5;\n\nfunction clampLevel(level: MardoraHeadingFoldLevel): MardoraHeadingFoldLevel {\n return Math.min(Math.max(level, minSupportedLevel), maxSupportedLevel) as MardoraHeadingFoldLevel;\n}\n\nexport function resolveHeadingFoldConfig(config: MardoraHeadingFoldConfig = {}): ResolvedMardoraHeadingFoldConfig {\n const requestedMinLevel = clampLevel(config.minLevel ?? minSupportedLevel);\n const requestedMaxLevel = clampLevel(config.maxLevel ?? maxSupportedLevel);\n const minLevel = Math.min(requestedMinLevel, requestedMaxLevel) as MardoraHeadingFoldLevel;\n const maxLevel = Math.max(requestedMinLevel, requestedMaxLevel) as MardoraHeadingFoldLevel;\n\n return {\n enabled: config.enabled !== false,\n minLevel,\n maxLevel,\n };\n}\n","import type { EditorState } from \"@codemirror/state\";\nimport { ensureSyntaxTree, syntaxTree } from \"@codemirror/language\";\nimport type { SyntaxNodeRef } from \"@lezer/common\";\nimport { stripMarkdownHeadingText } from \"../table-of-contents\";\nimport { resolveHeadingFoldConfig } from \"./config\";\nimport type { MardoraHeadingFoldConfig, MardoraHeadingFoldLevel, MardoraHeadingFoldRange } from \"./types\";\n\nconst headingPattern = /^ATXHeading([1-6])$/;\nconst headingFoldParseTimeout = 100;\n\ninterface ParsedHeading {\n level: number;\n text: string;\n from: number;\n to: number;\n}\n\nfunction headingLevel(node: SyntaxNodeRef): number | null {\n const match = headingPattern.exec(node.name);\n return match ? Number(match[1]) : null;\n}\n\nfunction canFoldLevel(level: number, minLevel: MardoraHeadingFoldLevel, maxLevel: MardoraHeadingFoldLevel): boolean {\n return level >= minLevel && level <= maxLevel;\n}\n\nfunction collectHeadings(state: EditorState): ParsedHeading[] {\n const headings: ParsedHeading[] = [];\n const tree = ensureSyntaxTree(state, state.doc.length, headingFoldParseTimeout) ?? syntaxTree(state);\n\n tree.iterate({\n enter: (node) => {\n const level = headingLevel(node);\n if (!level) return;\n const text = stripMarkdownHeadingText(state.sliceDoc(node.from, node.to));\n if (!text) return;\n headings.push({ level, text, from: node.from, to: node.to });\n },\n });\n\n return headings;\n}\n\nfunction findFoldEnd(state: EditorState, headings: ParsedHeading[], index: number): number {\n const heading = headings[index]!;\n const nextBoundary = headings.slice(index + 1).find((candidate) => candidate.level <= heading.level);\n if (!nextBoundary) return state.doc.length;\n return state.doc.lineAt(nextBoundary.from).from;\n}\n\nfunction findFoldStart(state: EditorState, heading: ParsedHeading): number {\n const headingLine = state.doc.lineAt(heading.from);\n if (headingLine.number >= state.doc.lines) return headingLine.to;\n return state.doc.line(headingLine.number + 1).from;\n}\n\nexport function extractHeadingFoldRangesFromState(\n state: EditorState,\n config: MardoraHeadingFoldConfig = {}\n): MardoraHeadingFoldRange[] {\n const resolved = resolveHeadingFoldConfig(config);\n if (!resolved.enabled) return [];\n\n const headings = collectHeadings(state);\n const ranges: MardoraHeadingFoldRange[] = [];\n\n headings.forEach((heading, index) => {\n if (!canFoldLevel(heading.level, resolved.minLevel, resolved.maxLevel)) return;\n\n const line = state.doc.lineAt(heading.from);\n const foldFrom = findFoldStart(state, heading);\n const foldTo = findFoldEnd(state, headings, index);\n if (foldTo <= foldFrom) return;\n\n ranges.push({\n level: heading.level as MardoraHeadingFoldLevel,\n text: heading.text,\n headingFrom: heading.from,\n headingTo: heading.to,\n headingLineFrom: line.from,\n headingLineTo: line.to,\n foldFrom,\n foldTo,\n });\n });\n\n return ranges;\n}\n","import { EditorView } from \"@codemirror/view\";\n\nexport const headingFoldTheme = EditorView.baseTheme({\n \".cm-mardora-heading-fold-line\": {\n position: \"relative\",\n },\n\n \".cm-mardora-heading-fold-toggle\": {\n alignItems: \"center\",\n background: \"transparent\",\n border: \"0\",\n borderRadius: \"4px\",\n color: \"var(--mardora-heading-fold-muted, #a1a1aa)\",\n cursor: \"pointer\",\n display: \"inline-flex\",\n font: \"600 0.7rem/1 var(--font-sans, sans-serif)\",\n height: \"1rem\",\n justifyContent: \"center\",\n marginLeft: \"-2.55rem\",\n marginRight: \"0.45rem\",\n padding: \"0\",\n transform: \"translateY(-0.52em)\",\n verticalAlign: \"middle\",\n width: \"2rem\",\n },\n\n \".cm-mardora-heading-fold-toggle:hover, .cm-mardora-heading-fold-toggle:focus-visible\": {\n color: \"var(--mardora-heading-fold-active, #52525b)\",\n },\n\n \".cm-mardora-heading-fold-toggle:focus-visible\": {\n outline: \"2px solid var(--mardora-heading-fold-focus, #a1a1aa)\",\n outlineOffset: \"2px\",\n },\n\n \".cm-mardora-heading-fold-level\": {\n display: \"inline-flex\",\n },\n\n \".cm-mardora-heading-fold-arrow\": {\n display: \"none\",\n height: \"0.55rem\",\n position: \"relative\",\n width: \"0.55rem\",\n },\n\n \".cm-mardora-heading-fold-arrow::before\": {\n borderBottom: \"1.5px solid currentColor\",\n borderRight: \"1.5px solid currentColor\",\n content: '\"\"',\n display: \"block\",\n height: \"0.28rem\",\n left: \"0.08rem\",\n position: \"absolute\",\n top: \"0.03rem\",\n transform: \"rotate(45deg)\",\n width: \"0.28rem\",\n },\n\n \".cm-mardora-heading-fold-toggle[data-mardora-heading-fold-folded='true'] .cm-mardora-heading-fold-arrow::before\": {\n left: \"0.03rem\",\n top: \"0.11rem\",\n transform: \"rotate(-45deg)\",\n },\n\n \".cm-mardora-heading-fold-line:hover .cm-mardora-heading-fold-level, .cm-mardora-heading-fold-line-active .cm-mardora-heading-fold-level, .cm-mardora-heading-fold-toggle:hover .cm-mardora-heading-fold-level, .cm-mardora-heading-fold-toggle:focus-visible .cm-mardora-heading-fold-level, .cm-mardora-heading-fold-toggle[data-mardora-heading-fold-folded='true'] .cm-mardora-heading-fold-level\": {\n display: \"none\",\n },\n\n \".cm-mardora-heading-fold-line:hover .cm-mardora-heading-fold-arrow, .cm-mardora-heading-fold-line-active .cm-mardora-heading-fold-arrow, .cm-mardora-heading-fold-toggle:hover .cm-mardora-heading-fold-arrow, .cm-mardora-heading-fold-toggle:focus-visible .cm-mardora-heading-fold-arrow, .cm-mardora-heading-fold-toggle[data-mardora-heading-fold-folded='true'] .cm-mardora-heading-fold-arrow\": {\n display: \"inline-block\",\n },\n\n \".cm-mardora-heading-fold-placeholder\": {\n color: \"var(--mardora-heading-fold-muted, #a1a1aa)\",\n font: \"600 0.9rem/1.4 var(--font-sans, sans-serif)\",\n padding: \"0.1rem 0 0.35rem 0.25rem\",\n },\n\n \"&dark .cm-mardora-heading-fold-toggle, &dark .cm-mardora-heading-fold-placeholder\": {\n \"--mardora-heading-fold-muted\": \"#71717a\",\n \"--mardora-heading-fold-active\": \"#d4d4d8\",\n \"--mardora-heading-fold-focus\": \"#71717a\",\n },\n});\n","import {\n Facet,\n StateEffect,\n StateField,\n type EditorState,\n type Extension,\n type Range,\n type Transaction,\n} from \"@codemirror/state\";\nimport { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate, WidgetType } from \"@codemirror/view\";\nimport { extractHeadingFoldRangesFromState } from \"./extract\";\nimport { headingFoldTheme } from \"./theme\";\nimport type { MardoraHeadingFoldConfig, MardoraHeadingFoldRange } from \"./types\";\n\nconst toggleHeadingFoldEffect = StateEffect.define<number>();\n\nconst headingFoldConfigFacet = Facet.define<MardoraHeadingFoldConfig, MardoraHeadingFoldConfig>({\n combine: (values) => values[values.length - 1] ?? {},\n});\n\ninterface HeadingFoldState {\n foldedHeadings: readonly number[];\n decorations: DecorationSet;\n}\n\nfunction nextFoldedHeadings(value: readonly number[], transaction: Transaction): readonly number[] {\n const next = new Set<number>();\n\n if (transaction.docChanged) {\n for (const position of value) {\n next.add(transaction.changes.mapPos(position, 1));\n }\n } else {\n for (const position of value) next.add(position);\n }\n\n for (const effect of transaction.effects) {\n if (!effect.is(toggleHeadingFoldEffect)) continue;\n if (next.has(effect.value)) {\n next.delete(effect.value);\n } else {\n next.add(effect.value);\n }\n }\n\n return Array.from(next).sort((a, b) => a - b);\n}\n\nclass HeadingFoldWidget extends WidgetType {\n constructor(\n private readonly range: MardoraHeadingFoldRange,\n private readonly folded: boolean\n ) {\n super();\n }\n\n override eq(other: HeadingFoldWidget): boolean {\n return other.range.headingFrom === this.range.headingFrom && other.folded === this.folded;\n }\n\n override toDOM(): HTMLElement {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"cm-mardora-heading-fold-toggle\";\n button.setAttribute(\"aria-label\", `${this.folded ? \"Expand\" : \"Collapse\"} H${this.range.level} section`);\n button.dataset.mardoraHeadingFoldFolded = String(this.folded);\n button.dataset.mardoraHeadingFoldFrom = String(this.range.headingFrom);\n\n const level = document.createElement(\"span\");\n level.className = \"cm-mardora-heading-fold-level\";\n level.textContent = `H${this.range.level}`;\n\n const arrow = document.createElement(\"span\");\n arrow.className = \"cm-mardora-heading-fold-arrow\";\n arrow.setAttribute(\"aria-hidden\", \"true\");\n\n button.append(level, arrow);\n\n return button;\n }\n\n override ignoreEvent(event: Event): boolean {\n return event.type === \"mousedown\" || event.type === \"click\";\n }\n}\n\nclass FoldPlaceholderWidget extends WidgetType {\n override eq(other: FoldPlaceholderWidget): boolean {\n return other instanceof FoldPlaceholderWidget;\n }\n\n override toDOM(): HTMLElement {\n const placeholder = document.createElement(\"span\");\n placeholder.className = \"cm-mardora-heading-fold-placeholder\";\n placeholder.setAttribute(\"aria-hidden\", \"true\");\n placeholder.textContent = \"...\";\n return placeholder;\n }\n}\n\nfunction selectionTouchesHeading(state: EditorState, range: MardoraHeadingFoldRange): boolean {\n return state.selection.ranges.some((selection) => {\n const line = state.doc.lineAt(selection.head);\n return line.from === range.headingLineFrom;\n });\n}\n\nfunction readHeadingFoldButtonPosition(target: EventTarget | null, view: EditorView): number | null {\n if (!(target instanceof Element)) return null;\n const button = target.closest(\".cm-mardora-heading-fold-toggle\");\n if (!(button instanceof HTMLElement) || !view.dom.contains(button)) return null;\n const position = Number(button.dataset.mardoraHeadingFoldFrom);\n return Number.isFinite(position) ? position : null;\n}\n\nfunction toggleHeadingFoldAt(view: EditorView, position: number): void {\n view.dispatch({ effects: toggleHeadingFoldEffect.of(position) });\n view.focus();\n}\n\nconst headingFoldDomHandlers = EditorView.domEventHandlers({\n mousedown: (event, view) => {\n if (event.button !== 0) return false;\n const position = readHeadingFoldButtonPosition(event.target, view);\n if (position === null) return false;\n event.preventDefault();\n event.stopPropagation();\n toggleHeadingFoldAt(view, position);\n return true;\n },\n click: (event, view) => {\n if (event.detail !== 0) return false;\n const position = readHeadingFoldButtonPosition(event.target, view);\n if (position === null) return false;\n event.preventDefault();\n event.stopPropagation();\n toggleHeadingFoldAt(view, position);\n return true;\n },\n});\n\nexport function __buildHeadingFoldDecorations(\n state: EditorState,\n config: MardoraHeadingFoldConfig,\n foldedHeadings: readonly number[]\n): DecorationSet {\n const folded = new Set(foldedHeadings);\n const decorations: Range<Decoration>[] = [];\n\n for (const range of extractHeadingFoldRangesFromState(state, config)) {\n const isFolded = folded.has(range.headingFrom);\n const active = selectionTouchesHeading(state, range);\n const lineClass = [\n \"cm-mardora-heading-fold-line\",\n active ? \"cm-mardora-heading-fold-line-active\" : \"\",\n isFolded ? \"cm-mardora-heading-fold-line-folded\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n decorations.push(Decoration.line({ class: lineClass }).range(range.headingLineFrom));\n decorations.push(\n Decoration.widget({\n widget: new HeadingFoldWidget(range, isFolded),\n side: -1,\n }).range(range.headingFrom)\n );\n\n if (isFolded) {\n decorations.push(\n Decoration.widget({\n widget: new FoldPlaceholderWidget(),\n side: 1,\n mardoraHeadingFoldRole: \"placeholder\",\n }).range(range.headingTo)\n );\n decorations.push(\n Decoration.replace({\n mardoraHeadingFoldRole: \"hidden-content\",\n }).range(range.foldFrom, range.foldTo)\n );\n }\n }\n\n return Decoration.set(decorations, true);\n}\n\nconst headingFoldStateField = StateField.define<HeadingFoldState>({\n create: (state) => {\n const foldedHeadings: readonly number[] = [];\n return {\n foldedHeadings,\n decorations: __buildHeadingFoldDecorations(state, state.facet(headingFoldConfigFacet), foldedHeadings),\n };\n },\n update: (value, transaction) => {\n const foldedHeadings = nextFoldedHeadings(value.foldedHeadings, transaction);\n return {\n foldedHeadings,\n decorations: __buildHeadingFoldDecorations(transaction.state, transaction.state.facet(headingFoldConfigFacet), foldedHeadings),\n };\n },\n provide: (field) => EditorView.decorations.from(field, (value) => value.decorations),\n});\n\nclass HeadingFoldViewPlugin {\n private suppressNextMouseDown = false;\n\n constructor(\n private readonly view: EditorView,\n _config: MardoraHeadingFoldConfig\n ) {\n void _config;\n this.view.dom.addEventListener(\"pointerdown\", this.handlePointerDown, true);\n this.view.dom.addEventListener(\"mousedown\", this.handleMouseDown, true);\n this.view.dom.addEventListener(\"click\", this.handleClick, true);\n }\n\n update(_update: ViewUpdate): void {\n void _update;\n }\n\n destroy(): void {\n this.view.dom.removeEventListener(\"pointerdown\", this.handlePointerDown, true);\n this.view.dom.removeEventListener(\"mousedown\", this.handleMouseDown, true);\n this.view.dom.removeEventListener(\"click\", this.handleClick, true);\n }\n\n private readonly handlePointerDown = (event: PointerEvent): void => {\n if (event.button !== 0) return;\n if (readHeadingFoldButtonPosition(event.target, this.view) !== null) this.suppressNextMouseDown = true;\n this.handleToggleEvent(event);\n };\n\n private readonly handleMouseDown = (event: MouseEvent): void => {\n if (event.button !== 0) return;\n if (this.suppressNextMouseDown) {\n this.suppressNextMouseDown = false;\n return;\n }\n this.handleToggleEvent(event);\n };\n\n private readonly handleClick = (event: MouseEvent): void => {\n if (event.detail !== 0) return;\n this.handleToggleEvent(event);\n };\n\n private handleToggleEvent(event: MouseEvent | PointerEvent): void {\n const position = readHeadingFoldButtonPosition(event.target, this.view);\n if (position === null) return;\n event.preventDefault();\n event.stopPropagation();\n toggleHeadingFoldAt(this.view, position);\n }\n}\n\nexport function headingFold(config: MardoraHeadingFoldConfig = {}): Extension[] {\n if (config.enabled === false) return [];\n\n return [\n headingFoldConfigFacet.of(config),\n headingFoldStateField,\n headingFoldTheme,\n headingFoldDomHandlers,\n ViewPlugin.define((view) => new HeadingFoldViewPlugin(view, config)),\n ];\n}\n","import { Extension, Prec } from \"@codemirror/state\";\nimport { EditorView, highlightActiveLine, KeyBinding, keymap } from \"@codemirror/view\";\nimport { markdown, markdownKeymap, markdownLanguage } from \"@codemirror/lang-markdown\";\nimport type { MarkdownConfig } from \"@lezer/markdown\";\nimport { MardoraPlugin, PluginContext } from \"./plugin\";\nimport { createMardoraViewExtension } from \"./view-plugin\";\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from \"@codemirror/commands\";\nimport { indentOnInput } from \"@codemirror/language\";\nimport { languages } from \"@codemirror/language-data\";\nimport { ThemeEnum } from \"./utils\";\nimport { markdownResetExtension } from \"./theme\";\nimport type { MardoraSlashCommandsConfig } from \"./slash\";\nimport { slashCommands } from \"./slash\";\nimport type { MardoraAttachmentsConfig } from \"./attachments\";\nimport { attachments } from \"./attachments\";\nimport type { MardoraSelectionToolbarConfig } from \"./selection-toolbar\";\nimport { selectionToolbar } from \"./selection-toolbar\";\nimport type { MardoraTocConfig } from \"./table-of-contents\";\nimport { tableOfContents } from \"./table-of-contents\";\nimport type { MardoraHeadingFoldConfig } from \"./heading-fold\";\nimport { headingFold } from \"./heading-fold\";\nimport type { MardoraI18nConfig, MardoraLocale } from \"./i18n\";\nimport { resolveMardoraLocale } from \"./i18n\";\n\n/**\n * MardoraNode: represents a node in the markdown tree\n *\n * Useful for debugging and development\n */\nexport type MardoraNode = {\n from: number;\n to: number;\n name: string;\n children: MardoraNode[];\n isSelected: boolean;\n};\n\n/**\n * Configuration options for the mardora editor\n */\nexport interface MardoraConfig {\n /** Theme */\n theme?: ThemeEnum;\n\n /** Editor UI locale. Defaults to Simplified Chinese. */\n locale?: MardoraLocale;\n\n /** Internationalization configuration for editor-owned UI text */\n i18n?: MardoraI18nConfig;\n\n /** Weather to load base styles */\n baseStyles?: boolean;\n\n /** Plugins to load */\n plugins?: MardoraPlugin[];\n\n /** Additional markdown extensions for the parser */\n markdown?: MarkdownConfig[];\n\n /** Additional CodeMirror extensions */\n extensions?: Extension[];\n\n /** Additional keybindings */\n keymap?: KeyBinding[];\n\n /** Disable the built-in view plugin (for raw markdown mode) */\n disableViewPlugin?: boolean;\n\n /** Enable default keybindings */\n defaultKeybindings?: boolean;\n\n /** Enable history */\n history?: boolean;\n\n /** Enable indent with tab */\n indentWithTab?: boolean;\n\n /** Highlight active line */\n highlightActiveLine?: boolean;\n\n /** Line wrapping in raw markdown mode */\n lineWrapping?: boolean;\n\n /** Callback to receive the nodes on every update */\n onNodesChange?: (nodes: MardoraNode[]) => void;\n\n /** Slash command menu configuration */\n slashCommands?: MardoraSlashCommandsConfig;\n\n /** Browser attachment upload configuration */\n attachments?: MardoraAttachmentsConfig;\n\n /** Selected text floating toolbar configuration */\n selectionToolbar?: MardoraSelectionToolbarConfig;\n\n /** Table of contents configuration */\n toc?: MardoraTocConfig;\n\n /** Heading section folding configuration */\n headingFold?: MardoraHeadingFoldConfig;\n}\n\n/**\n * Creates a mardora editor extension bundle for CodeMirror 6\n *\n * @param config - Configuration options for the editor\n * @returns CodeMirror Extension that can be added to EditorState\n *\n * @example\n * ```ts\n * import { EditorView } from '@codemirror/view';\n * import { EditorState } from '@codemirror/state';\n * import { mardora } from 'mardora';\n *\n * const view = new EditorView({\n * state: EditorState.create({\n * doc: '# Hello mardora',\n * extensions: [mardora()]\n * }),\n * parent: document.getElementById('editor')\n * });\n * ```\n */\nexport function mardora(config: MardoraConfig = {}): Extension[] {\n const {\n locale: configLocale,\n i18n: configI18n = {},\n theme: configTheme = ThemeEnum.AUTO,\n baseStyles = true,\n plugins = [],\n extensions = [],\n keymap: configKeymap = [],\n disableViewPlugin = false,\n defaultKeybindings = true,\n history: configHistory = true,\n indentWithTab: configIndentWithTab = true,\n highlightActiveLine: configHighlightActiveLine = true,\n lineWrapping: configLineWrapping = true,\n onNodesChange: configOnNodesChange = undefined,\n slashCommands: configSlashCommands = { enabled: true },\n attachments: configAttachments = { enabled: false },\n selectionToolbar: configSelectionToolbar = { enabled: true },\n toc: configToc = { enabled: true },\n headingFold: configHeadingFold = { enabled: true },\n } = config;\n const resolvedLocale = resolveMardoraLocale(configSlashCommands.locale ?? configI18n.locale ?? configLocale);\n\n const allPlugins = [...plugins];\n\n // Collect all extensions from plugins\n const pluginExtensions: Extension[] = [];\n const pluginKeymaps: KeyBinding[] = [];\n const markdownExtensions: MarkdownConfig[] = [];\n\n // Create plugin context for lifecycle methods\n const pluginContext: PluginContext = { config };\n\n if (!disableViewPlugin) {\n // Process each plugin\n for (const plugin of allPlugins) {\n // Call onRegister lifecycle hook\n plugin.onRegister(pluginContext);\n\n // Collect extensions via class method\n const exts = plugin.getExtensions();\n if (exts.length > 0) {\n pluginExtensions.push(...exts);\n }\n\n // Collect keymaps via class method\n const keys = plugin.getKeymap();\n if (keys.length > 0) {\n pluginKeymaps.push(...keys);\n }\n\n // Collect theme via class method\n const theme = plugin.theme;\n if (baseStyles && theme && typeof theme === \"function\") {\n pluginExtensions.push(EditorView.theme(theme(configTheme)));\n }\n\n // Collect markdown parser extensions via class method\n const md = plugin.getMarkdownConfig();\n if (md) {\n markdownExtensions.push(md);\n }\n }\n }\n\n // Add config-level markdown extensions\n if (config.markdown) {\n markdownExtensions.push(...config.markdown);\n }\n\n // Build the base markdown language support\n const markdownSupport = markdown({\n base: markdownLanguage,\n codeLanguages: languages,\n extensions: markdownExtensions,\n addKeymap: true,\n completeHTMLTags: true,\n pasteURLAsLink: true,\n });\n\n // Core CodeMirror extensions (in order)\n const baseExtensions: Extension[] = [\n ...(defaultKeybindings ? [keymap.of(defaultKeymap)] : []),\n ...(configHistory ? [history(), keymap.of(historyKeymap)] : []),\n ...(configIndentWithTab ? [indentOnInput(), keymap.of([indentWithTab])] : []),\n ...(configHighlightActiveLine && disableViewPlugin ? [highlightActiveLine()] : []),\n ];\n\n // mardora extensions (pass plugins for decoration support)\n const mardoraExtensions: Extension[] = [];\n if (!disableViewPlugin) {\n mardoraExtensions.push(createMardoraViewExtension(configTheme, baseStyles, allPlugins, configOnNodesChange));\n mardoraExtensions.push(Prec.highest(markdownResetExtension));\n }\n if (!disableViewPlugin || configLineWrapping) mardoraExtensions.push(EditorView.lineWrapping);\n\n // Compose all extensions together\n const composedExtensions: Extension[] = [\n // Core markdown support (highest priority)\n Prec.high(markdownSupport),\n Prec.high(keymap.of(markdownKeymap)),\n\n // mardora view plugin for rich rendering\n mardoraExtensions,\n\n // Core CodeMirror extensions\n baseExtensions,\n\n // Mardora editor commands and browser attachments\n slashCommands({\n ...configSlashCommands,\n inheritedLocale: resolvedLocale,\n attachmentUploader: configAttachments.uploader,\n }),\n attachments(configAttachments),\n selectionToolbar({\n ...configSelectionToolbar,\n inheritedLocale: resolvedLocale,\n }),\n tableOfContents(configToc),\n ...(!disableViewPlugin ? headingFold(configHeadingFold) : []),\n\n // Plugin extensions & keymaps\n pluginExtensions,\n pluginKeymaps.length > 0 ? keymap.of(pluginKeymaps) : [],\n\n // Config keymaps & extensions\n configKeymap.length > 0 ? keymap.of(configKeymap) : [],\n extensions,\n ];\n\n return composedExtensions;\n}\n","import { Decoration, EditorView, KeyBinding, ViewUpdate } from \"@codemirror/view\";\nimport { Extension, Range } from \"@codemirror/state\";\nimport { MarkdownConfig } from \"@lezer/markdown\";\nimport { SyntaxNode } from \"@lezer/common\";\nimport { MardoraConfig } from \"./mardora\";\nimport { createTheme, ThemeEnum, ThemeStyle } from \"./utils\";\nimport { StyleModule } from \"style-mod\";\n\n/**\n * Context passed to plugin lifecycle methods\n */\nexport interface PluginContext {\n /** Current configuration */\n readonly config: MardoraConfig;\n}\n\n/**\n * Plugin configuration schema\n */\nexport interface PluginConfig {\n [key: string]: unknown;\n}\n\n/**\n * Decoration context passed to plugin decoration builders\n * Provides access to view state and decoration collection\n */\nexport interface DecorationContext {\n /** The EditorView instance (readonly) */\n readonly view: EditorView;\n\n /** Array to push decorations into (will be sorted automatically) */\n readonly decorations: Range<Decoration>[];\n\n /** Check if selection overlaps with a range (to show raw markdown) */\n selectionOverlapsRange(from: number, to: number): boolean;\n\n /** Check if cursor is within a range */\n cursorInRange(from: number, to: number): boolean;\n}\n\n/**\n * Abstract base class for all mardora plugins\n *\n * Implements OOP principles:\n * - Abstraction: abstract name/version must be implemented by subclasses\n * - Encapsulation: private _config, protected _context\n * - Inheritance: specialized plugin classes can extend this\n */\nexport abstract class MardoraPlugin {\n /** Unique plugin identifier (abstract - must be implemented) */\n abstract readonly name: string;\n\n /** Plugin version (abstract - must be implemented) */\n abstract readonly version: string;\n\n /** Decoration priority (higher = applied later) */\n readonly decorationPriority: number = 100;\n\n /** Plugin dependencies - names of required plugins */\n readonly dependencies: string[] = [];\n\n /** Node types this plugin handles for decorations and preview rendering */\n readonly requiredNodes: readonly string[] = [];\n\n /** Private configuration storage */\n private _config: PluginConfig = {};\n\n /** Protected context - accessible to subclasses */\n protected _context: PluginContext | null = null;\n\n /** Get plugin configuration */\n get config(): PluginConfig {\n return this._config;\n }\n\n /** Set plugin configuration */\n set config(value: PluginConfig) {\n this._config = value;\n }\n\n /** Get plugin context */\n get context(): PluginContext | null {\n return this._context;\n }\n\n /** Plugin theme */\n get theme(): (theme: ThemeEnum) => ThemeStyle {\n return createTheme({\n default: {},\n dark: {},\n light: {},\n });\n }\n\n // ============================================\n // EXTENSION METHODS (overridable by subclasses)\n // ============================================\n\n /**\n * Return CodeMirror extensions for this plugin\n * Override to provide custom extensions\n */\n getExtensions(): Extension[] {\n return [];\n }\n\n /**\n * Return markdown parser extensions\n * Override to extend markdown parsing\n */\n getMarkdownConfig(): MarkdownConfig | null {\n return null;\n }\n\n /**\n * Return keybindings for this plugin\n * Override to add custom keyboard shortcuts\n */\n getKeymap(): KeyBinding[] {\n return [];\n }\n\n // ============================================\n // DECORATION METHODS (overridable by subclasses)\n // ============================================\n\n /**\n * Build decorations for the current view state\n * Override to contribute decorations to the editor\n *\n * @param ctx - Decoration context with view and decoration array\n */\n buildDecorations(_ctx: DecorationContext): void {\n void _ctx;\n // Default implementation does nothing\n // Subclasses override to add decorations\n }\n\n // ============================================\n // LIFECYCLE HOOKS (overridable by subclasses)\n // ============================================\n\n /**\n * Called when plugin is registered with mardora\n * Override to perform initialization\n *\n * @param context - Plugin context with configuration\n */\n onRegister(context: PluginContext): void | Promise<void> {\n this._context = context;\n }\n\n /**\n * Called when plugin is unregistered\n * Override to perform cleanup\n */\n onUnregister(): void {\n this._context = null;\n }\n\n /**\n * Called when EditorView is created and ready\n * Override to perform view-specific initialization\n *\n * @param view - The EditorView instance\n */\n onViewReady(_view: EditorView): void {\n void _view;\n // Default implementation does nothing\n }\n\n /**\n * Called on view updates (document changes, selection changes, etc.)\n * Override to react to editor changes\n *\n * @param update - The ViewUpdate with change information\n */\n onViewUpdate(_update: ViewUpdate): void {\n void _update;\n // Default implementation does nothing\n }\n\n // ============================================\n // PROTECTED UTILITIES (for subclasses)\n // ============================================\n\n /**\n * Helper to get current editor state\n * @param view - The EditorView instance\n */\n protected getState(view: EditorView) {\n return view.state;\n }\n\n /**\n * Helper to get current document\n * @param view - The EditorView instance\n */\n protected getDocument(view: EditorView) {\n return view.state.doc;\n }\n\n // ============================================\n // PREVIEW RENDERING METHODS (for mardora/preview)\n // ============================================\n\n /**\n * Render a syntax node to HTML for preview mode\n * Override to provide custom HTML rendering for specific node types\n *\n * @param node - The syntax node to render\n * @param children - Pre-rendered children HTML\n * @param ctx - Preview context with document and utilities\n * @returns HTML string to use, or null to use default rendering\n */\n renderToHTML?(\n node: SyntaxNode,\n children: string,\n ctx: {\n doc: string;\n sliceDoc(from: number, to: number): string;\n sanitize(html: string): string;\n syntaxHighlighters?: readonly import(\"@lezer/highlight\").Highlighter[];\n }\n ): string | null | Promise<string | null>;\n\n /**\n * Return the document position consumed by preview rendering.\n * Plugins can use this when a rendered node owns trailing syntax that is\n * outside the Lezer node range, such as image attributes.\n */\n getPreviewConsumedTo?(\n node: SyntaxNode,\n ctx: {\n doc: string;\n sliceDoc(from: number, to: number): string;\n }\n ): number | null;\n\n /**\n * Get CSS styles for preview mode\n * Override to provide custom CSS for preview rendering\n *\n * @param theme - Current theme enum\n * @returns CSS string for preview styles\n */\n getPreviewStyles(theme: ThemeEnum, wrapperClass: string): string {\n const themeStyles = this.theme(theme);\n return this.transformToCss(themeStyles, wrapperClass);\n }\n\n /**\n * Transform ThemeStyle object to CSS string for preview\n * Uses cssClassMap to convert CM selectors to semantic selectors\n */\n protected transformToCss(themeStyles: ThemeStyle, wrapperClass: string): string {\n const styleMod = new StyleModule(themeStyles, {\n finish: (sel) => {\n return `.${wrapperClass} ${sel}`;\n },\n });\n return styleMod.getRules();\n }\n}\n\n/**\n * Base class for plugins that primarily contribute decorations\n * Extends MardoraPlugin with decoration-focused defaults\n */\nexport abstract class DecorationPlugin extends MardoraPlugin {\n /**\n * Decoration priority - lower than default for decoration plugins\n * Override to customize\n */\n override decorationPriority = 50;\n\n /**\n * Subclasses must implement this to provide decorations\n * @param ctx - Decoration context\n */\n abstract override buildDecorations(ctx: DecorationContext): void;\n}\n\n/**\n * Base class for plugins that add syntax/parser extensions\n * Extends MardoraPlugin with syntax-focused requirements\n */\nexport abstract class SyntaxPlugin extends MardoraPlugin {\n /**\n * Subclasses must implement this to provide markdown config\n */\n abstract override getMarkdownConfig(): MarkdownConfig;\n}\n"]}