@editora/core 1.0.1 → 1.0.2

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 (121) hide show
  1. package/README.md +9 -0
  2. package/dist/A11yCheckerPlugin.native-CZKpi3uF.mjs +475 -0
  3. package/dist/A11yCheckerPlugin.native-CZKpi3uF.mjs.map +1 -0
  4. package/dist/AnchorPlugin.native-7es9PVZ9.mjs +340 -0
  5. package/dist/AnchorPlugin.native-7es9PVZ9.mjs.map +1 -0
  6. package/dist/BackgroundColorPlugin.native-Dip5uqTg.mjs +449 -0
  7. package/dist/BackgroundColorPlugin.native-Dip5uqTg.mjs.map +1 -0
  8. package/dist/BlockquotePlugin.native-JFmOLsxN.mjs +48 -0
  9. package/dist/BlockquotePlugin.native-JFmOLsxN.mjs.map +1 -0
  10. package/dist/BoldPlugin.native-BAzzoqU5.mjs +45 -0
  11. package/dist/BoldPlugin.native-BAzzoqU5.mjs.map +1 -0
  12. package/dist/CapitalizationPlugin.native-DOMsh5R7.mjs +79 -0
  13. package/dist/CapitalizationPlugin.native-DOMsh5R7.mjs.map +1 -0
  14. package/dist/ChecklistPlugin.native-Dccs3nLe.mjs +153 -0
  15. package/dist/ChecklistPlugin.native-Dccs3nLe.mjs.map +1 -0
  16. package/dist/ClearFormattingPlugin.native-BZPDHswo.mjs +27 -0
  17. package/dist/ClearFormattingPlugin.native-BZPDHswo.mjs.map +1 -0
  18. package/dist/CodePlugin.native-DD9xFIid.mjs +1679 -0
  19. package/dist/CodePlugin.native-DD9xFIid.mjs.map +1 -0
  20. package/dist/CodeSamplePlugin.native-DMbEdO9j.mjs +326 -0
  21. package/dist/CodeSamplePlugin.native-DMbEdO9j.mjs.map +1 -0
  22. package/dist/CommentsPlugin.native-2zQV8Ia4.mjs +473 -0
  23. package/dist/CommentsPlugin.native-2zQV8Ia4.mjs.map +1 -0
  24. package/dist/DirectionPlugin.native-Be7wCzkI.mjs +59 -0
  25. package/dist/DirectionPlugin.native-Be7wCzkI.mjs.map +1 -0
  26. package/dist/DocumentManagerPlugin.native-BvZL5CSG.mjs +116 -0
  27. package/dist/DocumentManagerPlugin.native-BvZL5CSG.mjs.map +1 -0
  28. package/dist/EmbedIframePlugin.native-ifr9KLdN.mjs +461 -0
  29. package/dist/EmbedIframePlugin.native-ifr9KLdN.mjs.map +1 -0
  30. package/dist/EmojisPlugin.native-D6mJSnSR.mjs +1033 -0
  31. package/dist/EmojisPlugin.native-D6mJSnSR.mjs.map +1 -0
  32. package/dist/FontFamilyPlugin.native-BzS_9qbM.mjs +106 -0
  33. package/dist/FontFamilyPlugin.native-BzS_9qbM.mjs.map +1 -0
  34. package/dist/FontSizePlugin.native-DkLMLPue.mjs +186 -0
  35. package/dist/FontSizePlugin.native-DkLMLPue.mjs.map +1 -0
  36. package/dist/FootnotePlugin.native-BciVc9W6.mjs +128 -0
  37. package/dist/FootnotePlugin.native-BciVc9W6.mjs.map +1 -0
  38. package/dist/FullscreenPlugin.native-ChXyxeNw.mjs +77 -0
  39. package/dist/FullscreenPlugin.native-ChXyxeNw.mjs.map +1 -0
  40. package/dist/HeadingPlugin.native-DrLYwQnQ.mjs +64 -0
  41. package/dist/HeadingPlugin.native-DrLYwQnQ.mjs.map +1 -0
  42. package/dist/HistoryPlugin.native-DoDRifCf.mjs +89 -0
  43. package/dist/HistoryPlugin.native-DoDRifCf.mjs.map +1 -0
  44. package/dist/IndentPlugin.native-CbFugPoi.mjs +133 -0
  45. package/dist/IndentPlugin.native-CbFugPoi.mjs.map +1 -0
  46. package/dist/ItalicPlugin.native-CQjjDyUL.mjs +43 -0
  47. package/dist/ItalicPlugin.native-CQjjDyUL.mjs.map +1 -0
  48. package/dist/LineHeightPlugin.native-CWQT2FIa.mjs +73 -0
  49. package/dist/LineHeightPlugin.native-CWQT2FIa.mjs.map +1 -0
  50. package/dist/LinkPlugin.native-BdAOV-iu.mjs +206 -0
  51. package/dist/LinkPlugin.native-BdAOV-iu.mjs.map +1 -0
  52. package/dist/ListPlugin.native-CLFU5AUQ.mjs +59 -0
  53. package/dist/ListPlugin.native-CLFU5AUQ.mjs.map +1 -0
  54. package/dist/MathPlugin.native-DE_ii-LA.mjs +182 -0
  55. package/dist/MathPlugin.native-DE_ii-LA.mjs.map +1 -0
  56. package/dist/MediaManagerPlugin.native-DaYFDzNM.mjs +533 -0
  57. package/dist/MediaManagerPlugin.native-DaYFDzNM.mjs.map +1 -0
  58. package/dist/MergeTagPlugin.native-CrxyThyn.mjs +178 -0
  59. package/dist/MergeTagPlugin.native-CrxyThyn.mjs.map +1 -0
  60. package/dist/PageBreakPlugin.native-DDjcDyRW.mjs +172 -0
  61. package/dist/PageBreakPlugin.native-DDjcDyRW.mjs.map +1 -0
  62. package/dist/PreviewPlugin.native-DBvfpmIv.mjs +322 -0
  63. package/dist/PreviewPlugin.native-DBvfpmIv.mjs.map +1 -0
  64. package/dist/PrintPlugin.native-BUpm52VJ.mjs +311 -0
  65. package/dist/PrintPlugin.native-BUpm52VJ.mjs.map +1 -0
  66. package/dist/SpecialCharactersPlugin.native-x7a2SWXc.mjs +731 -0
  67. package/dist/SpecialCharactersPlugin.native-x7a2SWXc.mjs.map +1 -0
  68. package/dist/SpellCheckPlugin.native-B7yTh0iE.mjs +465 -0
  69. package/dist/SpellCheckPlugin.native-B7yTh0iE.mjs.map +1 -0
  70. package/dist/StrikethroughPlugin.native-ChaZLaXw.mjs +43 -0
  71. package/dist/StrikethroughPlugin.native-ChaZLaXw.mjs.map +1 -0
  72. package/dist/TablePlugin.native-EEWXn1-s.mjs +491 -0
  73. package/dist/TablePlugin.native-EEWXn1-s.mjs.map +1 -0
  74. package/dist/TemplatePlugin.native-BlSn1c9h.mjs +564 -0
  75. package/dist/TemplatePlugin.native-BlSn1c9h.mjs.map +1 -0
  76. package/dist/TextAlignmentPlugin.native-CQIs1m7R.mjs +97 -0
  77. package/dist/TextAlignmentPlugin.native-CQIs1m7R.mjs.map +1 -0
  78. package/dist/TextColorPlugin.native-D6SmTglm.mjs +432 -0
  79. package/dist/TextColorPlugin.native-D6SmTglm.mjs.map +1 -0
  80. package/dist/UnderlinePlugin.native-QpIcK4L2.mjs +35 -0
  81. package/dist/UnderlinePlugin.native-QpIcK4L2.mjs.map +1 -0
  82. package/dist/documentManager-irzj9n3V.mjs +37627 -0
  83. package/dist/documentManager-irzj9n3V.mjs.map +1 -0
  84. package/dist/editorContainerHelpers-C7kdWnS0.mjs +27 -0
  85. package/dist/editorContainerHelpers-C7kdWnS0.mjs.map +1 -0
  86. package/dist/editora.min.js +14 -12
  87. package/dist/editora.min.js.map +1 -1
  88. package/dist/editora.umd.js +14 -12
  89. package/dist/editora.umd.js.map +1 -1
  90. package/dist/index-BF5RBhL9.js +4 -0
  91. package/dist/index-BF5RBhL9.js.map +1 -0
  92. package/dist/{index-BS4zT-KN.mjs → index-BPsf460l.mjs} +286 -162
  93. package/dist/index-BPsf460l.mjs.map +1 -0
  94. package/dist/index.cjs.js +3 -3
  95. package/dist/index.cjs.js.map +1 -1
  96. package/dist/index.es-CuicffkQ.mjs +6665 -0
  97. package/dist/index.es-CuicffkQ.mjs.map +1 -0
  98. package/dist/index.esm.js +117 -112
  99. package/dist/index.esm.js.map +1 -1
  100. package/dist/plugin-loader.js +55 -0
  101. package/dist/plugin-loader.js.map +1 -0
  102. package/dist/purify.es-CKpwg8Tk.mjs +471 -0
  103. package/dist/purify.es-CKpwg8Tk.mjs.map +1 -0
  104. package/dist/webcomponent-core.js +1243 -0
  105. package/dist/webcomponent-core.js.map +1 -0
  106. package/dist/webcomponent-core.min.css +1 -0
  107. package/dist/webcomponent-core.min.js +597 -0
  108. package/dist/webcomponent-core.min.js.map +1 -0
  109. package/dist/webcomponent.cjs.js +1 -1
  110. package/dist/webcomponent.esm.js +3 -3
  111. package/dist/webcomponent.js +1286 -0
  112. package/dist/webcomponent.js.map +1 -0
  113. package/dist/webcomponent.min.css +1 -0
  114. package/dist/webcomponent.min.js +337 -334
  115. package/dist/webcomponent.min.js.map +1 -1
  116. package/package.json +16 -4
  117. package/dist/index-BK2lHfHK.js +0 -2
  118. package/dist/index-BK2lHfHK.js.map +0 -1
  119. package/dist/index-BS4zT-KN.mjs.map +0 -1
  120. package/dist/webcomponent.umd.js +0 -4073
  121. package/dist/webcomponent.umd.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodePlugin.native-DD9xFIid.mjs","sources":["../../light-code-editor/dist/index.es.js","../../plugins/code/src/CodePlugin.native.ts"],"sourcesContent":["class m {\n constructor(e = \"\") {\n this._lines = [], this._version = 0, this.setText(e);\n }\n // Get line at index\n getLine(e) {\n return this._lines[e] || \"\";\n }\n // Get all lines\n getLines() {\n return [...this._lines];\n }\n // Get total number of lines\n getLineCount() {\n return this._lines.length;\n }\n // Get total text content\n getText() {\n return this._lines.join(`\n`);\n }\n // Set entire text content\n setText(e) {\n this._lines = e.split(`\n`), this._version++;\n }\n // Get text in a range\n getTextInRange(e) {\n if (e.start.line === e.end.line)\n return this.getLine(e.start.line).substring(e.start.column, e.end.column);\n const t = [];\n t.push(this.getLine(e.start.line).substring(e.start.column));\n for (let n = e.start.line + 1; n < e.end.line; n++)\n t.push(this.getLine(n));\n return e.end.line < this.getLineCount() && t.push(this.getLine(e.end.line).substring(0, e.end.column)), t.join(`\n`);\n }\n // Replace text in range\n replaceRange(e, t) {\n const n = this.getTextInRange(e);\n if (e.start.line === e.end.line) {\n const i = this.getLine(e.start.line), s = i.substring(0, e.start.column) + t + i.substring(e.end.column);\n this._lines[e.start.line] = s;\n } else {\n const i = this.getLine(e.start.line), s = this.getLine(e.end.line), o = i.substring(0, e.start.column) + t, h = s.substring(e.end.column), r = t.split(`\n`);\n r[0] = o + r[0], r[r.length - 1] = r[r.length - 1] + h, this._lines.splice(e.start.line, e.end.line - e.start.line + 1, ...r);\n }\n return this._version++, { range: e, text: t, oldText: n };\n }\n // Insert text at position\n insertText(e, t) {\n const n = { start: e, end: e };\n return this.replaceRange(n, t);\n }\n // Delete text in range\n deleteRange(e) {\n return this.replaceRange(e, \"\");\n }\n // Convert position to offset\n positionToOffset(e) {\n let t = 0;\n for (let n = 0; n < e.line; n++)\n t += this.getLine(n).length + 1;\n return t += e.column, t;\n }\n // Convert offset to position\n offsetToPosition(e) {\n let t = e;\n for (let n = 0; n < this.getLineCount(); n++) {\n const i = this.getLine(n).length;\n if (t <= i)\n return { line: n, column: t };\n t -= i + 1;\n }\n return {\n line: this.getLineCount() - 1,\n column: this.getLine(this.getLineCount() - 1).length\n };\n }\n // Validate position\n isValidPosition(e) {\n return !(e.line < 0 || e.line >= this.getLineCount() || e.column < 0 || e.column > this.getLine(e.line).length);\n }\n // Validate range\n isValidRange(e) {\n return this.isValidPosition(e.start) && this.isValidPosition(e.end);\n }\n // Get version for change tracking\n getVersion() {\n return this._version;\n }\n // Clone the model\n clone() {\n const e = new m();\n return e._lines = [...this._lines], e._version = this._version, e;\n }\n}\nclass p {\n constructor(e) {\n this.gutterWidth = 50, this.lineHeight = 21, this.container = e, this.createDOM();\n }\n createDOM() {\n this.container.innerHTML = \"\";\n const e = document.createElement(\"div\");\n e.style.cssText = `\n position: relative;\n display: flex;\n width: 100%;\n height: 100%;\n background: var(--editor-background, #1e1e1e);\n color: var(--editor-foreground, #f8f9fa);\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 14px;\n line-height: ${this.lineHeight}px;\n overflow: hidden;\n `, this.lineNumbersElement = document.createElement(\"div\"), this.lineNumbersElement.style.cssText = `\n position: sticky;\n left: 0;\n top: 0;\n width: ${this.gutterWidth}px;\n background: var(--editor-gutter-background, #252526);\n color: var(--editor-gutter-foreground, #858585);\n padding: 0;\n text-align: right;\n border-right: 1px solid var(--editor-gutter-border, #3e3e42);\n user-select: none;\n overflow: hidden;\n z-index: 1;\n `, this.contentElement = document.createElement(\"div\"), this.contentElement.style.cssText = `\n flex: 1;\n padding: 0;\n background: transparent;\n border: none;\n outline: none;\n white-space: pre;\n overflow-x: auto;\n overflow-y: auto;\n min-height: 400px;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n color: inherit;\n tab-size: 2;\n -moz-tab-size: 2;\n `, this.contentElement.contentEditable = \"true\", this.contentElement.spellcheck = !1, e.appendChild(this.lineNumbersElement), e.appendChild(this.contentElement), this.container.appendChild(e), this.updateLineNumbers(1);\n }\n // Update line numbers\n updateLineNumbers(e) {\n const t = Math.max(e, 20), n = Array.from({ length: t }, (i, s) => s + 1);\n this.lineNumbersElement.innerHTML = n.map((i) => `<div style=\"height: ${this.lineHeight}px; line-height: ${this.lineHeight}px; padding-right: 12px;\">${i}</div>`).join(\"\");\n }\n // Get content element\n getContentElement() {\n return this.contentElement;\n }\n // Get line numbers element\n getLineNumbersElement() {\n return this.lineNumbersElement;\n }\n // Get text content\n getText() {\n return this.contentElement.textContent || \"\";\n }\n // Set text content\n setText(e) {\n this.contentElement.textContent = e;\n const t = e.split(`\n`).length;\n this.updateLineNumbers(t);\n }\n // Get cursor position from DOM selection\n getCursorPosition() {\n const e = window.getSelection();\n if (!e || e.rangeCount === 0)\n return { line: 0, column: 0 };\n const t = e.getRangeAt(0), n = t.cloneRange();\n n.selectNodeContents(this.contentElement), n.setEnd(t.endContainer, t.endOffset);\n const s = n.toString().split(`\n`);\n return {\n line: s.length - 1,\n column: s[s.length - 1].length\n };\n }\n // Set cursor position\n setCursorPosition(e) {\n const n = this.getText().split(`\n`), i = Math.min(e.line, n.length - 1), s = Math.min(e.column, n[i]?.length || 0);\n let o = 0;\n for (let g = 0; g < i; g++)\n o += n[g].length + 1;\n o += s;\n const h = document.createRange(), r = window.getSelection();\n let l = 0, c = null, a = 0;\n const u = document.createTreeWalker(\n this.contentElement,\n NodeFilter.SHOW_TEXT,\n null\n );\n let f;\n for (; f = u.nextNode(); ) {\n const g = f.textContent?.length || 0;\n if (l + g >= o) {\n c = f, a = o - l;\n break;\n }\n l += g;\n }\n if (c)\n try {\n h.setStart(c, a), h.setEnd(c, a), r?.removeAllRanges(), r?.addRange(h);\n } catch (g) {\n console.warn(\"Could not set cursor position:\", g);\n }\n }\n // Get selection range\n getSelectionRange() {\n const e = window.getSelection();\n if (!e || e.rangeCount === 0 || e.isCollapsed)\n return;\n const t = e.getRangeAt(0), n = t.cloneRange();\n n.selectNodeContents(this.contentElement), n.setEnd(t.startContainer, t.startOffset);\n const s = n.toString().split(`\n`), o = t.cloneRange();\n o.selectNodeContents(this.contentElement), o.setEnd(t.endContainer, t.endOffset);\n const r = o.toString().split(`\n`);\n return {\n start: {\n line: s.length - 1,\n column: s[s.length - 1].length\n },\n end: {\n line: r.length - 1,\n column: r[r.length - 1].length\n }\n };\n }\n // Set selection range\n setSelectionRange(e) {\n this.setCursorPosition(e.start);\n }\n // Focus the editor\n focus() {\n this.contentElement.focus();\n }\n // Blur the editor\n blur() {\n this.contentElement.blur();\n }\n // Set read-only mode\n setReadOnly(e) {\n this.contentElement.contentEditable = e ? \"false\" : \"true\";\n }\n // Apply theme\n applyTheme(e) {\n Object.entries(e).forEach(([t, n]) => {\n this.container.style.setProperty(`--${t}`, n);\n });\n }\n // Scroll to position\n scrollToPosition(e) {\n const t = this.lineNumbersElement.children[e.line];\n t && t.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }\n // Get scroll position\n getScrollTop() {\n return this.contentElement.scrollTop;\n }\n // Set scroll position\n setScrollTop(e) {\n this.contentElement.scrollTop = e, this.lineNumbersElement.scrollTop = e;\n }\n // Destroy the view\n destroy() {\n this.container && this.container.parentNode && this.container.parentNode.removeChild(this.container);\n }\n}\nclass x {\n constructor(e, t = {}) {\n this.extensions = /* @__PURE__ */ new Map(), this.commands = /* @__PURE__ */ new Map(), this.eventListeners = /* @__PURE__ */ new Map(), this.folds = [], this.currentTheme = \"default\", this.isDestroyed = !1, this.config = {\n value: \"\",\n theme: \"default\",\n readOnly: !1,\n tabSize: 2,\n lineWrapping: !1,\n lineNumbers: !0,\n ...t\n }, this.textModel = new m(this.config.value), this.view = new p(e), this.view.setText(this.textModel.getText()), this.view.setReadOnly(this.config.readOnly || !1), this.setupEventHandlers(), this.config.extensions && this.config.extensions.forEach((n) => this.addExtension(n)), this.setTheme(this.config.theme);\n }\n // Public accessors for extensions\n getTextModel() {\n return this.textModel;\n }\n getView() {\n return this.view;\n }\n getConfig() {\n return { ...this.config };\n }\n // Get keymap extension if available\n getKeymapExtension() {\n return this.extensions.get(\"keymap\");\n }\n // Setup DOM event handlers\n setupEventHandlers() {\n const e = this.view.getContentElement();\n e.addEventListener(\"input\", () => {\n const t = this.view.getText(), n = this.textModel.getText();\n t !== n && (this.textModel.setText(t), this.emit(\"change\", [{ range: this.getFullRange(), text: t, oldText: n }]), this.updateLineNumbers());\n }), e.addEventListener(\"selectionchange\", () => {\n const t = this.getCursor(), n = this.getSelection();\n this.emit(\"cursor\", t), n && this.emit(\"selection\", n);\n }), e.addEventListener(\"keydown\", (t) => {\n this.emit(\"keydown\", t);\n for (const n of this.extensions.values())\n if (n.onKeyDown && n.onKeyDown(t) === !1) {\n t.preventDefault(), t.stopPropagation();\n return;\n }\n }), e.addEventListener(\"mousedown\", (t) => {\n this.emit(\"mousedown\", t);\n for (const n of this.extensions.values())\n if (n.onMouseDown && n.onMouseDown(t) === !1) {\n t.preventDefault(), t.stopPropagation();\n return;\n }\n }), e.addEventListener(\"focus\", () => {\n this.emit(\"focus\");\n }), e.addEventListener(\"blur\", () => {\n this.emit(\"blur\");\n });\n }\n // Update line numbers display\n updateLineNumbers() {\n const e = this.textModel.getLineCount();\n this.view.updateLineNumbers(e);\n }\n // Get full range of document\n getFullRange() {\n return {\n start: { line: 0, column: 0 },\n end: {\n line: this.textModel.getLineCount() - 1,\n column: this.textModel.getLine(this.textModel.getLineCount() - 1).length\n }\n };\n }\n // Emit events to listeners\n emit(e, ...t) {\n const n = this.eventListeners.get(e);\n n && n.forEach((i) => i(...t));\n }\n // State management\n getValue() {\n return this.textModel.getText();\n }\n setValue(e) {\n this.textModel.setText(e), this.view.setText(e), this.updateLineNumbers(), this.emit(\"change\", [{ range: this.getFullRange(), text: e, oldText: this.getValue() }]);\n }\n getState() {\n return {\n text: this.getValue(),\n cursor: this.getCursor(),\n selection: this.getSelection(),\n readOnly: this.config.readOnly || !1,\n theme: this.currentTheme\n };\n }\n // Cursor & Selection\n getCursor() {\n const e = this.view.getCursorPosition();\n return {\n position: e,\n anchor: e\n // For now, cursor and anchor are the same\n };\n }\n setCursor(e) {\n this.view.setCursorPosition(e), this.emit(\"cursor\", this.getCursor());\n }\n getSelection() {\n return this.view.getSelectionRange();\n }\n setSelection(e) {\n this.view.setSelectionRange(e), this.emit(\"selection\", e);\n }\n // Configuration\n setTheme(e) {\n this.currentTheme = e;\n const t = {\n \"editor-background\": e === \"dark\" ? \"#1e1e1e\" : \"#ffffff\",\n \"editor-foreground\": e === \"dark\" ? \"#f8f9fa\" : \"#1a1a1a\",\n \"editor-gutter-background\": e === \"dark\" ? \"#252526\" : \"#f8f9fa\",\n \"editor-gutter-foreground\": e === \"dark\" ? \"#858585\" : \"#666666\",\n \"editor-gutter-border\": e === \"dark\" ? \"#3e3e42\" : \"#e1e5e9\"\n };\n this.view.applyTheme(t);\n }\n setReadOnly(e) {\n this.config.readOnly = e, this.view.setReadOnly(e);\n }\n // Extensions & Commands\n addExtension(e) {\n if (this.extensions.has(e.name))\n throw new Error(`Extension '${e.name}' already exists`);\n this.extensions.set(e.name, e), e.setup(this);\n }\n removeExtension(e) {\n const t = this.extensions.get(e);\n t && t.destroy && t.destroy(), this.extensions.delete(e);\n }\n executeCommand(e, ...t) {\n const n = this.commands.get(e);\n n ? n(this, ...t) : console.warn(`Command '${e}' not found`);\n }\n // Register a command\n registerCommand(e, t) {\n this.commands.set(e, t);\n }\n // Search & Navigation\n search(e, t = {}) {\n const n = {\n caseSensitive: !1,\n regex: !1,\n ...t\n }, i = [], s = this.getValue();\n s.split(`\n`);\n let o = n.caseSensitive ? s : s.toLowerCase(), h = n.caseSensitive ? e : e.toLowerCase();\n if (n.regex) {\n const r = new RegExp(h, n.caseSensitive ? \"g\" : \"gi\");\n let l;\n for (; (l = r.exec(o)) !== null; ) {\n const c = this.textModel.offsetToPosition(l.index), a = this.textModel.offsetToPosition(l.index + l[0].length);\n i.push({\n range: { start: c, end: a },\n match: l[0]\n });\n }\n } else {\n let r = 0, l = o.indexOf(h, r);\n for (; l !== -1; ) {\n const c = l + e.length, a = this.textModel.offsetToPosition(l), u = this.textModel.offsetToPosition(c);\n i.push({\n range: { start: a, end: u },\n match: s.substring(l, c)\n }), r = c, l = o.indexOf(h, r);\n }\n }\n return i;\n }\n replace(e, t) {\n const n = this.textModel.replaceRange(e, t);\n this.view.setText(this.getValue()), this.emit(\"change\", [n]);\n }\n replaceAll(e, t, n = {}) {\n const i = this.search(e, n);\n let s = 0;\n for (let o = i.length - 1; o >= 0; o--)\n this.replace(i[o].range, t), s++;\n return s;\n }\n // Folding (basic implementation)\n fold(e) {\n const t = {\n start: e.start,\n end: e.end,\n collapsed: !0,\n level: 0\n };\n this.folds.push(t);\n }\n unfold(e) {\n this.folds = this.folds.filter(\n (t) => !(t.start.line === e.start.line && t.end.line === e.end.line)\n );\n }\n getFolds() {\n return [...this.folds];\n }\n // Utilities\n focus() {\n this.view.focus();\n }\n blur() {\n this.view.blur();\n }\n destroy() {\n if (!this.isDestroyed) {\n this.isDestroyed = !0;\n for (const e of this.extensions.values())\n e.destroy && e.destroy();\n this.extensions.clear(), this.view.destroy(), this.commands.clear(), this.eventListeners.clear();\n }\n }\n // Events\n on(e, t) {\n this.eventListeners.has(e) || this.eventListeners.set(e, []), this.eventListeners.get(e).push(t);\n }\n off(e, t) {\n if (!this.eventListeners.has(e)) return;\n const n = this.eventListeners.get(e);\n if (t) {\n const i = n.indexOf(t);\n i !== -1 && n.splice(i, 1);\n } else\n n.length = 0;\n }\n}\nclass y {\n constructor(e) {\n this.name = \"keymap\", this.editor = null, this.keymap = {}, this.isMac = navigator.platform.toUpperCase().indexOf(\"MAC\") >= 0, this.keymap = e || this.getDefaultKeymap();\n }\n setup(e) {\n this.editor = e, e.on(\"keydown\", (t) => this.handleKeyDown(t));\n }\n handleKeyDown(e) {\n if (!this.editor) return;\n const t = this.findMatchingBinding(e);\n if (t)\n return this.editor.executeCommand(t.command), e.preventDefault(), e.stopPropagation(), !1;\n }\n findMatchingBinding(e) {\n const { key: t, ctrlKey: n, altKey: i, shiftKey: s, metaKey: o } = e, h = t.toLowerCase(), r = this.keymap[h];\n if (!r) return null;\n for (const l of r)\n if ((l.ctrlKey === n || !l.ctrlKey && !n) && (l.altKey === i || !l.altKey && !i) && (l.shiftKey === s || !l.shiftKey && !s) && (l.metaKey === o || !l.metaKey && !o))\n return l;\n return null;\n }\n getDefaultKeymap() {\n const e = {};\n return this.addBinding(e, \"f\", { ctrlKey: !this.isMac, metaKey: this.isMac }, \"find\"), this.addBinding(e, \"h\", { ctrlKey: !this.isMac, metaKey: this.isMac }, \"replace\"), this.addBinding(e, \"f3\", {}, \"findNext\"), this.addBinding(e, \"f3\", { shiftKey: !0 }, \"findPrev\"), this.addBinding(e, \"g\", { ctrlKey: !this.isMac, metaKey: this.isMac }, \"findNext\"), this.addBinding(e, \"[\", { ctrlKey: !this.isMac, metaKey: this.isMac, shiftKey: !0 }, \"fold\"), this.addBinding(e, \"]\", { ctrlKey: !this.isMac, metaKey: this.isMac, shiftKey: !0 }, \"unfold\"), this.addBinding(e, \"s\", { ctrlKey: !this.isMac, metaKey: this.isMac }, \"save\"), this.addBinding(e, \"z\", { ctrlKey: !this.isMac, metaKey: this.isMac }, \"undo\"), this.addBinding(e, \"y\", { ctrlKey: !this.isMac, metaKey: this.isMac }, \"redo\"), this.addBinding(e, \"z\", { ctrlKey: !this.isMac, metaKey: this.isMac, shiftKey: !0 }, \"redo\"), this.addBinding(e, \"t\", { ctrlKey: !this.isMac, metaKey: this.isMac, shiftKey: !0 }, \"toggleTheme\"), e;\n }\n addBinding(e, t, n, i) {\n const s = t.toLowerCase();\n e[s] || (e[s] = []), e[s].push({\n key: s,\n command: i,\n ...n\n });\n }\n // Public API for customizing keymap\n setKeymap(e) {\n this.keymap = { ...e };\n }\n addKeyBinding(e) {\n const t = e.key.toLowerCase();\n this.keymap[t] || (this.keymap[t] = []), this.keymap[t] = this.keymap[t].filter((n) => n.command !== e.command), this.keymap[t].push({\n ...e,\n key: t\n });\n }\n removeKeyBinding(e, t) {\n const n = e.toLowerCase();\n t ? this.keymap[n] && (this.keymap[n] = this.keymap[n].filter((i) => i.command !== t), this.keymap[n].length === 0 && delete this.keymap[n]) : delete this.keymap[n];\n }\n getKeymap() {\n return { ...this.keymap };\n }\n getBindingsForCommand(e) {\n const t = [];\n for (const n in this.keymap)\n for (const i of this.keymap[n])\n i.command === e && t.push({ ...i });\n return t;\n }\n getPlatformInfo() {\n return {\n isMac: this.isMac,\n platform: navigator.platform\n };\n }\n destroy() {\n this.keymap = {}, this.editor = null;\n }\n}\nclass b {\n constructor() {\n this.name = \"line-numbers\", this.editor = null, this.lineNumbersElement = null, this.isEnabled = !0;\n }\n setup(e) {\n this.editor = e, this.createLineNumbers(), e.registerCommand(\"toggleLineNumbers\", () => {\n this.toggle();\n }), e.on(\"change\", () => {\n this.updateLineNumbers();\n }), this.updateLineNumbers();\n }\n createLineNumbers() {\n if (!this.editor) return;\n const e = this.editor.getView();\n if (!e.container) return;\n this.lineNumbersElement = document.createElement(\"div\"), this.lineNumbersElement.style.cssText = `\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 50px;\n background: var(--editor-gutter-background, #252526);\n color: var(--editor-gutter-foreground, #858585);\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 14px;\n line-height: 21px;\n padding: 0;\n text-align: right;\n border-right: 1px solid var(--editor-gutter-border, #3e3e42);\n user-select: none;\n overflow: hidden;\n z-index: 1;\n pointer-events: none;\n `;\n const n = e.getContentElement();\n n && n.parentNode && (n.parentNode.insertBefore(this.lineNumbersElement, n), n.style.marginLeft = \"60px\");\n }\n updateLineNumbers() {\n if (!this.lineNumbersElement || !this.editor || !this.isEnabled) return;\n const e = this.editor.getValue().split(`\n`).length, t = Array.from({ length: Math.max(e, 20) }, (n, i) => i + 1);\n this.lineNumbersElement.innerHTML = t.map((n) => `<div style=\"height: 21px; line-height: 21px; padding-right: 12px;\">${n}</div>`).join(\"\");\n }\n toggle() {\n this.isEnabled = !this.isEnabled, this.lineNumbersElement && (this.lineNumbersElement.style.display = this.isEnabled ? \"block\" : \"none\");\n const e = this.editor.getView().getContentElement();\n e && (e.style.marginLeft = this.isEnabled ? \"60px\" : \"0\"), this.updateLineNumbers();\n }\n destroy() {\n this.lineNumbersElement && this.lineNumbersElement.parentNode && this.lineNumbersElement.parentNode.removeChild(this.lineNumbersElement), this.lineNumbersElement = null, this.editor = null;\n }\n}\nclass v {\n constructor() {\n this.name = \"theme\", this.editor = null, this.currentTheme = \"dark\";\n }\n setup(e) {\n this.editor = e, e.registerCommand(\"setTheme\", (t) => {\n this.setTheme(t);\n }), e.registerCommand(\"toggleTheme\", () => {\n this.toggleTheme();\n }), this.setTheme(this.currentTheme);\n }\n setTheme(e) {\n this.editor && (this.currentTheme = e, this.editor.setTheme(e));\n }\n toggleTheme() {\n const e = this.currentTheme === \"dark\" ? \"light\" : \"dark\";\n this.setTheme(e);\n }\n getCurrentTheme() {\n return this.currentTheme;\n }\n destroy() {\n this.editor = null;\n }\n}\nclass E {\n constructor() {\n this.name = \"read-only\", this.editor = null, this.isReadOnly = !1;\n }\n setup(e) {\n this.editor = e, e.registerCommand(\"setReadOnly\", (t) => {\n this.setReadOnly(t);\n }), e.registerCommand(\"toggleReadOnly\", () => {\n this.toggleReadOnly();\n }), e.on(\"keydown\", (t) => {\n if (t.ctrlKey && t.key === \"r\")\n return t.preventDefault(), this.toggleReadOnly(), !1;\n });\n }\n setReadOnly(e) {\n this.editor && (this.isReadOnly = e, this.editor.setReadOnly(e));\n }\n toggleReadOnly() {\n this.setReadOnly(!this.isReadOnly);\n }\n isCurrentlyReadOnly() {\n return this.isReadOnly;\n }\n destroy() {\n this.editor = null;\n }\n}\nclass w {\n constructor() {\n this.name = \"search\", this.editor = null, this.searchUI = null, this.isVisible = !1, this.currentResults = [], this.currentIndex = -1;\n }\n setup(e) {\n this.editor = e, e.registerCommand(\"find\", () => {\n this.showSearch();\n }), e.registerCommand(\"findNext\", () => {\n this.findNext();\n }), e.registerCommand(\"findPrev\", () => {\n this.findPrev();\n }), e.registerCommand(\"replace\", () => {\n this.showReplace();\n }), e.registerCommand(\"replaceAll\", (t, n) => {\n this.replaceAll(t, n);\n });\n }\n showSearch() {\n if (this.editor && (this.searchUI || this.createSearchUI(), this.isVisible = !0, this.searchUI)) {\n this.searchUI.style.display = \"block\";\n const e = this.searchUI.querySelector(\"input\");\n e && (e.focus(), e.select());\n }\n }\n showReplace() {\n this.showSearch();\n const e = this.searchUI?.querySelector(\".search-replace-input\");\n e && (e.style.display = \"block\", e.focus());\n const t = this.searchUI?.querySelector(\".search-status\");\n t && (t.textContent = \"Replace mode - Enter to replace, Shift+Enter to replace all\");\n }\n hideSearch() {\n this.isVisible = !1, this.searchUI && (this.searchUI.style.display = \"none\"), this.clearHighlights();\n }\n createSearchUI() {\n if (!this.editor) return;\n const e = document.querySelector(\".rte-source-editor-modal\");\n if (!e) return;\n this.searchUI = document.createElement(\"div\"), this.searchUI.style.cssText = `\n position: absolute;\n top: 10px;\n right: 10px;\n background: var(--editor-background, #1e1e1e);\n border: 1px solid var(--editor-gutter-border, #3e3e42);\n border-radius: 4px;\n padding: 8px;\n z-index: 1000;\n display: none;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n min-width: 250px;\n `, this.searchUI.innerHTML = `\n <div style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <input type=\"text\" placeholder=\"Find...\" style=\"\n flex: 1;\n padding: 4px 8px;\n background: var(--editor-gutter-background, #252526);\n color: var(--editor-foreground, #f8f9fa);\n border: 1px solid var(--editor-gutter-border, #3e3e42);\n border-radius: 3px;\n font-size: 12px;\n outline: none;\n \" />\n <button class=\"search-prev\" style=\"\n padding: 2px 6px;\n background: var(--editor-gutter-background, #252526);\n color: var(--editor-gutter-foreground, #858585);\n border: 1px solid var(--editor-gutter-border, #3e3e42);\n border-radius: 3px;\n cursor: pointer;\n font-size: 11px;\n \">↑</button>\n <button class=\"search-next\" style=\"\n padding: 2px 6px;\n background: var(--editor-gutter-background, #252526);\n color: var(--editor-gutter-foreground, #858585);\n border: 1px solid var(--editor-gutter-border, #3e3e42);\n border-radius: 3px;\n cursor: pointer;\n font-size: 11px;\n \">↓</button>\n <button class=\"search-close\" style=\"\n padding: 2px 6px;\n background: var(--editor-gutter-background, #252526);\n color: var(--editor-gutter-foreground, #858585);\n border: 1px solid var(--editor-gutter-border, #3e3e42);\n border-radius: 3px;\n cursor: pointer;\n font-size: 11px;\n \">×</button>\n </div>\n <div class=\"search-status\" style=\"\n font-size: 11px;\n color: var(--editor-gutter-foreground, #858585);\n text-align: center;\n \"></div>\n <input type=\"text\" class=\"search-replace-input\" placeholder=\"Replace with...\" style=\"\n width: 100%;\n padding: 4px 8px;\n background: var(--editor-gutter-background, #252526);\n color: var(--editor-foreground, #f8f9fa);\n border: 1px solid var(--editor-gutter-border, #3e3e42);\n border-radius: 3px;\n font-size: 12px;\n outline: none;\n display: none;\n margin-top: 4px;\n \" />\n `;\n const t = this.searchUI.querySelector(\"input\"), n = this.searchUI.querySelector(\".search-replace-input\"), i = this.searchUI.querySelector(\".search-prev\"), s = this.searchUI.querySelector(\".search-next\"), o = this.searchUI.querySelector(\".search-close\");\n t.addEventListener(\"input\", () => {\n this.performSearch(t.value);\n }), t.addEventListener(\"keydown\", (h) => {\n h.key === \"Enter\" && (h.preventDefault(), h.shiftKey ? this.findPrev() : this.findNext());\n }), n.addEventListener(\"keydown\", (h) => {\n h.key === \"Enter\" && (h.preventDefault(), h.shiftKey ? this.replaceAll(t.value, n.value) : this.replaceCurrent(t.value, n.value));\n }), i.addEventListener(\"click\", () => this.findPrev()), s.addEventListener(\"click\", () => this.findNext()), o.addEventListener(\"click\", () => this.hideSearch()), e.appendChild(this.searchUI);\n }\n performSearch(e) {\n if (!this.editor || !e.trim()) {\n this.clearHighlights(), this.updateStatus(\"\");\n return;\n }\n const t = this.editor.getValue(), n = [];\n let i = t.toLowerCase().indexOf(e.toLowerCase());\n for (; i !== -1; ) {\n const s = this.getPositionFromOffset(t, i), o = this.getPositionFromOffset(t, i + e.length);\n n.push({\n range: { start: s, end: o },\n match: t.substring(i, i + e.length)\n }), i = t.toLowerCase().indexOf(e.toLowerCase(), i + 1);\n }\n this.currentResults = n, this.currentIndex = this.currentResults.length > 0 ? 0 : -1, this.updateHighlights(), this.updateStatus(`${this.currentResults.length} matches`);\n }\n getPositionFromOffset(e, t) {\n const n = e.substring(0, t).split(`\n`), i = n.length - 1, s = n[n.length - 1].length;\n return { line: i, column: s };\n }\n findNext() {\n this.currentResults.length !== 0 && (this.currentIndex = (this.currentIndex + 1) % this.currentResults.length, this.updateHighlights());\n }\n findPrev() {\n this.currentResults.length !== 0 && (this.currentIndex = this.currentIndex <= 0 ? this.currentResults.length - 1 : this.currentIndex - 1, this.updateHighlights());\n }\n replaceCurrent(e, t) {\n if (!this.editor || !e.trim() || this.currentIndex === -1) return;\n const n = this.currentResults[this.currentIndex];\n if (!n) return;\n const i = this.editor.getValue(), s = this.getOffsetFromPosition(i, n.range.start), o = i.substring(0, s), h = i.substring(s + e.length), r = o + t + h;\n this.editor.setValue(r), this.performSearch(e), this.updateStatus(\"Replaced current occurrence\");\n }\n replaceAll(e, t) {\n if (!this.editor || !e.trim()) return;\n let n = this.editor.getValue(), i = 0, s = n.toLowerCase().indexOf(e.toLowerCase());\n for (; s !== -1; )\n n = n.substring(0, s) + t + n.substring(s + e.length), i++, s = n.toLowerCase().indexOf(e.toLowerCase(), s + t.length);\n i > 0 && (this.editor.setValue(n), this.updateStatus(`Replaced ${i} occurrences`));\n }\n getOffsetFromPosition(e, t) {\n const n = e.split(`\n`);\n let i = 0;\n for (let s = 0; s < t.line; s++)\n i += n[s].length + 1;\n return i += t.column, i;\n }\n updateHighlights() {\n this.clearHighlights(), !(this.currentResults.length === 0 || this.currentIndex === -1) && (this.currentResults[this.currentIndex], this.updateStatus(`${this.currentResults.length} matches (showing ${this.currentIndex + 1}/${this.currentResults.length})`));\n }\n clearHighlights() {\n }\n updateStatus(e) {\n const t = this.searchUI?.querySelector(\".search-status\");\n t && (t.textContent = e);\n }\n destroy() {\n this.searchUI && this.searchUI.parentNode && this.searchUI.parentNode.removeChild(this.searchUI), this.searchUI = null, this.editor = null;\n }\n}\nclass k {\n constructor() {\n this.name = \"bracket-matching\", this.editor = null, this.bracketPairs = {\n \"(\": \")\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"<\": \">\"\n }, this.reverseBracketPairs = {\n \")\": \"(\",\n \"]\": \"[\",\n \"}\": \"{\",\n \">\": \"<\"\n }, this.currentMatch = null;\n }\n setup(e) {\n this.editor = e, e.on(\"cursor\", () => {\n this.updateBracketMatching();\n }), e.on(\"change\", () => {\n this.updateBracketMatching();\n });\n }\n updateBracketMatching() {\n if (!this.editor) return;\n const e = this.editor.getCursor(), t = this.editor.getValue();\n this.clearBracketHighlighting();\n const n = this.getBracketAtPosition(t, e.position);\n if (!n) return;\n const i = this.findMatchingBracket(t, n);\n i && (this.currentMatch = i, this.highlightBrackets(i));\n }\n getBracketAtPosition(e, t) {\n const n = e.split(`\n`);\n if (t.line >= n.length) return null;\n const i = n[t.line];\n if (t.column >= i.length) return null;\n const s = i[t.column];\n return this.bracketPairs[s] || this.reverseBracketPairs[s] ? { char: s, position: t } : null;\n }\n findMatchingBracket(e, t) {\n const n = e.split(`\n`), i = t.position.line, s = t.position.column, o = t.char;\n return this.bracketPairs[o] ? this.findClosingBracket(e, n, i, s, o) : this.reverseBracketPairs[o] ? this.findOpeningBracket(e, n, i, s, o) : null;\n }\n findClosingBracket(e, t, n, i, s) {\n const o = this.bracketPairs[s];\n let h = 0;\n for (let r = n; r < t.length; r++) {\n const l = t[r], c = r === n ? i : 0;\n for (let a = c; a < l.length; a++) {\n const u = l[a];\n if (u === s)\n h++;\n else if (u === o && (h--, h === 0))\n return {\n open: { start: { line: n, column: i }, end: { line: n, column: i + 1 } },\n close: { start: { line: r, column: a }, end: { line: r, column: a + 1 } },\n type: s\n };\n }\n }\n return null;\n }\n findOpeningBracket(e, t, n, i, s) {\n const o = this.reverseBracketPairs[s];\n let h = 0;\n for (let r = n; r >= 0; r--) {\n const l = t[r], c = r === n ? i : l.length - 1;\n for (let a = c; a >= 0; a--) {\n const u = l[a];\n if (u === s)\n h++;\n else if (u === o && (h--, h === 0))\n return {\n open: { start: { line: r, column: a }, end: { line: r, column: a + 1 } },\n close: { start: { line: n, column: i }, end: { line: n, column: i + 1 } },\n type: o\n };\n }\n }\n return null;\n }\n highlightBrackets(e) {\n console.log(\"Bracket match found:\", e);\n }\n clearBracketHighlighting() {\n this.currentMatch = null;\n }\n getCurrentMatch() {\n return this.currentMatch;\n }\n destroy() {\n this.clearBracketHighlighting(), this.editor = null;\n }\n}\nclass C {\n constructor() {\n this.name = \"code-folding\", this.editor = null, this.foldIndicators = [], this.foldingUI = null;\n }\n setup(e) {\n this.editor = e, e.registerCommand(\"fold\", () => {\n console.log(\"Fold command executed - folding not yet implemented\"), this.foldAtCursor();\n }), e.registerCommand(\"unfold\", () => {\n console.log(\"Unfold command executed - unfolding not yet implemented\"), this.unfoldAtCursor();\n }), e.registerCommand(\"foldAll\", () => {\n console.log(\"Fold all command executed - folding not yet implemented\"), this.foldAll();\n }), e.registerCommand(\"unfoldAll\", () => {\n console.log(\"Unfold all command executed - unfolding not yet implemented\"), this.unfoldAll();\n }), e.on(\"change\", () => {\n this.updateFoldIndicators();\n }), this.createFoldingUI(), this.updateFoldIndicators();\n }\n createFoldingUI() {\n if (!this.editor) return;\n const e = document.querySelector(\".rte-source-editor-modal\");\n e && (this.foldingUI = document.createElement(\"div\"), this.foldingUI.style.cssText = `\n position: absolute;\n left: 40px;\n top: 0;\n bottom: 0;\n width: 20px;\n pointer-events: none;\n z-index: 2;\n `, e.appendChild(this.foldingUI));\n }\n updateFoldIndicators() {\n if (!this.editor || !this.foldingUI) return;\n this.foldingUI.innerHTML = \"\", this.foldIndicators = [];\n const t = this.editor.getValue().split(`\n`);\n this.findFoldableLines(t).forEach((i) => {\n this.createFoldIndicator(i);\n });\n }\n findFoldableLines(e) {\n const t = [];\n for (let n = 0; n < e.length; n++) {\n const i = e[n].trim();\n (i.startsWith(\"{\") || i.startsWith(\"function\") || i.startsWith(\"class\") || i.startsWith(\"if\") || i.includes(\"=>\") || i.startsWith(\"for\") || i.startsWith(\"while\") || i.startsWith(\"try\")) && t.push(n);\n }\n return t;\n }\n createFoldIndicator(e) {\n if (!this.foldingUI) return;\n const t = document.createElement(\"div\");\n t.style.cssText = `\n position: absolute;\n left: 0;\n top: ${e * 21}px;\n width: 20px;\n height: 21px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n pointer-events: auto;\n color: var(--editor-gutter-foreground, #858585);\n font-size: 10px;\n user-select: none;\n `, t.innerHTML = \"▶\", t.title = \"Code folding not yet implemented - click shows fold indicators\", t.addEventListener(\"click\", () => {\n console.log(`Fold toggle clicked at line ${e} - implementation pending`);\n }), this.foldingUI.appendChild(t), this.foldIndicators.push(t);\n }\n foldAtCursor() {\n console.log(\"foldAtCursor called - implementation pending\");\n }\n unfoldAtCursor() {\n console.log(\"unfoldAtCursor called - implementation pending\");\n }\n foldAll() {\n console.log(\"foldAll called - implementation pending\");\n }\n unfoldAll() {\n console.log(\"unfoldAll called - implementation pending\");\n }\n destroy() {\n this.foldingUI && this.foldingUI.parentNode && this.foldingUI.parentNode.removeChild(this.foldingUI), this.foldingUI = null, this.foldIndicators = [], this.editor = null;\n }\n}\nclass L {\n constructor() {\n this.name = \"syntax-highlighting\", this.editor = null, this.currentTheme = \"dark\";\n }\n setup(e) {\n this.editor = e, console.log(\"SyntaxHighlightingExtension: Isolated extension loaded - ready for use\");\n }\n // Extension provides methods that can be called by the editor\n setTheme(e) {\n this.currentTheme = e, console.log(`SyntaxHighlightingExtension: Theme changed to ${e}`);\n }\n // Method to get syntax highlighting colors for a given theme\n getSyntaxColors() {\n return this.currentTheme === \"dark\" ? {\n tag: \"#569cd6\",\n // Blue\n comment: \"#6a9955\",\n // Green\n attrValue: \"#ce9178\",\n // Orange\n text: \"#d4d4d4\"\n // Light gray\n } : {\n tag: \"#0000ff\",\n // Blue\n comment: \"#008000\",\n // Green\n attrValue: \"#a31515\",\n // Red\n text: \"#000000\"\n // Black\n };\n }\n // Method to parse and highlight HTML content (returns highlighted HTML string)\n highlightHTML(e) {\n const t = this.getSyntaxColors();\n let n = e;\n return n = n.replace(\n /(<\\/?[\\w:-]+(?:\\s[^>]*?)?\\/?>)/g,\n `<span style=\"color: ${t.tag};\">$1</span>`\n ), n = n.replace(\n /(<!--[\\s\\S]*?-->)/g,\n `<span style=\"color: ${t.comment};\">$1</span>`\n ), n = n.replace(\n /(\"[^\"]*\"|'[^']*')/g,\n `<span style=\"color: ${t.attrValue};\">$1</span>`\n ), n;\n }\n // Method to check if content contains syntax that should be highlighted\n shouldHighlight(e) {\n return /<\\/?[\\w:-]+|<!--/.test(e);\n }\n destroy() {\n this.editor = null, console.log(\"SyntaxHighlightingExtension: Extension destroyed\");\n }\n}\nfunction T(d, e) {\n const t = { ...e };\n return t.extensions || (t.extensions = []), t.extensions.some((i) => i.name === \"keymap\") || t.extensions.unshift(new y(t.keymap)), new x(d, t);\n}\nexport {\n k as BracketMatchingExtension,\n C as CodeFoldingExtension,\n x as EditorCore,\n y as KeymapExtension,\n b as LineNumbersExtension,\n E as ReadOnlyExtension,\n w as SearchExtension,\n L as SyntaxHighlightingExtension,\n m as TextModel,\n v as ThemeExtension,\n p as View,\n T as createEditor,\n x as default\n};\n","import { Plugin } from '@editora/core';\nimport {\n createEditor,\n EditorCore,\n LineNumbersExtension,\n ThemeExtension,\n ReadOnlyExtension,\n SearchExtension,\n BracketMatchingExtension,\n CodeFoldingExtension,\n SyntaxHighlightingExtension\n} from '@editora/light-code-editor';\n\nconst SOURCE_EDITOR_CSS = `/* Source Editor Dialog Styles */\n.rte-source-editor-overlay {\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n width: 100vw !important;\n height: 100vh !important;\n background-color: rgba(0, 0, 0, 0.6) !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n z-index: 10000 !important;\n padding: 20px !important;\n box-sizing: border-box !important;\n margin: 0 !important;\n}\n\n.rte-source-editor-overlay.fullscreen {\n padding: 0 !important;\n}\n\n.rte-source-editor-modal {\n background: white;\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n width: 100%;\n max-width: 1200px;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n}\n\n.rte-source-editor-overlay.fullscreen .rte-source-editor-modal {\n border-radius: 0;\n max-width: 100%;\n max-height: 100vh;\n width: 100%;\n height: 100vh;\n}\n\n.rte-source-editor-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #e1e5e9;\n background: #f8f9fa;\n border-radius: 8px 8px 0 0;\n}\n\n.rte-source-editor-overlay.fullscreen .rte-source-editor-header {\n border-radius: 0;\n}\n\n.rte-source-editor-header h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.rte-source-editor-header-toolbar {\n display: flex;\n gap: 8px;\n margin-left: auto;\n margin-right: 16px;\n}\n\n.rte-source-editor-toolbar-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 6px;\n border-radius: 4px;\n font-size: 16px;\n line-height: 1;\n transition: all 0.2s ease;\n color: #666;\n}\n\n.rte-source-editor-toolbar-btn:hover:not(:disabled) {\n background: #e1e5e9;\n color: #1a1a1a;\n}\n\n.rte-source-editor-toolbar-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.rte-source-editor-toolbar-btn.active {\n background: #007acc;\n color: white;\n}\n\n.rte-source-editor-toolbar-btn.active:hover {\n background: #0056b3;\n}\n\n.rte-source-editor-header-actions {\n display: flex;\n gap: 8px;\n}\n\n.rte-source-editor-fullscreen-btn,\n.rte-source-editor-close-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n color: #666;\n font-size: 16px;\n line-height: 1;\n transition: all 0.2s ease;\n}\n\n.rte-source-editor-fullscreen-btn:hover,\n.rte-source-editor-close-btn:hover {\n background: #e1e5e9;\n color: #1a1a1a;\n}\n\n.rte-source-editor-body {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.rte-source-editor-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n color: #666;\n position: absolute;\n z-index: 9;\n margin: 0 auto;\n width: 100%;\n top: 44%;\n}\n\n.rte-source-editor-spinner {\n width: 32px;\n height: 32px;\n border: 3px solid #e1e5e9;\n border-top: 3px solid #007acc;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.rte-source-editor-error {\n background: #fee;\n color: #c53030;\n padding: 12px 16px;\n border-left: 4px solid #c53030;\n margin: 16px;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.rte-source-editor-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.rte-source-editor-warning {\n background: #fefcbf;\n color: #744210;\n padding: 8px 16px;\n font-size: 12px;\n font-weight: 500;\n border-bottom: 1px solid #f6e05e;\n}\n\n.rte-source-editor-codemirror {\n flex: 1;\n overflow: auto;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.rte-source-editor-codemirror .cm-editor {\n height: 100%;\n}\n\n.rte-source-editor-codemirror .cm-focused {\n outline: none;\n}\n\n.rte-source-editor-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-top: 1px solid #e1e5e9;\n background: #f8f9fa;\n border-radius: 0 0 8px 8px;\n}\n\n.rte-source-editor-overlay.fullscreen .rte-source-editor-footer {\n border-radius: 0;\n}\n\n.rte-source-editor-footer-info {\n font-size: 12px;\n color: #666;\n}\n\n.unsaved-changes {\n color: #d69e2e;\n font-weight: 500;\n}\n\n.rte-source-editor-footer-actions {\n display: flex;\n gap: 12px;\n}\n\n.rte-source-editor-btn {\n padding: 8px 16px;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n border: 1px solid transparent;\n transition: all 0.2s ease;\n}\n\n.rte-source-editor-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.rte-source-editor-btn-cancel {\n background: white;\n border-color: #d1d5db;\n color: #374151;\n}\n\n.rte-source-editor-btn-cancel:hover:not(:disabled) {\n background: #f9fafb;\n border-color: #9ca3af;\n}\n\n.rte-source-editor-btn-save {\n background: #007acc;\n color: white;\n}\n\n.rte-source-editor-btn-save:hover:not(:disabled) {\n background: #0056b3;\n}\n\n/* Dark theme support */\n@media (prefers-color-scheme: dark) {\n .rte-source-editor-modal {\n background: #1e1e1e;\n color: #f8f9fa;\n }\n\n .rte-source-editor-header {\n background: #2d2d2d;\n border-color: #404040;\n }\n\n .rte-source-editor-header h2 {\n color: #f8f9fa;\n }\n\n .rte-source-editor-fullscreen-btn,\n .rte-source-editor-close-btn {\n color: #ccc;\n }\n\n .rte-source-editor-fullscreen-btn:hover,\n .rte-source-editor-close-btn:hover {\n background: #404040;\n color: #f8f9fa;\n }\n\n .rte-source-editor-error {\n background: #2d1b1b;\n color: #fca5a5;\n border-color: #dc2626;\n }\n\n .rte-source-editor-warning {\n background: #2d2a1b;\n color: #fcd34d;\n border-color: #d97706;\n }\n\n .rte-source-editor-footer {\n background: #2d2d2d;\n border-color: #404040;\n }\n\n .rte-source-editor-footer-info {\n color: #ccc;\n }\n\n .rte-source-editor-btn-cancel {\n background: #374151;\n border-color: #4b5563;\n color: #f9fafb;\n }\n\n .rte-source-editor-btn-cancel:hover:not(:disabled) {\n background: #4b5563;\n border-color: #6b7280;\n }\n}\n\n/* Responsive design */\n@media (max-width: 768px) {\n .rte-source-editor-overlay {\n padding: 10px;\n }\n\n .rte-source-editor-modal {\n max-height: 95vh;\n }\n\n .rte-source-editor-header {\n padding: 12px 16px;\n }\n\n .rte-source-editor-footer {\n padding: 12px 16px;\n flex-direction: column;\n gap: 12px;\n align-items: stretch;\n }\n\n .rte-source-editor-footer-actions {\n justify-content: stretch;\n }\n\n .rte-source-editor-btn {\n flex: 1;\n text-align: center;\n }\n}`;\n\n/**\n * Code Plugin - Framework Agnostic\n * \n * Adds HTML source view functionality.\n * Opens a dialog to edit the raw HTML source of the editor content.\n * No React dependency required.\n */\nexport const CodePlugin = (): Plugin => ({\n name: 'code',\n \n // Toolbar button configuration\n toolbar: [\n {\n label: 'Source',\n command: 'toggleSourceView',\n type: 'button',\n icon: '<>',\n shortcut: 'Mod-Shift-S'\n }\n ],\n \n // Native command implementations\n commands: {\n /**\n * Toggle HTML source view\n * Opens a dialog to edit raw HTML\n */\n toggleSourceView: () => {\n // Find the editor container and content area\n const findEditorContent = (): HTMLElement | null => {\n // PRIORITY 1: Try to find from current selection or focus\n // This ensures we get the correct editor in multi-instance scenarios\n const selection = window.getSelection();\n if (selection && selection.anchorNode) {\n let current = selection.anchorNode instanceof HTMLElement \n ? selection.anchorNode \n : selection.anchorNode.parentElement;\n \n // Traverse up to find .rte-content (the contenteditable element)\n while (current) {\n if (current.classList?.contains('rte-content')) {\n return current;\n }\n current = current.parentElement;\n }\n }\n \n // PRIORITY 2: Try to find from document.activeElement\n // If the editor was just focused by the toolbar\n if (document.activeElement) {\n let current = document.activeElement;\n \n // Check if activeElement itself is the content\n if (current.classList?.contains('rte-content')) {\n return current as HTMLElement;\n }\n \n // Or traverse up from activeElement\n while (current && current !== document.body) {\n if (current.classList?.contains('rte-content')) {\n return current as HTMLElement;\n }\n // Also check children\n const contentEl = current.querySelector('.rte-content') as HTMLElement;\n if (contentEl) return contentEl;\n \n current = current.parentElement!;\n }\n }\n \n // PRIORITY 3: Find from data-editora-editor (single instance fallback)\n const editorContainer = document.querySelector('[data-editora-editor]');\n if (editorContainer) {\n const contentEl = editorContainer.querySelector('.rte-content') as HTMLElement;\n if (contentEl) return contentEl;\n }\n \n // PRIORITY 4: Last resort - find any .rte-content\n return document.querySelector('.rte-content') as HTMLElement;\n };\n \n const contentElement = findEditorContent();\n \n if (!contentElement) {\n console.error('[CodePlugin] Editor content area not found');\n alert('Editor content area not found. Please click inside the editor first.');\n return false;\n }\n \n // Get current HTML\n const currentHtml = contentElement.innerHTML;\n \n // Format HTML for better readability\n const formatHTML = (html: string): string => {\n let formatted = '';\n let indentLevel = 0;\n const indentSize = 2;\n const tokens = html.split(/(<\\/?[a-zA-Z][^>]*>)/);\n\n for (const token of tokens) {\n if (!token.trim()) continue;\n\n if (token.match(/^<\\/[a-zA-Z]/)) {\n indentLevel = Math.max(0, indentLevel - 1);\n formatted += '\\n' + ' '.repeat(indentLevel * indentSize) + token;\n } else if (token.match(/^<[a-zA-Z]/) && !token.match(/\\/>$/)) {\n formatted += '\\n' + ' '.repeat(indentLevel * indentSize) + token;\n indentLevel++;\n } else if (token.match(/^<[a-zA-Z].*\\/>$/)) {\n formatted += '\\n' + ' '.repeat(indentLevel * indentSize) + token;\n } else {\n formatted += token.trim();\n }\n }\n return formatted.trim();\n };\n \n // Create source editor dialog\n const createSourceDialog = () => {\n let editorInstance: EditorCore | null = null;\n let currentTheme = 'dark';\n let isReadOnly = false;\n let isFullscreen = false;\n let hasUnsavedChanges = false;\n const originalHtml = currentHtml;\n const overlay = document.createElement('div');\n overlay.className = 'rte-source-editor-overlay';\n \n const dialog = document.createElement('div');\n dialog.className = 'rte-source-editor-modal';\n dialog.setAttribute('role', 'dialog');\n dialog.setAttribute('aria-modal', 'true');\n dialog.setAttribute('aria-labelledby', 'source-editor-title');\n \n const header = document.createElement('div');\n header.className = 'rte-source-editor-header';\n header.innerHTML = `\n <h2 id=\"source-editor-title\">Source Editor</h2>\n <div class=\"rte-source-editor-header-toolbar\">\n <button class=\"rte-source-editor-toolbar-btn theme-toggle-btn\" title=\"Switch theme\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"5\"/>\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"/>\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"/>\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"/>\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"/>\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"/>\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"/>\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"/>\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"/>\n </svg>\n </button>\n <button class=\"rte-source-editor-toolbar-btn readonly-toggle-btn\" title=\"Toggle read-only\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/>\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"/>\n </svg>\n </button>\n </div>\n <div class=\"rte-source-editor-header-actions\">\n <button class=\"rte-source-editor-fullscreen-btn\" title=\"Toggle fullscreen\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7\"/>\n </svg>\n </button>\n <button class=\"rte-source-editor-close-btn\" aria-label=\"Close source editor\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n </button>\n </div>\n `;\n \n const body = document.createElement('div');\n body.className = 'rte-source-editor-body';\n \n const content = document.createElement('div');\n content.className = 'rte-source-editor-content';\n \n const warning = document.createElement('div');\n warning.className = 'rte-source-editor-warning';\n warning.textContent = '⚠️ Advanced users only. Invalid HTML may break the editor.';\n \n const editorContainer = document.createElement('div');\n editorContainer.className = 'rte-source-editor-light-editor';\n editorContainer.style.height = '400px';\n \n content.appendChild(warning);\n content.appendChild(editorContainer);\n body.appendChild(content);\n \n const footer = document.createElement('div');\n footer.className = 'rte-source-editor-footer';\n footer.innerHTML = `\n <div class=\"rte-source-editor-footer-info\">\n <span class=\"unsaved-changes\" style=\"display: none;\">• Unsaved changes</span>\n </div>\n <div class=\"rte-source-editor-footer-actions\">\n <button class=\"rte-source-editor-btn rte-source-editor-btn-cancel\">Cancel</button>\n <button class=\"rte-source-editor-btn rte-source-editor-btn-save\">Save</button>\n </div>\n `;\n \n // Assemble dialog\n dialog.appendChild(header);\n dialog.appendChild(body);\n dialog.appendChild(footer);\n overlay.appendChild(dialog);\n \n // Inject Source Editor CSS if not already present\n if (!document.getElementById('rte-source-editor-styles')) {\n const style = document.createElement('style');\n style.id = 'rte-source-editor-styles';\n style.textContent = SOURCE_EDITOR_CSS;\n document.head.appendChild(style);\n }\n \n document.body.appendChild(overlay);\n \n // Initialize code editor\n try {\n editorInstance = createEditor(editorContainer, {\n value: formatHTML(currentHtml),\n theme: 'dark',\n readOnly: false,\n extensions: [\n new LineNumbersExtension(),\n new ThemeExtension(),\n new ReadOnlyExtension(),\n new BracketMatchingExtension(),\n new SearchExtension(),\n new CodeFoldingExtension(),\n new SyntaxHighlightingExtension()\n ]\n });\n\n // Track changes\n editorInstance.on('change', () => {\n const newContent = editorInstance?.getValue() || '';\n hasUnsavedChanges = newContent !== formatHTML(originalHtml);\n const unsavedLabel = footer.querySelector('.unsaved-changes') as HTMLElement;\n if (unsavedLabel) {\n unsavedLabel.style.display = hasUnsavedChanges ? 'inline' : 'none';\n }\n });\n\n setTimeout(() => editorInstance?.focus(), 100);\n } catch (err) {\n console.error('Failed to initialize code editor:', err);\n }\n \n // Event handlers\n const updateUnsavedState = () => {\n const unsavedLabel = footer.querySelector('.unsaved-changes') as HTMLElement;\n if (unsavedLabel) {\n unsavedLabel.style.display = hasUnsavedChanges ? 'inline' : 'none';\n }\n };\n \n const toggleTheme = () => {\n currentTheme = currentTheme === 'dark' ? 'light' : 'dark';\n editorInstance?.setTheme(currentTheme);\n const themeBtn = header.querySelector('.theme-toggle-btn');\n if (themeBtn && currentTheme === 'light') {\n themeBtn.innerHTML = `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"/>\n </svg>\n `;\n }\n };\n \n const toggleReadOnly = () => {\n isReadOnly = !isReadOnly;\n editorInstance?.setReadOnly(isReadOnly);\n const readonlyBtn = header.querySelector('.readonly-toggle-btn');\n if (readonlyBtn) {\n if (isReadOnly) {\n readonlyBtn.classList.add('active');\n readonlyBtn.innerHTML = `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"/>\n <circle cx=\"12\" cy=\"16\" r=\"1\"/>\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>\n </svg>\n `;\n } else {\n readonlyBtn.classList.remove('active');\n readonlyBtn.innerHTML = `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/>\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"/>\n </svg>\n `;\n }\n }\n };\n \n const toggleFullscreen = () => {\n isFullscreen = !isFullscreen;\n if (isFullscreen) {\n overlay.classList.add('fullscreen');\n editorContainer.style.height = 'calc(100vh - 200px)';\n } else {\n overlay.classList.remove('fullscreen');\n editorContainer.style.height = '400px';\n }\n const fullscreenBtn = header.querySelector('.rte-source-editor-fullscreen-btn');\n if (fullscreenBtn) {\n fullscreenBtn.innerHTML = isFullscreen ? `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/>\n </svg>\n ` : `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7\"/>\n </svg>\n `;\n }\n };\n \n const closeDialog = () => {\n if (editorInstance) {\n editorInstance.destroy();\n editorInstance = null;\n }\n document.body.removeChild(overlay);\n };\n \n const handleCancel = () => {\n if (hasUnsavedChanges) {\n if (!confirm('You have unsaved changes. Are you sure you want to cancel?')) {\n return;\n }\n }\n closeDialog();\n };\n \n const handleSave = () => {\n try {\n const htmlContent = editorInstance?.getValue() || '';\n \n // Basic HTML sanitization\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = htmlContent;\n const dangerous = tempDiv.querySelectorAll('script, iframe[src^=\"javascript:\"], object, embed');\n dangerous.forEach(el => el.remove());\n \n contentElement.innerHTML = tempDiv.innerHTML;\n hasUnsavedChanges = false;\n closeDialog();\n } catch (error) {\n alert('Failed to update HTML. Please check your syntax.');\n console.error('HTML update error:', error);\n }\n };\n \n // Attach event listeners\n header.querySelector('.theme-toggle-btn')?.addEventListener('click', toggleTheme);\n header.querySelector('.readonly-toggle-btn')?.addEventListener('click', toggleReadOnly);\n header.querySelector('.rte-source-editor-fullscreen-btn')?.addEventListener('click', toggleFullscreen);\n header.querySelector('.rte-source-editor-close-btn')?.addEventListener('click', closeDialog);\n footer.querySelector('.rte-source-editor-btn-cancel')?.addEventListener('click', handleCancel);\n footer.querySelector('.rte-source-editor-btn-save')?.addEventListener('click', handleSave);\n \n overlay.addEventListener('click', (e) => {\n if (e.target === overlay) closeDialog();\n });\n \n // Keyboard shortcuts\n const escHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n closeDialog();\n document.removeEventListener('keydown', escHandler);\n }\n };\n document.addEventListener('keydown', escHandler);\n };\n \n createSourceDialog();\n return true;\n }\n },\n \n // Keyboard shortcuts\n keymap: {\n 'Mod-Shift-s': 'toggleSourceView',\n 'Mod-Shift-S': 'toggleSourceView'\n }\n});\n"],"names":["m","i","s","h","r","p","_a","_b","n","o","g","l","c","u","f","x","a","y","b","v","E","w","k","C","t","L","T","d","SOURCE_EDITOR_CSS","CodePlugin","contentElement","_c","selection","current","contentEl","editorContainer","currentHtml","formatHTML","html","formatted","indentLevel","indentSize","tokens","token","_d","_e","_f","editorInstance","currentTheme","isReadOnly","isFullscreen","hasUnsavedChanges","originalHtml","overlay","dialog","header","body","content","warning","footer","style","createEditor","LineNumbersExtension","ThemeExtension","ReadOnlyExtension","BracketMatchingExtension","SearchExtension","CodeFoldingExtension","SyntaxHighlightingExtension","unsavedLabel","err","toggleTheme","themeBtn","toggleReadOnly","readonlyBtn","toggleFullscreen","fullscreenBtn","closeDialog","handleCancel","handleSave","htmlContent","tempDiv","el","error","e","escHandler"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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"}
@@ -0,0 +1,326 @@
1
+ const h = () => {
2
+ const d = window.getSelection();
3
+ if (d && d.rangeCount > 0) {
4
+ let e = d.getRangeAt(0).startContainer;
5
+ for (; e && e !== document.body; ) {
6
+ if (e.nodeType === Node.ELEMENT_NODE) {
7
+ const a = e;
8
+ if (a.getAttribute("contenteditable") === "true")
9
+ return a;
10
+ }
11
+ e = e.parentNode;
12
+ }
13
+ }
14
+ const r = document.activeElement;
15
+ if (r) {
16
+ if (r.getAttribute("contenteditable") === "true")
17
+ return r;
18
+ const e = r.closest('[contenteditable="true"]');
19
+ if (e) return e;
20
+ }
21
+ return document.querySelector('[contenteditable="true"]');
22
+ }, z = [
23
+ { value: "javascript", label: "JavaScript" },
24
+ { value: "typescript", label: "TypeScript" },
25
+ { value: "python", label: "Python" },
26
+ { value: "java", label: "Java" },
27
+ { value: "csharp", label: "C#" },
28
+ { value: "cpp", label: "C++" },
29
+ { value: "c", label: "C" },
30
+ { value: "php", label: "PHP" },
31
+ { value: "ruby", label: "Ruby" },
32
+ { value: "go", label: "Go" },
33
+ { value: "rust", label: "Rust" },
34
+ { value: "swift", label: "Swift" },
35
+ { value: "kotlin", label: "Kotlin" },
36
+ { value: "html", label: "HTML" },
37
+ { value: "css", label: "CSS" },
38
+ { value: "scss", label: "SCSS" },
39
+ { value: "json", label: "JSON" },
40
+ { value: "xml", label: "XML" },
41
+ { value: "yaml", label: "YAML" },
42
+ { value: "markdown", label: "Markdown" },
43
+ { value: "sql", label: "SQL" },
44
+ { value: "bash", label: "Bash" },
45
+ { value: "shell", label: "Shell" },
46
+ { value: "plaintext", label: "Plain Text" }
47
+ ], k = /* @__PURE__ */ new Map();
48
+ function w(d, r, e, a) {
49
+ const p = !!r, o = a || "javascript", x = e || "", l = document.createElement("div");
50
+ l.className = "rte-code-sample-overlay", l.style.cssText = `
51
+ position: fixed;
52
+ top: 0;
53
+ left: 0;
54
+ right: 0;
55
+ bottom: 0;
56
+ background: rgba(0, 0, 0, 0.5);
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ z-index: 10000;
61
+ animation: fadeIn 160ms ease-out;
62
+ `;
63
+ const i = document.createElement("div");
64
+ i.className = "rte-code-sample-dialog", i.style.cssText = `
65
+ background: #fff;
66
+ border-radius: 8px;
67
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
68
+ max-width: 700px;
69
+ width: 90vw;
70
+ max-height: 80vh;
71
+ display: flex;
72
+ flex-direction: column;
73
+ animation: slideUp 200ms cubic-bezier(0.2, 0.9, 0.25, 1);
74
+ `;
75
+ const s = document.createElement("div");
76
+ s.style.cssText = `
77
+ padding: 20px;
78
+ border-bottom: 1px solid #e0e0e0;
79
+ display: flex;
80
+ justify-content: space-between;
81
+ align-items: center;
82
+ `, s.innerHTML = `
83
+ <h2 style="margin: 0; font-size: 18px; font-weight: 600; color: #333;">
84
+ ${p ? "Edit Code Sample" : "Insert Code Sample"}
85
+ </h2>
86
+ <button class="rte-code-close-btn" style="background: none; border: none; font-size: 28px; color: #999; cursor: pointer; padding: 0; width: 32px; height: 32px;">×</button>
87
+ `;
88
+ const t = document.createElement("div");
89
+ t.style.cssText = `
90
+ flex: 1;
91
+ overflow-y: auto;
92
+ padding: 20px;
93
+ `;
94
+ const u = document.createElement("div");
95
+ u.style.marginBottom = "20px", u.innerHTML = `
96
+ <label style="display: block; margin-bottom: 8px; font-weight: 500; color: #333; font-size: 14px;">Language</label>
97
+ <select class="rte-code-language" style="
98
+ width: 100%;
99
+ padding: 10px 12px;
100
+ border: 1px solid #ddd;
101
+ border-radius: 4px;
102
+ font-size: 14px;
103
+ background-color: #fff;
104
+ cursor: pointer;
105
+ ">
106
+ ${z.map((n) => `
107
+ <option value="${n.value}" ${n.value === o ? "selected" : ""}>
108
+ ${n.label}
109
+ </option>
110
+ `).join("")}
111
+ </select>
112
+ `;
113
+ const b = document.createElement("div");
114
+ b.style.marginBottom = "20px", b.innerHTML = `
115
+ <label style="display: block; margin-bottom: 8px; font-weight: 500; color: #333; font-size: 14px;">Code</label>
116
+ <textarea class="rte-code-textarea" spellcheck="false" placeholder="Paste or type your code here..." style="
117
+ width: 100%;
118
+ padding: 12px;
119
+ border: 1px solid #ddd;
120
+ border-radius: 4px;
121
+ font-family: 'Courier New', Courier, monospace;
122
+ font-size: 13px;
123
+ line-height: 1.5;
124
+ resize: vertical;
125
+ min-height: 250px;
126
+ max-height: 400px;
127
+ background-color: #f9f9f9;
128
+ color: #333;
129
+ box-sizing: border-box;
130
+ ">${x}</textarea>
131
+ <div class="rte-code-error" style="color: #dc2626; font-size: 12px; margin-top: 6px; display: none;"></div>
132
+ `;
133
+ const c = document.createElement("div");
134
+ c.style.cssText = "color: #666; font-size: 12px; margin-top: 10px;", c.innerHTML = "💡 Tip: Press Ctrl+Enter (or Cmd+Enter on Mac) to save, or Escape to cancel", t.appendChild(u), t.appendChild(b), t.appendChild(c);
135
+ const m = document.createElement("div");
136
+ m.style.cssText = `
137
+ padding: 20px;
138
+ border-top: 1px solid #e0e0e0;
139
+ display: flex;
140
+ justify-content: flex-end;
141
+ gap: 12px;
142
+ `, m.innerHTML = `
143
+ <button class="rte-code-cancel-btn" style="
144
+ padding: 10px 16px;
145
+ border: none;
146
+ border-radius: 4px;
147
+ font-size: 14px;
148
+ font-weight: 500;
149
+ cursor: pointer;
150
+ background: #e5e7eb;
151
+ color: #333;
152
+ ">Cancel</button>
153
+ <button class="rte-code-save-btn" style="
154
+ padding: 10px 16px;
155
+ border: none;
156
+ border-radius: 4px;
157
+ font-size: 14px;
158
+ font-weight: 500;
159
+ cursor: pointer;
160
+ background: #2563eb;
161
+ color: #fff;
162
+ ">${p ? "Update Code Sample" : "Insert Code Sample"}</button>
163
+ `, i.appendChild(s), i.appendChild(t), i.appendChild(m), l.appendChild(i);
164
+ const y = u.querySelector(".rte-code-language"), g = b.querySelector(".rte-code-textarea"), v = b.querySelector(".rte-code-error"), E = s.querySelector(".rte-code-close-btn"), S = m.querySelector(".rte-code-cancel-btn"), T = m.querySelector(".rte-code-save-btn"), f = () => {
165
+ l.remove();
166
+ }, C = () => {
167
+ const n = g.value.trim();
168
+ if (!n) {
169
+ v.textContent = "⚠ Code cannot be empty", v.style.display = "block";
170
+ return;
171
+ }
172
+ const L = y.value;
173
+ d(n, L), f();
174
+ };
175
+ if (E.onclick = f, S.onclick = f, T.onclick = C, g.addEventListener("keydown", (n) => {
176
+ (n.ctrlKey || n.metaKey) && n.key === "Enter" && (n.preventDefault(), C()), n.key === "Escape" && f();
177
+ }), g.addEventListener("input", () => {
178
+ v.style.display = "none";
179
+ }), l.addEventListener("click", (n) => {
180
+ n.target === l && f();
181
+ }), !document.getElementById("rte-code-sample-animations")) {
182
+ const n = document.createElement("style");
183
+ n.id = "rte-code-sample-animations", n.textContent = `
184
+ @keyframes fadeIn {
185
+ from { opacity: 0; }
186
+ to { opacity: 1; }
187
+ }
188
+ @keyframes slideUp {
189
+ from { transform: translateY(20px); opacity: 0; }
190
+ to { transform: translateY(0); opacity: 1; }
191
+ }
192
+ `, document.head.appendChild(n);
193
+ }
194
+ return document.body.appendChild(l), setTimeout(() => g.focus(), 100), l;
195
+ }
196
+ function M() {
197
+ if (!h()) return;
198
+ let r = null;
199
+ const e = window.getSelection();
200
+ e && e.rangeCount > 0 && (r = e.getRangeAt(0).cloneRange()), w((a, p) => {
201
+ const o = window.getSelection();
202
+ if (r && (o == null || o.removeAllRanges(), o == null || o.addRange(r)), !o || o.rangeCount === 0) return;
203
+ const x = h();
204
+ if (!x) return;
205
+ const l = o.anchorNode;
206
+ if (!l || !x.contains(l)) return;
207
+ const i = o.getRangeAt(0), s = `code-block-${Date.now()}`, t = document.createElement("pre");
208
+ t.className = "rte-code-block", t.id = s, t.setAttribute("data-type", "code-block"), t.setAttribute("data-lang", p), t.setAttribute("data-code-id", s), t.setAttribute("contenteditable", "false"), t.style.cssText = `
209
+ display: block;
210
+ position: relative;
211
+ background: #f5f5f5;
212
+ border: 1px solid #e0e0e0;
213
+ border-radius: 6px;
214
+ padding: 12px;
215
+ margin: 12px 0;
216
+ overflow-x: auto;
217
+ font-family: 'Courier New', 'Monaco', 'Menlo', monospace;
218
+ font-size: 13px;
219
+ line-height: 1.5;
220
+ color: #333;
221
+ user-select: text;
222
+ cursor: default;
223
+ `;
224
+ const u = document.createElement("code");
225
+ u.className = `language-${p}`, u.style.cssText = `
226
+ font-family: inherit;
227
+ font-size: inherit;
228
+ line-height: inherit;
229
+ color: inherit;
230
+ white-space: pre;
231
+ word-break: normal;
232
+ display: block;
233
+ `, u.textContent = a;
234
+ const b = document.createElement("span");
235
+ b.style.cssText = `
236
+ position: absolute;
237
+ top: 0;
238
+ right: 0;
239
+ background: #333;
240
+ color: #fff;
241
+ padding: 2px 8px;
242
+ font-size: 11px;
243
+ font-weight: bold;
244
+ border-radius: 0 6px 0 4px;
245
+ text-transform: uppercase;
246
+ letter-spacing: 0.5px;
247
+ pointer-events: none;
248
+ `, b.textContent = p;
249
+ const c = document.createElement("button");
250
+ c.className = "rte-code-copy", c.textContent = "Copy", c.style.cssText = `
251
+ position: absolute;
252
+ top: 8px;
253
+ left: 8px;
254
+ background: #fff;
255
+ border: 1px solid #d0d0d0;
256
+ border-radius: 3px;
257
+ padding: 4px 8px;
258
+ font-size: 11px;
259
+ cursor: pointer;
260
+ opacity: 0;
261
+ transition: opacity 0.2s ease;
262
+ `, c.onclick = (y) => {
263
+ y.stopPropagation(), navigator.clipboard.writeText(a).then(() => {
264
+ c.textContent = "✓ Copied!", setTimeout(() => {
265
+ c.textContent = "Copy";
266
+ }, 2e3);
267
+ });
268
+ }, t.appendChild(b), t.appendChild(c), t.appendChild(u), t.addEventListener("mouseenter", () => {
269
+ c.style.opacity = "1";
270
+ }), t.addEventListener("mouseleave", () => {
271
+ c.style.opacity = "0";
272
+ }), t.addEventListener("dblclick", () => {
273
+ A(s);
274
+ }), k.set(s, {
275
+ id: s,
276
+ language: p,
277
+ code: a
278
+ }), i.insertNode(t);
279
+ const m = document.createRange();
280
+ m.setStartAfter(t), m.collapse(!0), o.removeAllRanges(), o.addRange(m);
281
+ });
282
+ }
283
+ function A(d) {
284
+ const r = h();
285
+ if (!r) return;
286
+ const e = r.querySelector(`#${d}`);
287
+ if (!e) return;
288
+ const a = k.get(d);
289
+ a && w(
290
+ (p, o) => {
291
+ const x = e.querySelector("code");
292
+ x && (x.textContent = p, x.className = `language-${o}`);
293
+ const l = e.querySelector("span");
294
+ l && (l.textContent = o), e.setAttribute("data-lang", o), a.language = o, a.code = p;
295
+ const i = e.querySelector(".rte-code-copy");
296
+ i && (i.onclick = (s) => {
297
+ s.stopPropagation(), navigator.clipboard.writeText(p).then(() => {
298
+ i.textContent = "✓ Copied!", setTimeout(() => {
299
+ i.textContent = "Copy";
300
+ }, 2e3);
301
+ });
302
+ });
303
+ },
304
+ d,
305
+ a.code,
306
+ a.language
307
+ );
308
+ }
309
+ const N = () => ({
310
+ name: "codeSample",
311
+ toolbar: [
312
+ {
313
+ label: "Code Block",
314
+ command: "insertCodeBlock",
315
+ icon: '<svg width="18px" height="18px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7 8L3 11.6923L7 16M17 8L21 11.6923L17 16M14 4L10 20" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>',
316
+ shortcut: "Mod-Shift-C"
317
+ }
318
+ ],
319
+ commands: {
320
+ insertCodeBlock: (...d) => (M(), !0)
321
+ }
322
+ });
323
+ export {
324
+ N as CodeSamplePlugin
325
+ };
326
+ //# sourceMappingURL=CodeSamplePlugin.native-DMbEdO9j.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeSamplePlugin.native-DMbEdO9j.mjs","sources":["../../plugins/code-sample/src/CodeSamplePlugin.native.ts"],"sourcesContent":["import { Plugin } from '@editora/core';\n\n/**\n * Code Sample Plugin - Native Implementation\n * \n * Provides immutable code block insertion with:\n * - Dialog-based editing (read-only inside editor)\n * - Syntax highlighting support\n * - Language selection\n * - Copy code functionality\n * - Edit/Delete capabilities\n * - 24+ supported languages\n */\n\n// ===== Multi-Instance Helper =====\nconst findActiveEditor = (): HTMLElement | null => {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n let node: Node | null = selection.getRangeAt(0).startContainer;\n while (node && node !== document.body) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.getAttribute('contenteditable') === 'true') {\n return element;\n }\n }\n node = node.parentNode;\n }\n }\n \n const activeElement = document.activeElement;\n if (activeElement) {\n if (activeElement.getAttribute('contenteditable') === 'true') {\n return activeElement as HTMLElement;\n }\n const editor = activeElement.closest('[contenteditable=\"true\"]');\n if (editor) return editor as HTMLElement;\n }\n \n return document.querySelector('[contenteditable=\"true\"]');\n};\n\n// ===== Supported Languages =====\nconst SUPPORTED_LANGUAGES = [\n { value: 'javascript', label: 'JavaScript' },\n { value: 'typescript', label: 'TypeScript' },\n { value: 'python', label: 'Python' },\n { value: 'java', label: 'Java' },\n { value: 'csharp', label: 'C#' },\n { value: 'cpp', label: 'C++' },\n { value: 'c', label: 'C' },\n { value: 'php', label: 'PHP' },\n { value: 'ruby', label: 'Ruby' },\n { value: 'go', label: 'Go' },\n { value: 'rust', label: 'Rust' },\n { value: 'swift', label: 'Swift' },\n { value: 'kotlin', label: 'Kotlin' },\n { value: 'html', label: 'HTML' },\n { value: 'css', label: 'CSS' },\n { value: 'scss', label: 'SCSS' },\n { value: 'json', label: 'JSON' },\n { value: 'xml', label: 'XML' },\n { value: 'yaml', label: 'YAML' },\n { value: 'markdown', label: 'Markdown' },\n { value: 'sql', label: 'SQL' },\n { value: 'bash', label: 'Bash' },\n { value: 'shell', label: 'Shell' },\n { value: 'plaintext', label: 'Plain Text' }\n];\n\n// ===== Code Block Registry =====\ninterface CodeBlockData {\n id: string;\n language: string;\n code: string;\n}\n\nconst codeBlockRegistry = new Map<string, CodeBlockData>();\n\n// ===== Dialog Creation =====\nlet activeDialog: HTMLElement | null = null;\n\nfunction createCodeSampleDialog(\n onSave: (code: string, language: string) => void,\n editingCodeId?: string,\n editingCode?: string,\n editingLanguage?: string\n): HTMLElement {\n const isEditing = !!editingCodeId;\n const initialLanguage = editingLanguage || 'javascript';\n const initialCode = editingCode || '';\n\n const overlay = document.createElement('div');\n overlay.className = 'rte-code-sample-overlay';\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n animation: fadeIn 160ms ease-out;\n `;\n\n const dialog = document.createElement('div');\n dialog.className = 'rte-code-sample-dialog';\n dialog.style.cssText = `\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n max-width: 700px;\n width: 90vw;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n animation: slideUp 200ms cubic-bezier(0.2, 0.9, 0.25, 1);\n `;\n\n // Header\n const header = document.createElement('div');\n header.style.cssText = `\n padding: 20px;\n border-bottom: 1px solid #e0e0e0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n `;\n header.innerHTML = `\n <h2 style=\"margin: 0; font-size: 18px; font-weight: 600; color: #333;\">\n ${isEditing ? 'Edit Code Sample' : 'Insert Code Sample'}\n </h2>\n <button class=\"rte-code-close-btn\" style=\"background: none; border: none; font-size: 28px; color: #999; cursor: pointer; padding: 0; width: 32px; height: 32px;\">×</button>\n `;\n\n // Body\n const body = document.createElement('div');\n body.style.cssText = `\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n `;\n\n // Language selector\n const languageGroup = document.createElement('div');\n languageGroup.style.marginBottom = '20px';\n languageGroup.innerHTML = `\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500; color: #333; font-size: 14px;\">Language</label>\n <select class=\"rte-code-language\" style=\"\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n background-color: #fff;\n cursor: pointer;\n \">\n ${SUPPORTED_LANGUAGES.map(lang => `\n <option value=\"${lang.value}\" ${lang.value === initialLanguage ? 'selected' : ''}>\n ${lang.label}\n </option>\n `).join('')}\n </select>\n `;\n\n // Code textarea\n const codeGroup = document.createElement('div');\n codeGroup.style.marginBottom = '20px';\n codeGroup.innerHTML = `\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500; color: #333; font-size: 14px;\">Code</label>\n <textarea class=\"rte-code-textarea\" spellcheck=\"false\" placeholder=\"Paste or type your code here...\" style=\"\n width: 100%;\n padding: 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-family: 'Courier New', Courier, monospace;\n font-size: 13px;\n line-height: 1.5;\n resize: vertical;\n min-height: 250px;\n max-height: 400px;\n background-color: #f9f9f9;\n color: #333;\n box-sizing: border-box;\n \">${initialCode}</textarea>\n <div class=\"rte-code-error\" style=\"color: #dc2626; font-size: 12px; margin-top: 6px; display: none;\"></div>\n `;\n\n // Help text\n const help = document.createElement('div');\n help.style.cssText = 'color: #666; font-size: 12px; margin-top: 10px;';\n help.innerHTML = '💡 Tip: Press Ctrl+Enter (or Cmd+Enter on Mac) to save, or Escape to cancel';\n\n body.appendChild(languageGroup);\n body.appendChild(codeGroup);\n body.appendChild(help);\n\n // Footer\n const footer = document.createElement('div');\n footer.style.cssText = `\n padding: 20px;\n border-top: 1px solid #e0e0e0;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n `;\n footer.innerHTML = `\n <button class=\"rte-code-cancel-btn\" style=\"\n padding: 10px 16px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n background: #e5e7eb;\n color: #333;\n \">Cancel</button>\n <button class=\"rte-code-save-btn\" style=\"\n padding: 10px 16px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n background: #2563eb;\n color: #fff;\n \">${isEditing ? 'Update Code Sample' : 'Insert Code Sample'}</button>\n `;\n\n dialog.appendChild(header);\n dialog.appendChild(body);\n dialog.appendChild(footer);\n overlay.appendChild(dialog);\n\n // Event handlers\n const languageSelect = languageGroup.querySelector('.rte-code-language') as HTMLSelectElement;\n const textarea = codeGroup.querySelector('.rte-code-textarea') as HTMLTextAreaElement;\n const errorDiv = codeGroup.querySelector('.rte-code-error') as HTMLDivElement;\n const closeBtn = header.querySelector('.rte-code-close-btn') as HTMLButtonElement;\n const cancelBtn = footer.querySelector('.rte-code-cancel-btn') as HTMLButtonElement;\n const saveBtn = footer.querySelector('.rte-code-save-btn') as HTMLButtonElement;\n\n const closeDialog = () => {\n overlay.remove();\n activeDialog = null;\n };\n\n const handleSave = () => {\n const code = textarea.value.trim();\n if (!code) {\n errorDiv.textContent = '⚠ Code cannot be empty';\n errorDiv.style.display = 'block';\n return;\n }\n\n const language = languageSelect.value;\n onSave(code, language);\n closeDialog();\n };\n\n closeBtn.onclick = closeDialog;\n cancelBtn.onclick = closeDialog;\n saveBtn.onclick = handleSave;\n\n // Keyboard shortcuts\n textarea.addEventListener('keydown', (e) => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n handleSave();\n }\n if (e.key === 'Escape') {\n closeDialog();\n }\n });\n\n // Clear error on input\n textarea.addEventListener('input', () => {\n errorDiv.style.display = 'none';\n });\n\n // Click outside to close\n overlay.addEventListener('click', (e) => {\n if (e.target === overlay) {\n closeDialog();\n }\n });\n\n // Add keyframe animations\n if (!document.getElementById('rte-code-sample-animations')) {\n const style = document.createElement('style');\n style.id = 'rte-code-sample-animations';\n style.textContent = `\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes slideUp {\n from { transform: translateY(20px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n }\n\n activeDialog = overlay;\n document.body.appendChild(overlay);\n setTimeout(() => textarea.focus(), 100);\n\n return overlay;\n}\n\n// ===== Insert Code Block =====\nfunction insertCodeBlock() {\n const editor = findActiveEditor();\n if (!editor) return;\n\n // Save the current selection range before opening the dialog\n let savedRange: Range | null = null;\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n savedRange = selection.getRangeAt(0).cloneRange();\n }\n\n createCodeSampleDialog((code, language) => {\n // Restore the selection before inserting\n const selection = window.getSelection();\n if (savedRange) {\n selection?.removeAllRanges();\n selection?.addRange(savedRange);\n }\n if (!selection || selection.rangeCount === 0) return;\n\n // Ensure selection is inside the correct editor instance\n const editorEl = findActiveEditor();\n if (!editorEl) return;\n const anchorNode = selection.anchorNode;\n if (!anchorNode || !editorEl.contains(anchorNode)) return;\n\n const range = selection.getRangeAt(0);\n const codeBlockId = `code-block-${Date.now()}`;\n\n // Create code block container\n const pre = document.createElement('pre');\n pre.className = 'rte-code-block';\n pre.id = codeBlockId;\n pre.setAttribute('data-type', 'code-block');\n pre.setAttribute('data-lang', language);\n pre.setAttribute('data-code-id', codeBlockId);\n pre.setAttribute('contenteditable', 'false');\n pre.style.cssText = `\n display: block;\n position: relative;\n background: #f5f5f5;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n padding: 12px;\n margin: 12px 0;\n overflow-x: auto;\n font-family: 'Courier New', 'Monaco', 'Menlo', monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #333;\n user-select: text;\n cursor: default;\n `;\n\n // Create code element\n const codeEl = document.createElement('code');\n codeEl.className = `language-${language}`;\n codeEl.style.cssText = `\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n color: inherit;\n white-space: pre;\n word-break: normal;\n display: block;\n `;\n codeEl.textContent = code;\n\n // Language badge\n const badge = document.createElement('span');\n badge.style.cssText = `\n position: absolute;\n top: 0;\n right: 0;\n background: #333;\n color: #fff;\n padding: 2px 8px;\n font-size: 11px;\n font-weight: bold;\n border-radius: 0 6px 0 4px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n pointer-events: none;\n `;\n badge.textContent = language;\n\n // Copy button\n const copyBtn = document.createElement('button');\n copyBtn.className = 'rte-code-copy';\n copyBtn.textContent = 'Copy';\n copyBtn.style.cssText = `\n position: absolute;\n top: 8px;\n left: 8px;\n background: #fff;\n border: 1px solid #d0d0d0;\n border-radius: 3px;\n padding: 4px 8px;\n font-size: 11px;\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.2s ease;\n `;\n\n copyBtn.onclick = (e) => {\n e.stopPropagation();\n navigator.clipboard.writeText(code).then(() => {\n copyBtn.textContent = '✓ Copied!';\n setTimeout(() => {\n copyBtn.textContent = 'Copy';\n }, 2000);\n });\n };\n\n pre.appendChild(badge);\n pre.appendChild(copyBtn);\n pre.appendChild(codeEl);\n\n // Show copy button on hover\n pre.addEventListener('mouseenter', () => {\n copyBtn.style.opacity = '1';\n });\n pre.addEventListener('mouseleave', () => {\n copyBtn.style.opacity = '0';\n });\n\n // Double-click to edit\n pre.addEventListener('dblclick', () => {\n editCodeBlock(codeBlockId);\n });\n\n // Register code block\n codeBlockRegistry.set(codeBlockId, {\n id: codeBlockId,\n language,\n code\n });\n\n // Insert at cursor\n range.insertNode(pre);\n\n // Move cursor after code block\n const newRange = document.createRange();\n newRange.setStartAfter(pre);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n });\n}\n\n// ===== Edit Code Block =====\nfunction editCodeBlock(codeBlockId: string) {\n const editor = findActiveEditor();\n if (!editor) return;\n\n const codeBlock = editor.querySelector(`#${codeBlockId}`) as HTMLPreElement;\n if (!codeBlock) return;\n\n const blockData = codeBlockRegistry.get(codeBlockId);\n if (!blockData) return;\n\n createCodeSampleDialog(\n (code, language) => {\n // Update code block\n const codeEl = codeBlock.querySelector('code');\n if (codeEl) {\n codeEl.textContent = code;\n codeEl.className = `language-${language}`;\n }\n\n // Update badge\n const badge = codeBlock.querySelector('span');\n if (badge) {\n badge.textContent = language;\n }\n\n // Update attributes\n codeBlock.setAttribute('data-lang', language);\n\n // Update registry\n blockData.language = language;\n blockData.code = code;\n\n // Update copy button\n const copyBtn = codeBlock.querySelector('.rte-code-copy') as HTMLButtonElement;\n if (copyBtn) {\n copyBtn.onclick = (e) => {\n e.stopPropagation();\n navigator.clipboard.writeText(code).then(() => {\n copyBtn.textContent = '✓ Copied!';\n setTimeout(() => {\n copyBtn.textContent = 'Copy';\n }, 2000);\n });\n };\n }\n },\n codeBlockId,\n blockData.code,\n blockData.language\n );\n}\n\n// ===== Plugin Export =====\nexport const CodeSamplePlugin = (): Plugin => ({\n name: 'codeSample',\n \n toolbar: [\n {\n label: 'Code Block',\n command: 'insertCodeBlock',\n icon: '<svg width=\"18px\" height=\"18px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 8L3 11.6923L7 16M17 8L21 11.6923L17 16M14 4L10 20\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>',\n shortcut: 'Mod-Shift-C'\n }\n ],\n \n commands: {\n insertCodeBlock: (...args: any[]) => {\n insertCodeBlock();\n return true;\n }\n },\n \n});\n"],"names":["findActiveEditor","selection","node","element","activeElement","editor","SUPPORTED_LANGUAGES","codeBlockRegistry","createCodeSampleDialog","onSave","editingCodeId","editingCode","editingLanguage","isEditing","initialLanguage","initialCode","overlay","dialog","header","body","languageGroup","lang","codeGroup","help","footer","languageSelect","textarea","errorDiv","closeBtn","cancelBtn","saveBtn","closeDialog","handleSave","code","language","e","style","insertCodeBlock","savedRange","editorEl","anchorNode","range","codeBlockId","pre","codeEl","badge","copyBtn","editCodeBlock","newRange","codeBlock","blockData","CodeSamplePlugin","args"],"mappings":"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"}