@notectl/core 2.3.1 → 2.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/THIRD-PARTY-NOTICES.md +129 -0
- package/dist/chunks/{AlignmentPlugin--xAFlRqE.mjs → AlignmentPlugin-C9Rr_R-g.mjs} +2 -2
- package/dist/chunks/{AlignmentPlugin--xAFlRqE.mjs.map → AlignmentPlugin-C9Rr_R-g.mjs.map} +1 -1
- package/dist/chunks/{AttributedMarkCommands-bagbH8Qt.mjs → AttributedMarkCommands-BCvmqeFZ.mjs} +2 -2
- package/dist/chunks/{AttributedMarkCommands-bagbH8Qt.mjs.map → AttributedMarkCommands-BCvmqeFZ.mjs.map} +1 -1
- package/dist/chunks/{BidiIsolationPlugin-DBXyXpgm.mjs → BidiIsolationPlugin-Cw2KMk-H.mjs} +2 -2
- package/dist/chunks/{BidiIsolationPlugin-DBXyXpgm.mjs.map → BidiIsolationPlugin-Cw2KMk-H.mjs.map} +1 -1
- package/dist/chunks/{BlockInsertion-CJusvrDL.mjs → BlockInsertion-CYH2gRkY.mjs} +2 -2
- package/dist/chunks/{BlockInsertion-CJusvrDL.mjs.map → BlockInsertion-CYH2gRkY.mjs.map} +1 -1
- package/dist/chunks/{BlockquotePlugin-Bz2glHwX.mjs → BlockquotePlugin-0bZSbkyo.mjs} +2 -2
- package/dist/chunks/{BlockquotePlugin-Bz2glHwX.mjs.map → BlockquotePlugin-0bZSbkyo.mjs.map} +1 -1
- package/dist/chunks/CaretNavigationPlugin-BPZ9b6XR.mjs +2 -0
- package/dist/chunks/CaretNavigationPlugin-BPZ9b6XR.mjs.map +1 -0
- package/dist/chunks/CodeBlockPlugin-BCJ3faXx.mjs +2 -0
- package/dist/chunks/{CodeBlockPlugin-C1hrdbSZ.mjs.map → CodeBlockPlugin-BCJ3faXx.mjs.map} +1 -1
- package/dist/chunks/{ColorGrid-C9RQoEWF.mjs → ColorGrid-DQEkJ-0y.mjs} +2 -2
- package/dist/chunks/{ColorGrid-C9RQoEWF.mjs.map → ColorGrid-DQEkJ-0y.mjs.map} +1 -1
- package/dist/chunks/ColorPickerPopup-CyF26zIU.mjs +2 -0
- package/dist/chunks/{ColorPickerPopup-DiA68Pzz.mjs.map → ColorPickerPopup-CyF26zIU.mjs.map} +1 -1
- package/dist/chunks/Commands-D5ND50PQ.mjs +2 -0
- package/dist/chunks/{Commands-1dFFldi7.mjs.map → Commands-D5ND50PQ.mjs.map} +1 -1
- package/dist/chunks/{Decoration-BpoEOANl.mjs → Decoration-BOP1TAUd.mjs} +2 -2
- package/dist/chunks/{Decoration-BpoEOANl.mjs.map → Decoration-BOP1TAUd.mjs.map} +1 -1
- package/dist/chunks/{FontPlugin-By-TGrQo.mjs → FontPlugin-D041tiLe.mjs} +2 -2
- package/dist/chunks/{FontPlugin-By-TGrQo.mjs.map → FontPlugin-D041tiLe.mjs.map} +1 -1
- package/dist/chunks/{FontSizePlugin-Dln-tYXV.mjs → FontSizePlugin-8CAvj1RD.mjs} +2 -2
- package/dist/chunks/{FontSizePlugin-Dln-tYXV.mjs.map → FontSizePlugin-8CAvj1RD.mjs.map} +1 -1
- package/dist/chunks/{FormulaPlugin-By1befrR.mjs → FormulaPlugin-DJ39BtqV.mjs} +2 -2
- package/dist/chunks/FormulaPlugin-DJ39BtqV.mjs.map +1 -0
- package/dist/chunks/GapCursorNavigation-DCWOmopl.mjs +2 -0
- package/dist/chunks/{GapCursorNavigation-BuXngVu-.mjs.map → GapCursorNavigation-DCWOmopl.mjs.map} +1 -1
- package/dist/chunks/GapCursorPlugin-2iR6506y.mjs +2 -0
- package/dist/chunks/{GapCursorPlugin-DAxVzXRs.mjs.map → GapCursorPlugin-2iR6506y.mjs.map} +1 -1
- package/dist/chunks/{HardBreakPlugin-DlbSlrdq.mjs → HardBreakPlugin-vniSvTgq.mjs} +2 -2
- package/dist/chunks/{HardBreakPlugin-DlbSlrdq.mjs.map → HardBreakPlugin-vniSvTgq.mjs.map} +1 -1
- package/dist/chunks/{HeadingPlugin-uMAjPOk5.mjs → HeadingPlugin-DUKsLuMd.mjs} +2 -2
- package/dist/chunks/{HeadingPlugin-uMAjPOk5.mjs.map → HeadingPlugin-DUKsLuMd.mjs.map} +1 -1
- package/dist/chunks/{HighlightPlugin-Bj7FPkIQ.mjs → HighlightPlugin-DRTAE1N5.mjs} +2 -2
- package/dist/chunks/{HighlightPlugin-Bj7FPkIQ.mjs.map → HighlightPlugin-DRTAE1N5.mjs.map} +1 -1
- package/dist/chunks/HorizontalRulePlugin-B9OvwrKB.mjs +2 -0
- package/dist/chunks/{HorizontalRulePlugin-DUVmTQpX.mjs.map → HorizontalRulePlugin-B9OvwrKB.mjs.map} +1 -1
- package/dist/chunks/{ImagePlugin-FToCOjd5.mjs → ImagePlugin-CwxTRr6d.mjs} +2 -2
- package/dist/chunks/{ImagePlugin-FToCOjd5.mjs.map → ImagePlugin-CwxTRr6d.mjs.map} +1 -1
- package/dist/chunks/{InlineCodePlugin-pISIoGQE.mjs → InlineCodePlugin-uxgMUX_E.mjs} +2 -2
- package/dist/chunks/{InlineCodePlugin-pISIoGQE.mjs.map → InlineCodePlugin-uxgMUX_E.mjs.map} +1 -1
- package/dist/chunks/{LinkPlugin-Ct5Z180S.mjs → LinkPlugin-CvWHbSkb.mjs} +2 -2
- package/dist/chunks/{LinkPlugin-Ct5Z180S.mjs.map → LinkPlugin-CvWHbSkb.mjs.map} +1 -1
- package/dist/chunks/{ListPlugin-DAY5ezNs.mjs → ListPlugin-BchSFWVn.mjs} +2 -2
- package/dist/chunks/{ListPlugin-DAY5ezNs.mjs.map → ListPlugin-BchSFWVn.mjs.map} +1 -1
- package/dist/chunks/{MarkdownHTMLRegistry-CKEx7LkR.mjs → MarkdownHTMLRegistry-Q7l0d6Ma.mjs} +2 -2
- package/dist/chunks/{MarkdownHTMLRegistry-CKEx7LkR.mjs.map → MarkdownHTMLRegistry-Q7l0d6Ma.mjs.map} +1 -1
- package/dist/chunks/{MarkdownParser-CWt3M6jR.mjs → MarkdownParser-Dp62mfUq.mjs} +2 -2
- package/dist/chunks/{MarkdownParser-CWt3M6jR.mjs.map → MarkdownParser-Dp62mfUq.mjs.map} +1 -1
- package/dist/chunks/{MarkdownSerializer-J-i28out.mjs → MarkdownSerializer-DBELFAeo.mjs} +2 -2
- package/dist/chunks/{MarkdownSerializer-J-i28out.mjs.map → MarkdownSerializer-DBELFAeo.mjs.map} +1 -1
- package/dist/chunks/MathFont-BS8IwYh2.mjs +2 -0
- package/dist/chunks/MathFont-BS8IwYh2.mjs.map +1 -0
- package/dist/chunks/NodeSelectionCommands-WH5snxr_.mjs +2 -0
- package/dist/chunks/{NodeSelectionCommands-1PjwUDTJ.mjs.map → NodeSelectionCommands-WH5snxr_.mjs.map} +1 -1
- package/dist/chunks/PluginHelpers-KDuTlmXm.mjs +2 -0
- package/dist/chunks/{PluginHelpers-Dx_0hfDe.mjs.map → PluginHelpers-KDuTlmXm.mjs.map} +1 -1
- package/dist/chunks/{PopupManager-CT-fMZJn.mjs → PopupManager-Cj86uDEB.mjs} +2 -2
- package/dist/chunks/{PopupManager-CT-fMZJn.mjs.map → PopupManager-Cj86uDEB.mjs.map} +1 -1
- package/dist/chunks/PrintPlugin-D2javl_d.mjs +2 -0
- package/dist/chunks/{PrintPlugin-7zz9mhhU.mjs.map → PrintPlugin-D2javl_d.mjs.map} +1 -1
- package/dist/chunks/SimpleMark-gTQaSJcO.mjs +2 -0
- package/dist/chunks/{SimpleMark-7CQcA4RK.mjs.map → SimpleMark-gTQaSJcO.mjs.map} +1 -1
- package/dist/chunks/SmartPastePlugin-BvJQ-fOz.mjs +2 -0
- package/dist/chunks/SmartPastePlugin-BvJQ-fOz.mjs.map +1 -0
- package/dist/chunks/StarterFonts-BDQPg-cu.mjs +2 -0
- package/dist/chunks/StarterFonts-BDQPg-cu.mjs.map +1 -0
- package/dist/chunks/{StrikethroughPlugin-C2oWvGc3.mjs → StrikethroughPlugin-BdrG1TTY.mjs} +2 -2
- package/dist/chunks/{StrikethroughPlugin-C2oWvGc3.mjs.map → StrikethroughPlugin-BdrG1TTY.mjs.map} +1 -1
- package/dist/chunks/{SuperSubPlugin-D1xaKrSu.mjs → SuperSubPlugin-DTZB0Y3D.mjs} +2 -2
- package/dist/chunks/{SuperSubPlugin-D1xaKrSu.mjs.map → SuperSubPlugin-DTZB0Y3D.mjs.map} +1 -1
- package/dist/chunks/{TablePlugin-PJe3zwr-.mjs → TablePlugin-CPvg9YZS.mjs} +2 -2
- package/dist/chunks/{TablePlugin-PJe3zwr-.mjs.map → TablePlugin-CPvg9YZS.mjs.map} +1 -1
- package/dist/chunks/{TextColorPlugin-CTd9tfeG.mjs → TextColorPlugin-Ckg3KWvb.mjs} +2 -2
- package/dist/chunks/{TextColorPlugin-CTd9tfeG.mjs.map → TextColorPlugin-Ckg3KWvb.mjs.map} +1 -1
- package/dist/chunks/{TextDirectionAutoPlugin-CPnKVVuI.mjs → TextDirectionAutoPlugin-DRGbgTlx.mjs} +2 -2
- package/dist/chunks/{TextDirectionAutoPlugin-CPnKVVuI.mjs.map → TextDirectionAutoPlugin-DRGbgTlx.mjs.map} +1 -1
- package/dist/chunks/TextDirectionPlugin-BCeYyJHo.mjs +2 -0
- package/dist/chunks/{TextDirectionPlugin-Bns_03vL.mjs.map → TextDirectionPlugin-BCeYyJHo.mjs.map} +1 -1
- package/dist/chunks/TextDirectionService-OFOU6r_s.mjs +2 -0
- package/dist/chunks/{TextDirectionService-BcX07mw2.mjs.map → TextDirectionService-OFOU6r_s.mjs.map} +1 -1
- package/dist/chunks/TextFormattingPlugin-BhRxSC8q.mjs +2 -0
- package/dist/chunks/{TextFormattingPlugin-DBVlePqj.mjs.map → TextFormattingPlugin-BhRxSC8q.mjs.map} +1 -1
- package/dist/chunks/ThemeEngine-BUVo_zaT.mjs +3 -0
- package/dist/chunks/ThemeEngine-BUVo_zaT.mjs.map +1 -0
- package/dist/chunks/ToolbarPlugin-dmTj1jIz.mjs +2 -0
- package/dist/chunks/{ToolbarPlugin-DtfGTO_V.mjs.map → ToolbarPlugin-dmTj1jIz.mjs.map} +1 -1
- package/dist/chunks/{VideoPlugin-BrR8g6Rz.mjs → VideoPlugin-BugkI7-m.mjs} +2 -2
- package/dist/chunks/{VideoPlugin-BrR8g6Rz.mjs.map → VideoPlugin-BugkI7-m.mjs.map} +1 -1
- package/dist/chunks/XmlSupport-DIXH5on9.mjs +2 -0
- package/dist/chunks/XmlSupport-DIXH5on9.mjs.map +1 -0
- package/dist/chunks/full-JM0-SwWy.mjs +2 -0
- package/dist/chunks/{full-DSWM4cKQ.mjs.map → full-JM0-SwWy.mjs.map} +1 -1
- package/dist/chunks/minimal-DSlR2A27.mjs +2 -0
- package/dist/chunks/{minimal-CFkkPXef.mjs.map → minimal-DSlR2A27.mjs.map} +1 -1
- package/dist/chunks/register-BjsdJ3Aq.mjs +2 -0
- package/dist/chunks/register-BjsdJ3Aq.mjs.map +1 -0
- package/dist/chunks/src-5GKFQ2mQ.mjs +2 -0
- package/dist/chunks/src-5GKFQ2mQ.mjs.map +1 -0
- package/dist/chunks/xml-BsV44TrJ.mjs +2 -0
- package/dist/chunks/xml-BsV44TrJ.mjs.map +1 -0
- package/dist/editor/NotectlEditor.d.ts.map +1 -1
- package/dist/fonts/math.d.ts +3 -0
- package/dist/fonts/math.d.ts.map +1 -0
- package/dist/fonts/math.mjs +1 -0
- package/dist/fonts/starter.d.ts +3 -0
- package/dist/fonts/starter.d.ts.map +1 -0
- package/dist/fonts/starter.mjs +1 -0
- package/dist/fonts.d.ts +4 -4
- package/dist/fonts.mjs +1 -1
- package/dist/full.d.ts +1 -1
- package/dist/full.mjs +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/markdown.mjs +1 -1
- package/dist/notectl-core.mjs +1 -1
- package/dist/notectl-core.umd.js +1 -1
- package/dist/notectl-core.umd.js.map +1 -1
- package/dist/plugins/alignment.mjs +1 -1
- package/dist/plugins/bidi-isolation.mjs +1 -1
- package/dist/plugins/blockquote.mjs +1 -1
- package/dist/plugins/caret-navigation.mjs +1 -1
- package/dist/plugins/code-block/CodeBlockHighlighting.d.ts.map +1 -1
- package/dist/plugins/code-block.mjs +1 -1
- package/dist/plugins/font-size.mjs +1 -1
- package/dist/plugins/font.mjs +1 -1
- package/dist/plugins/formula/FormulaTypes.d.ts +1 -1
- package/dist/plugins/formula.mjs +1 -1
- package/dist/plugins/gap-cursor.mjs +1 -1
- package/dist/plugins/hard-break.mjs +1 -1
- package/dist/plugins/heading.mjs +1 -1
- package/dist/plugins/highlight.mjs +1 -1
- package/dist/plugins/horizontal-rule.mjs +1 -1
- package/dist/plugins/image.mjs +1 -1
- package/dist/plugins/inline-code.mjs +1 -1
- package/dist/plugins/language.mjs +1 -1
- package/dist/plugins/link.mjs +1 -1
- package/dist/plugins/list.mjs +1 -1
- package/dist/plugins/print.mjs +1 -1
- package/dist/plugins/shared.mjs +1 -1
- package/dist/plugins/smart-paste/SmartPastePlugin.d.ts.map +1 -1
- package/dist/plugins/smart-paste.mjs +1 -1
- package/dist/plugins/strikethrough.mjs +1 -1
- package/dist/plugins/super-sub.mjs +1 -1
- package/dist/plugins/table.mjs +1 -1
- package/dist/plugins/text-color.mjs +1 -1
- package/dist/plugins/text-direction-auto.mjs +1 -1
- package/dist/plugins/text-direction.mjs +1 -1
- package/dist/plugins/text-formatting.mjs +1 -1
- package/dist/plugins/toolbar.mjs +1 -1
- package/dist/plugins/video.mjs +1 -1
- package/dist/presets/full.d.ts +1 -1
- package/dist/presets/full.mjs +1 -1
- package/dist/presets/minimal.d.ts +1 -1
- package/dist/presets/minimal.mjs +1 -1
- package/dist/presets.d.ts +1 -1
- package/dist/presets.mjs +1 -1
- package/dist/register.d.ts +3 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.mjs +1 -0
- package/package.json +24 -223
- package/dist/chunks/CaretNavigationPlugin-CNsT0eb4.mjs +0 -2
- package/dist/chunks/CaretNavigationPlugin-CNsT0eb4.mjs.map +0 -1
- package/dist/chunks/CodeBlockPlugin-C1hrdbSZ.mjs +0 -2
- package/dist/chunks/ColorPickerPopup-DiA68Pzz.mjs +0 -2
- package/dist/chunks/Commands-1dFFldi7.mjs +0 -2
- package/dist/chunks/FormulaPlugin-By1befrR.mjs.map +0 -1
- package/dist/chunks/GapCursorNavigation-BuXngVu-.mjs +0 -2
- package/dist/chunks/GapCursorPlugin-DAxVzXRs.mjs +0 -2
- package/dist/chunks/HorizontalRulePlugin-DUVmTQpX.mjs +0 -2
- package/dist/chunks/NodeSelectionCommands-1PjwUDTJ.mjs +0 -2
- package/dist/chunks/PluginHelpers-Dx_0hfDe.mjs +0 -2
- package/dist/chunks/PrintPlugin-7zz9mhhU.mjs +0 -2
- package/dist/chunks/PrintTypes-CxU69qu3.mjs +0 -3
- package/dist/chunks/PrintTypes-CxU69qu3.mjs.map +0 -1
- package/dist/chunks/SimpleMark-7CQcA4RK.mjs +0 -2
- package/dist/chunks/SmartPastePlugin-CYa_nD9v.mjs +0 -2
- package/dist/chunks/SmartPastePlugin-CYa_nD9v.mjs.map +0 -1
- package/dist/chunks/TextDirectionPlugin-Bns_03vL.mjs +0 -2
- package/dist/chunks/TextDirectionService-BcX07mw2.mjs +0 -2
- package/dist/chunks/TextFormattingPlugin-DBVlePqj.mjs +0 -2
- package/dist/chunks/ToolbarPlugin-DtfGTO_V.mjs +0 -2
- package/dist/chunks/XmlDetector-D7TQpw-e.mjs +0 -2
- package/dist/chunks/XmlDetector-D7TQpw-e.mjs.map +0 -1
- package/dist/chunks/XmlSupport-BYiRwlkK.mjs +0 -2
- package/dist/chunks/XmlSupport-BYiRwlkK.mjs.map +0 -1
- package/dist/chunks/fonts-DQC6Uj4r.mjs +0 -2
- package/dist/chunks/fonts-DQC6Uj4r.mjs.map +0 -1
- package/dist/chunks/full-DSWM4cKQ.mjs +0 -2
- package/dist/chunks/minimal-CFkkPXef.mjs +0 -2
- package/dist/chunks/src-DiAOfuOT.mjs +0 -2
- package/dist/chunks/src-DiAOfuOT.mjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as t,i as n,n as e,r as s,t as i}from"./xml-BsV44TrJ.mjs";import{n as o,t as a}from"./XmlPatterns-RN32-0ob.mjs";var r={keyword:1,function:.9,type:1,annotation:1.5,property:1.2,tag:1.5,attribute:1.5,constant:.8,string:.4,number:.4,boolean:.6,null:.6,regex:.8,comment:.3,operator:.1,punctuation:.1},l=1.5;function c(n,e,s=r){const i=n.length;if(0===i)return{totalBytes:0,nonWhitespaceBytes:0,recognizedBytes:0,unknownBytes:0,tokenCount:0,weightedScore:0};const o=s.punctuation??0;let a=0,l=0,c=0;for(const r of t(n,e)){const t=r.to-r.from;a+=t,c++,l+=t*(s[r.type]??o)}return{totalBytes:i,nonWhitespaceBytes:u(n),recognizedBytes:a,unknownBytes:i-a,tokenCount:c,weightedScore:l}}function u(t){let n=0;for(let e=0;e<t.length;e++){const s=t.charCodeAt(e);32!==s&&9!==s&&10!==s&&13!==s&&n++}return n}function g(t){if(0===t.nonWhitespaceBytes)return 0;return n=.7*(t.recognizedBytes/t.nonWhitespaceBytes)+.3*(t.weightedScore/t.nonWhitespaceBytes/1.5),Math.max(0,Math.min(1,n));var n}var h=class{language;options;id;constructor(t,n={}){this.language=t,this.options=n,this.id=t.name}detect(t){const n=this.options.maxLength??1e5;if(t.length>n)return null;const e=t.trim(),s=this.options.minLines??2;if(e.split("\n").filter(t=>t.trim().length>0).length<s)return null;const i=g(c(e,this.language,this.options.weights)),o=this.matchesAnySignature(e)?this.options.signatureBonus??.3:0,a=Math.min(1,i+o);return a<(this.options.minConfidence??.35)?null:{language:this.language.name,formattedText:e,confidence:a}}matchesAnySignature(t){const n=this.options.signatures??[];for(const e of n)if(e.test(t))return!0;return!1}},m={id:"java",displayName:"Java",highlighting:n,detection:new h(n,{signatures:[/^[ \t]*package\s+[\w.]+\s*;/m,/^[ \t]*import\s+(?:static\s+)?[\w.]+(?:\.\*)?\s*;/m,/\bSystem\s*\.\s*(?:out|err)\s*\.\s*\w+\s*\(/,/\bpublic\s+static\s+void\s+main\s*\(\s*String\s*\[\s*\]/]})},p=class{id="json";detect(t){const n=t.trim();if(!n.startsWith("{")&&!n.startsWith("["))return null;try{const t=JSON.parse(n);if("object"!=typeof t||null===t)return null;const e=JSON.stringify(t,null,2);return e.length<=5?null:{language:"json",formattedText:e,confidence:.9}}catch{return null}}},f={id:"json",displayName:"JSON",aliases:["jsonc"],highlighting:s,detection:new p},d={id:"typescript",displayName:"TypeScript",aliases:["ts","tsx"],highlighting:e,detection:new h(e,{signatures:[/^[ \t]*import\b[^;\n]*?\bfrom\s+['"]/m,/^[ \t]*(?:export\s+)?type\s+\w+(?:\s*<[^=>]*>)?\s*=/m,/^[ \t]*declare\s+(?:const|let|var|function|class|namespace|module|global)\b/m,/[\w$\])]\??\s*:\s*(?:string|number|boolean|void|any|unknown|never|bigint|symbol|object|null|undefined)\b/,/^[ \t]*export\s+(?:default\s+|const\s+|let\s+|var\s+|function\s+|async\s+function\b|class\s+|interface\s+|enum\s+|namespace\s+|abstract\s+class\b|\*\s+from\b|\{)/m]})},y=/^(<\?[\s\S]*?\?>\s*)+/,x=new RegExp(`^<${o}${a}\\/?>`),b=new RegExp(["<\\?[^?]*\\?>","\x3c!--[\\s\\S]*?--\x3e","<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",`<\\/(${o})>`,`<(${o})${a}\\/>`,`<(${o})${a}>`].join("|"),"g"),w=new RegExp(`<\\/${o}>\\s*$`),W=class{id="xml";detect(t){const n=t.trim();if(!n.startsWith("<"))return null;const e=n.replace(y,"");if(!x.test(e))return null;if(!this.isWellFormed(n))return null;const s=this.formatXml(n);return s.length<=10?null:{language:"xml",formattedText:s,confidence:.85}}isWellFormed(t){const n=[];let e=!1;b.lastIndex=0;let s=b.exec(t);for(;s;){const i=s[1],o=s[2],a=s[3];if(i){if(0===n.length||n[n.length-1]!==i)return!1;n.pop(),e=!0}else o?e=!0:a&&(n.push(a),e=!0);s=b.exec(t)}return e&&0===n.length}formatXml(t){const n=this.splitIntoTokens(t),e=[];let s=0;for(const i of n){const t=S[B(i)];"decrease"===t&&(s=Math.max(0,s-1)),e.push(" ".repeat(2*s)+i),"increase"===t&&s++}return e.join("\n")}splitIntoTokens(t){return t.replace(/>\s*</g,">\n<").split("\n").map(t=>t.trim()).filter(t=>t.length>0)}},S={pi:"none",comment:"none",cdata:"none",closing:"decrease",selfClosing:"none",inline:"none",opening:"increase",text:"none"};function B(t){return t.startsWith("<?")?"pi":t.startsWith("\x3c!--")?"comment":t.startsWith("<![CDATA[")?"cdata":t.startsWith("</")?"closing":t.endsWith("/>")?"selfClosing":t.startsWith("<")&&w.test(t)?"inline":t.startsWith("<")?"opening":"text"}var v={id:"xml",displayName:"XML",aliases:["html","xhtml","svg","xsl"],highlighting:i,detection:new W};export{p as a,g as c,c as d,f as i,r as l,W as n,m as o,d as r,h as s,v as t,l as u};
|
|
2
|
+
//# sourceMappingURL=XmlSupport-DIXH5on9.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XmlSupport-DIXH5on9.mjs","names":[],"sources":["../../src/plugins/smart-paste/detectors/TokenStats.ts","../../src/plugins/smart-paste/detectors/DetectionScorer.ts","../../src/plugins/smart-paste/detectors/LexerDetector.ts","../../src/plugins/language/bundles/JavaSupport.ts","../../src/plugins/smart-paste/detectors/JsonDetector.ts","../../src/plugins/language/bundles/JsonSupport.ts","../../src/plugins/language/bundles/TypeScriptSupport.ts","../../src/plugins/smart-paste/detectors/XmlDetector.ts","../../src/plugins/language/bundles/XmlSupport.ts"],"sourcesContent":["/**\n * Tokenization statistics used by the lexer-based content detector to\n * derive a calibrated, discriminative confidence score per language.\n *\n * The same `LanguageDefinition` that powers syntax highlighting is run\n * over the candidate text, and the token stream is reduced to four\n * aggregate measures: how much of the input was recognized, how many\n * tokens were emitted, and the relevance-weighted byte score that\n * favours language-specific tokens (keywords, decorators, tags) over\n * universal ones (punctuation, operators).\n */\n\nimport { iterateTokens } from '../../code-block/highlighter/TokenIteration.js';\nimport type { LanguageDefinition } from '../../code-block/highlighter/TokenizerTypes.js';\n\n/**\n * Per-token-type relevance weights.\n *\n * Higher weights indicate a matched token of that type contributes more\n * evidence that the input is in the corresponding language. Tokens that\n * appear in many languages (punctuation, operators) are weighted low;\n * tokens whose patterns encode language-specific identifiers (keywords,\n * annotations, tags) are weighted high.\n */\nexport type RelevanceWeights = Readonly<Record<string, number>>;\n\n/**\n * Default relevance weights spanning the canonical syntax token types.\n * Values were chosen so that keyword-rich code (typical for general\n * programming languages) and tag/attribute-rich code (markup) reach\n * scores comparable to one another while pure punctuation falls off.\n */\nexport const DEFAULT_RELEVANCE_WEIGHTS: RelevanceWeights = {\n\tkeyword: 1.0,\n\tfunction: 0.9,\n\ttype: 1.0,\n\tannotation: 1.5,\n\tproperty: 1.2,\n\ttag: 1.5,\n\tattribute: 1.5,\n\tconstant: 0.8,\n\tstring: 0.4,\n\tnumber: 0.4,\n\tboolean: 0.6,\n\tnull: 0.6,\n\tregex: 0.8,\n\tcomment: 0.3,\n\toperator: 0.1,\n\tpunctuation: 0.1,\n};\n\n/**\n * Maximum value present in `DEFAULT_RELEVANCE_WEIGHTS`.\n * Used as the normalization upper bound when computing density —\n * a stream consisting entirely of maximally-weighted tokens has\n * density 1.0.\n */\nexport const MAX_RELEVANCE_WEIGHT = 1.5;\n\n/** Aggregate statistics describing one tokenization pass. */\nexport interface TokenStats {\n\treadonly totalBytes: number;\n\treadonly nonWhitespaceBytes: number;\n\treadonly recognizedBytes: number;\n\treadonly unknownBytes: number;\n\treadonly tokenCount: number;\n\treadonly weightedScore: number;\n}\n\n/**\n * Tokenizes `code` with `language` and returns aggregate statistics\n * suitable for confidence scoring across competing language candidates.\n *\n * Whitespace is counted separately from `unknownBytes` so the scorer can\n * normalize against the meaningful (non-whitespace) input length without\n * unfairly penalizing indentation or vertical spacing.\n */\nexport function computeTokenStats(\n\tcode: string,\n\tlanguage: LanguageDefinition,\n\tweights: RelevanceWeights = DEFAULT_RELEVANCE_WEIGHTS,\n): TokenStats {\n\tconst totalBytes: number = code.length;\n\tif (totalBytes === 0) {\n\t\treturn {\n\t\t\ttotalBytes: 0,\n\t\t\tnonWhitespaceBytes: 0,\n\t\t\trecognizedBytes: 0,\n\t\t\tunknownBytes: 0,\n\t\t\ttokenCount: 0,\n\t\t\tweightedScore: 0,\n\t\t};\n\t}\n\n\tconst fallbackWeight: number = weights.punctuation ?? 0;\n\n\tlet recognizedBytes = 0;\n\tlet weightedScore = 0;\n\tlet tokenCount = 0;\n\n\tfor (const token of iterateTokens(code, language)) {\n\t\tconst len: number = token.to - token.from;\n\t\trecognizedBytes += len;\n\t\ttokenCount++;\n\t\tconst weight: number = weights[token.type] ?? fallbackWeight;\n\t\tweightedScore += len * weight;\n\t}\n\n\tconst nonWhitespaceBytes: number = countNonWhitespaceBytes(code);\n\n\treturn {\n\t\ttotalBytes,\n\t\tnonWhitespaceBytes,\n\t\trecognizedBytes,\n\t\tunknownBytes: totalBytes - recognizedBytes,\n\t\ttokenCount,\n\t\tweightedScore,\n\t};\n}\n\nfunction countNonWhitespaceBytes(text: string): number {\n\tlet count = 0;\n\tfor (let i = 0; i < text.length; i++) {\n\t\tconst c: number = text.charCodeAt(i);\n\t\tif (c !== 32 && c !== 9 && c !== 10 && c !== 13) count++;\n\t}\n\treturn count;\n}\n","/**\n * Pure scoring function that maps tokenization statistics to a\n * discriminative confidence value in `[0, 1]`.\n *\n * The score combines two independent signals:\n * - **Coverage** — fraction of input bytes recognized by the language's\n * patterns. Low coverage means many bytes fell through with no rule\n * matching, which is strong evidence the text is not in this language.\n * - **Density** — average per-byte weight of recognized tokens, normalized\n * against the maximum possible weight. High density means the recognized\n * tokens are themselves discriminative (keywords, annotations) rather\n * than universally-shared syntax (punctuation, operators).\n *\n * Coverage and density are equally weighted: a language that recognizes\n * lots of low-information punctuation is no more credible than one that\n * recognizes a few highly-specific keywords surrounded by unknown bytes,\n * and only the union of both signals sums to high confidence.\n */\n\nimport { MAX_RELEVANCE_WEIGHT, type TokenStats } from './TokenStats.js';\n\n/**\n * Weight of the byte-coverage signal in the combined confidence.\n *\n * Coverage dominates because failure to recognize most non-whitespace\n * bytes is the strongest evidence that the input is not in this language.\n * Relevance is a secondary refinement: among languages with comparable\n * coverage, the one whose recognized tokens are more discriminative\n * (keywords / annotations / tags rather than punctuation) wins.\n */\nconst COVERAGE_WEIGHT = 0.7;\n/** Weight of the relevance-density signal in the combined confidence. */\nconst RELEVANCE_WEIGHT = 0.3;\n\n/**\n * Maps tokenization statistics to a confidence value in `[0, 1]`.\n *\n * Both axes normalize against `nonWhitespaceBytes` so the score scales\n * linearly with the size of the meaningful input and is unaffected by\n * indentation:\n *\n * - **Coverage** = recognized bytes / non-whitespace bytes. Measures how\n * *much* of the meaningful input the lexer matched.\n * - **Relevance** = weighted score / non-whitespace bytes / max weight.\n * Measures how *rich* the matched tokens are on average — a sparse run\n * of keywords amid mostly-unknown text scores low here even though the\n * recognized bytes alone would look high-weight.\n */\nexport function scoreFromStats(stats: TokenStats): number {\n\tif (stats.nonWhitespaceBytes === 0) return 0;\n\n\tconst coverage: number = stats.recognizedBytes / stats.nonWhitespaceBytes;\n\tconst relevance: number = stats.weightedScore / stats.nonWhitespaceBytes / MAX_RELEVANCE_WEIGHT;\n\n\treturn clamp01(COVERAGE_WEIGHT * coverage + RELEVANCE_WEIGHT * relevance);\n}\n\nfunction clamp01(value: number): number {\n\treturn Math.max(0, Math.min(1, value));\n}\n","/**\n * Generic, lexer-driven content detector.\n *\n * Re-uses the `LanguageDefinition` from the syntax highlighter as the\n * authoritative grammar for detection — anything the highlighter learns\n * to tokenize, the detector learns to recognize, with no parallel\n * heuristic to maintain.\n *\n * Detection strategy:\n * 1. **Lexer probe** — tokenize the candidate text with the language's\n * patterns. Coverage and weighted density jointly form a calibrated\n * confidence in `[0, 1]` (see `DetectionScorer`).\n * 2. **Smoking-gun signatures** — when present, language-specific regexes\n * that confirm a plausible interpretation. A signature match adds a\n * fixed bonus to the lexer-derived confidence (capped at 1.0); without\n * signatures the lexer score stands on its own.\n *\n * Signatures must be definitionally specific to the target language —\n * patterns that are syntactically impossible in any competing language\n * the detector will be matched against. They are intentionally additive,\n * not gating: a signature on a near-zero lexer score still produces a\n * low overall confidence and is rejected by the minimum threshold.\n */\n\nimport type { LanguageDefinition } from '../../code-block/highlighter/TokenizerTypes.js';\nimport type { ContentDetector, DetectionResult } from '../SmartPasteTypes.js';\nimport { scoreFromStats } from './DetectionScorer.js';\nimport { type RelevanceWeights, type TokenStats, computeTokenStats } from './TokenStats.js';\n\n/** Configuration options for the lexer-based content detector. */\nexport interface LexerDetectorOptions {\n\t/** Minimum number of non-empty lines required before detection runs. */\n\treadonly minLines?: number;\n\n\t/** Maximum input length analyzed (DoS guard). */\n\treadonly maxLength?: number;\n\n\t/** Minimum confidence value required to accept the detection. */\n\treadonly minConfidence?: number;\n\n\t/**\n\t * Language-specific \"smoking-gun\" patterns. If any pattern matches,\n\t * `signatureBonus` is added to the lexer-derived confidence (capped\n\t * at 1.0). Patterns must be effectively impossible in any competing\n\t * language the detector will be matched against.\n\t */\n\treadonly signatures?: readonly RegExp[];\n\n\t/** Confidence bonus added on signature match. Defaults to `0.3`. */\n\treadonly signatureBonus?: number;\n\n\t/** Custom per-token-type relevance weights. Defaults to the canonical set. */\n\treadonly weights?: RelevanceWeights;\n}\n\nconst DEFAULT_MIN_LINES = 2;\nconst DEFAULT_MAX_LENGTH = 100_000;\nconst DEFAULT_MIN_CONFIDENCE = 0.35;\nconst DEFAULT_SIGNATURE_BONUS = 0.3;\n\n/**\n * Content detector that classifies pasted text using the same\n * `LanguageDefinition` employed for syntax highlighting.\n */\nexport class LexerDetector implements ContentDetector {\n\treadonly id: string;\n\n\tconstructor(\n\t\tprivate readonly language: LanguageDefinition,\n\t\tprivate readonly options: LexerDetectorOptions = {},\n\t) {\n\t\tthis.id = language.name;\n\t}\n\n\tdetect(text: string): DetectionResult | null {\n\t\tconst maxLength: number = this.options.maxLength ?? DEFAULT_MAX_LENGTH;\n\t\tif (text.length > maxLength) return null;\n\n\t\tconst trimmed: string = text.trim();\n\t\tconst minLines: number = this.options.minLines ?? DEFAULT_MIN_LINES;\n\t\tconst lines: string[] = trimmed.split('\\n').filter((l: string) => l.trim().length > 0);\n\t\tif (lines.length < minLines) return null;\n\n\t\tconst stats: TokenStats = computeTokenStats(trimmed, this.language, this.options.weights);\n\t\tconst lexerConfidence: number = scoreFromStats(stats);\n\n\t\tconst bonus: number = this.matchesAnySignature(trimmed)\n\t\t\t? (this.options.signatureBonus ?? DEFAULT_SIGNATURE_BONUS)\n\t\t\t: 0;\n\t\tconst confidence: number = Math.min(1, lexerConfidence + bonus);\n\n\t\tconst minConfidence: number = this.options.minConfidence ?? DEFAULT_MIN_CONFIDENCE;\n\t\tif (confidence < minConfidence) return null;\n\n\t\treturn { language: this.language.name, formattedText: trimmed, confidence };\n\t}\n\n\tprivate matchesAnySignature(text: string): boolean {\n\t\tconst signatures: readonly RegExp[] = this.options.signatures ?? [];\n\t\tfor (const signature of signatures) {\n\t\t\tif (signature.test(text)) return true;\n\t\t}\n\t\treturn false;\n\t}\n}\n","/**\n * Built-in Java language support bundle.\n * Includes syntax highlighting (Java 21) and lexer-based smart-paste detection.\n *\n * Detection re-uses the same `JAVA_LANGUAGE` token definition that powers\n * highlighting — see `LexerDetector` for the algorithm. Smoking-gun\n * signatures encode constructs that are syntactically impossible outside\n * Java: dotted-path imports terminated by `;`, file-leading `package`\n * declarations, the canonical `main(String[] args)` entry point, and\n * `System.out` / `System.err` calls.\n */\n\nimport { JAVA_LANGUAGE } from '../../code-block/highlighter/languages/java.js';\nimport { LexerDetector } from '../../smart-paste/detectors/LexerDetector.js';\nimport type { LanguageSupport } from '../LanguageTypes.js';\n\nconst JAVA_SIGNATURES: readonly RegExp[] = [\n\t/^[ \\t]*package\\s+[\\w.]+\\s*;/m,\n\t/^[ \\t]*import\\s+(?:static\\s+)?[\\w.]+(?:\\.\\*)?\\s*;/m,\n\t/\\bSystem\\s*\\.\\s*(?:out|err)\\s*\\.\\s*\\w+\\s*\\(/,\n\t/\\bpublic\\s+static\\s+void\\s+main\\s*\\(\\s*String\\s*\\[\\s*\\]/,\n];\n\nexport const JAVA_SUPPORT: LanguageSupport = {\n\tid: 'java',\n\tdisplayName: 'Java',\n\thighlighting: JAVA_LANGUAGE,\n\tdetection: new LexerDetector(JAVA_LANGUAGE, { signatures: JAVA_SIGNATURES }),\n};\n","/**\n * JSON content detector — validates and formats JSON for code block insertion.\n */\n\nimport type { ContentDetector, DetectionResult } from '../SmartPasteTypes.js';\n\n/** Minimum length for formatted JSON to be considered meaningful. */\nconst MIN_FORMATTED_LENGTH = 5;\n\n/** Confidence score for valid JSON detected via JSON.parse. */\nconst JSON_CONFIDENCE = 0.9;\n\nexport class JsonDetector implements ContentDetector {\n\treadonly id = 'json';\n\n\tdetect(text: string): DetectionResult | null {\n\t\tconst trimmed: string = text.trim();\n\t\tif (!trimmed.startsWith('{') && !trimmed.startsWith('[')) return null;\n\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\t\tif (typeof parsed !== 'object' || parsed === null) return null;\n\n\t\t\tconst formatted: string = JSON.stringify(parsed, null, 2);\n\t\t\tif (formatted.length <= MIN_FORMATTED_LENGTH) return null;\n\n\t\t\treturn { language: 'json', formattedText: formatted, confidence: JSON_CONFIDENCE };\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n","/**\n * Built-in JSON language support bundle.\n * Includes syntax highlighting and smart-paste detection.\n */\n\nimport { JSON_LANGUAGE } from '../../code-block/highlighter/languages/json.js';\nimport { JsonDetector } from '../../smart-paste/detectors/JsonDetector.js';\nimport type { LanguageSupport } from '../LanguageTypes.js';\n\nexport const JSON_SUPPORT: LanguageSupport = {\n\tid: 'json',\n\tdisplayName: 'JSON',\n\taliases: ['jsonc'],\n\thighlighting: JSON_LANGUAGE,\n\tdetection: new JsonDetector(),\n};\n","/**\n * Built-in TypeScript language support bundle.\n * Includes syntax highlighting (modern TS) and lexer-based smart-paste detection.\n *\n * Aliases `ts` and `tsx` are accepted for the language picker and code-block fences.\n *\n * Detection re-uses the same `TYPESCRIPT_LANGUAGE` token definition that\n * powers highlighting — see `LexerDetector` for the algorithm. Smoking-gun\n * signatures encode constructs that are syntactically impossible in Java:\n * `import … from '…'`, `type X = …` aliases, `declare …` ambients,\n * `: <lowercase-primitive>` type annotations, and the `export` statement\n * starter for declarations.\n */\n\nimport { TYPESCRIPT_LANGUAGE } from '../../code-block/highlighter/languages/typescript.js';\nimport { LexerDetector } from '../../smart-paste/detectors/LexerDetector.js';\nimport type { LanguageSupport } from '../LanguageTypes.js';\n\nconst TYPESCRIPT_SIGNATURES: readonly RegExp[] = [\n\t/^[ \\t]*import\\b[^;\\n]*?\\bfrom\\s+['\"]/m,\n\t/^[ \\t]*(?:export\\s+)?type\\s+\\w+(?:\\s*<[^=>]*>)?\\s*=/m,\n\t/^[ \\t]*declare\\s+(?:const|let|var|function|class|namespace|module|global)\\b/m,\n\t/[\\w$\\])]\\??\\s*:\\s*(?:string|number|boolean|void|any|unknown|never|bigint|symbol|object|null|undefined)\\b/,\n\t/^[ \\t]*export\\s+(?:default\\s+|const\\s+|let\\s+|var\\s+|function\\s+|async\\s+function\\b|class\\s+|interface\\s+|enum\\s+|namespace\\s+|abstract\\s+class\\b|\\*\\s+from\\b|\\{)/m,\n];\n\nexport const TYPESCRIPT_SUPPORT: LanguageSupport = {\n\tid: 'typescript',\n\tdisplayName: 'TypeScript',\n\taliases: ['ts', 'tsx'],\n\thighlighting: TYPESCRIPT_LANGUAGE,\n\tdetection: new LexerDetector(TYPESCRIPT_LANGUAGE, { signatures: TYPESCRIPT_SIGNATURES }),\n};\n","/**\n * XML content detector — validates and formats XML for code block insertion.\n */\n\nimport { XML_ATTRS, XML_TAG_NAME } from '../../shared/XmlPatterns.js';\nimport type { ContentDetector, DetectionResult } from '../SmartPasteTypes.js';\n\n/** Minimum length for formatted XML to be considered meaningful. */\nconst MIN_FORMATTED_LENGTH = 10;\n\n/** Confidence score for valid XML detected via structural analysis. */\nconst XML_CONFIDENCE = 0.85;\n\n/** Matches any leading processing instructions like <?xml ...?> or <?xml-stylesheet ...?> */\nconst LEADING_PIS_PATTERN = /^(<\\?[\\s\\S]*?\\?>\\s*)+/;\n\n/** Matches an opening tag like <root> or <ns:tag attr=\"val\"> */\nconst OPENING_TAG_PATTERN = new RegExp(`^<${XML_TAG_NAME}${XML_ATTRS}\\\\/?>`);\n\n// --- Well-formedness regex (decomposed for readability) ---\n\nconst PI_FRAGMENT = '<\\\\?[^?]*\\\\?>';\nconst COMMENT_FRAGMENT = '<!--[\\\\s\\\\S]*?-->';\nconst CDATA_FRAGMENT = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\nconst CLOSING_TAG_FRAGMENT = `<\\\\/(${XML_TAG_NAME})>`;\nconst SELF_CLOSING_TAG_FRAGMENT = `<(${XML_TAG_NAME})${XML_ATTRS}\\\\/>`;\nconst OPENING_TAG_FRAGMENT = `<(${XML_TAG_NAME})${XML_ATTRS}>`;\n\nconst WELL_FORMED_TAG_PATTERN = new RegExp(\n\t[\n\t\tPI_FRAGMENT,\n\t\tCOMMENT_FRAGMENT,\n\t\tCDATA_FRAGMENT,\n\t\tCLOSING_TAG_FRAGMENT,\n\t\tSELF_CLOSING_TAG_FRAGMENT,\n\t\tOPENING_TAG_FRAGMENT,\n\t].join('|'),\n\t'g',\n);\n\n/** Matches an inline element where open + close tag appear on the same token. */\nconst INLINE_ELEMENT_PATTERN = new RegExp(`<\\\\/${XML_TAG_NAME}>\\\\s*$`);\n\n/**\n * Detects well-formed XML content and formats it with proper indentation.\n *\n * Detection strategy:\n * 1. Text must start with `<` (after trimming)\n * 2. Must begin with an XML declaration, processing instruction, or opening tag\n * 3. All opened tags must be properly closed (basic well-formedness check)\n * 4. Must contain at least one tag pair or self-closing tag\n */\nexport class XmlDetector implements ContentDetector {\n\treadonly id = 'xml';\n\n\tdetect(text: string): DetectionResult | null {\n\t\tconst trimmed: string = text.trim();\n\t\tif (!trimmed.startsWith('<')) return null;\n\n\t\t// Quick structural check: strip leading PIs, then must start with an opening tag\n\t\tconst remainder: string = trimmed.replace(LEADING_PIS_PATTERN, '');\n\t\tif (!OPENING_TAG_PATTERN.test(remainder)) return null;\n\n\t\t// Validate well-formedness via tag balancing\n\t\tif (!this.isWellFormed(trimmed)) return null;\n\n\t\tconst formatted: string = this.formatXml(trimmed);\n\t\tif (formatted.length <= MIN_FORMATTED_LENGTH) return null;\n\n\t\treturn { language: 'xml', formattedText: formatted, confidence: XML_CONFIDENCE };\n\t}\n\n\t/**\n\t * Checks basic XML well-formedness by verifying that all opened tags\n\t * are properly closed in the correct nesting order.\n\t */\n\tprivate isWellFormed(xml: string): boolean {\n\t\tconst tagStack: string[] = [];\n\t\tlet foundTag = false;\n\n\t\t// Reset lastIndex — RegExp with 'g' flag is stateful\n\t\tWELL_FORMED_TAG_PATTERN.lastIndex = 0;\n\t\tlet match: RegExpExecArray | null = WELL_FORMED_TAG_PATTERN.exec(xml);\n\n\t\twhile (match) {\n\t\t\tconst closingTag: string | undefined = match[1];\n\t\t\tconst selfClosingTag: string | undefined = match[2];\n\t\t\tconst openingTag: string | undefined = match[3];\n\n\t\t\tif (closingTag) {\n\t\t\t\tif (tagStack.length === 0 || tagStack[tagStack.length - 1] !== closingTag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\ttagStack.pop();\n\t\t\t\tfoundTag = true;\n\t\t\t} else if (selfClosingTag) {\n\t\t\t\tfoundTag = true;\n\t\t\t} else if (openingTag) {\n\t\t\t\ttagStack.push(openingTag);\n\t\t\t\tfoundTag = true;\n\t\t\t}\n\n\t\t\tmatch = WELL_FORMED_TAG_PATTERN.exec(xml);\n\t\t}\n\n\t\treturn foundTag && tagStack.length === 0;\n\t}\n\n\t/**\n\t * Formats XML with consistent 2-space indentation.\n\t */\n\tprivate formatXml(xml: string): string {\n\t\tconst tokens: string[] = this.splitIntoTokens(xml);\n\t\tconst parts: string[] = [];\n\t\tlet indent = 0;\n\t\tconst INDENT_STEP = 2;\n\n\t\tfor (const token of tokens) {\n\t\t\tconst kind: XmlTokenKind = classifyXmlToken(token);\n\t\t\tconst indentChange: IndentChange = INDENT_BEHAVIOR[kind];\n\n\t\t\tif (indentChange === 'decrease') {\n\t\t\t\tindent = Math.max(0, indent - 1);\n\t\t\t}\n\n\t\t\tparts.push(' '.repeat(indent * INDENT_STEP) + token);\n\n\t\t\tif (indentChange === 'increase') {\n\t\t\t\tindent++;\n\t\t\t}\n\t\t}\n\n\t\treturn parts.join('\\n');\n\t}\n\n\t/** Splits XML into line-level tokens by breaking between adjacent tags. */\n\tprivate splitIntoTokens(xml: string): string[] {\n\t\treturn xml\n\t\t\t.replace(/>\\s*</g, '>\\n<')\n\t\t\t.split('\\n')\n\t\t\t.map((line: string) => line.trim())\n\t\t\t.filter((line: string) => line.length > 0);\n\t}\n}\n\n// --- Token Classification ---\n\ntype XmlTokenKind =\n\t| 'pi'\n\t| 'comment'\n\t| 'cdata'\n\t| 'closing'\n\t| 'selfClosing'\n\t| 'inline'\n\t| 'opening'\n\t| 'text';\ntype IndentChange = 'increase' | 'decrease' | 'none';\n\nconst INDENT_BEHAVIOR: Readonly<Record<XmlTokenKind, IndentChange>> = {\n\tpi: 'none',\n\tcomment: 'none',\n\tcdata: 'none',\n\tclosing: 'decrease',\n\tselfClosing: 'none',\n\tinline: 'none',\n\topening: 'increase',\n\ttext: 'none',\n};\n\nfunction classifyXmlToken(token: string): XmlTokenKind {\n\tif (token.startsWith('<?')) return 'pi';\n\tif (token.startsWith('<!--')) return 'comment';\n\tif (token.startsWith('<![CDATA[')) return 'cdata';\n\tif (token.startsWith('</')) return 'closing';\n\tif (token.endsWith('/>')) return 'selfClosing';\n\tif (token.startsWith('<') && INLINE_ELEMENT_PATTERN.test(token)) return 'inline';\n\tif (token.startsWith('<')) return 'opening';\n\treturn 'text';\n}\n","/**\n * Built-in XML language support bundle.\n * Includes syntax highlighting and smart-paste detection.\n */\n\nimport { XML_LANGUAGE } from '../../code-block/highlighter/languages/xml.js';\nimport { XmlDetector } from '../../smart-paste/detectors/XmlDetector.js';\nimport type { LanguageSupport } from '../LanguageTypes.js';\n\nexport const XML_SUPPORT: LanguageSupport = {\n\tid: 'xml',\n\tdisplayName: 'XML',\n\taliases: ['html', 'xhtml', 'svg', 'xsl'],\n\thighlighting: XML_LANGUAGE,\n\tdetection: new XmlDetector(),\n};\n"],"mappings":"yHAgCA,IAAa,EAA8C,CAC1D,QAAS,EACT,SAAU,GACV,KAAM,EACN,WAAY,IACZ,SAAU,IACV,IAAK,IACL,UAAW,IACX,SAAU,GACV,OAAQ,GACR,OAAQ,GACR,QAAS,GACT,KAAM,GACN,MAAO,GACP,QAAS,GACT,SAAU,GACV,YAAa,IASD,EAAuB,IAoBpC,SAAgB,EACf,EACA,EACA,EAA4B,GAE5B,MAAM,EAAqB,EAAK,OAChC,GAAmB,IAAf,EACH,MAAO,CACN,WAAY,EACZ,mBAAoB,EACpB,gBAAiB,EACjB,aAAc,EACd,WAAY,EACZ,cAAe,GAIjB,MAAM,EAAyB,EAAQ,aAAe,EAEtD,IAAI,EAAkB,EAClB,EAAgB,EAChB,EAAa,EAEjB,IAAK,MAAM,KAAS,EAAc,EAAM,GAAW,CAClD,MAAM,EAAc,EAAM,GAAK,EAAM,KACrC,GAAmB,EACnB,IAEA,GAAiB,GADM,EAAQ,EAAM,OAAS,EAE/C,CAIA,MAAO,CACN,aACA,mBAJkC,EAAwB,GAK1D,kBACA,aAAc,EAAa,EAC3B,aACA,gBAEF,CAEA,SAAS,EAAwB,GAChC,IAAI,EAAQ,EACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACrC,MAAM,EAAY,EAAK,WAAW,GACxB,KAAN,GAAkB,IAAN,GAAiB,KAAN,GAAkB,KAAN,GAAU,GAClD,CACA,OAAO,CACR,CC/EA,SAAgB,EAAe,GAC9B,GAAiC,IAA7B,EAAM,mBAA0B,OAAO,EAK3C,OAGgB,EA3BO,IAqBE,EAAM,gBAAkB,EAAM,oBAnB/B,IAoBE,EAAM,cAAgB,EAAM,mBDKnB,KCC5B,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,IADhC,IAAiB,CAFjB,CCAA,IASa,EAAb,MAImB,SACA,QAJlB,GAEA,WAAA,CACC,EACA,EAAiD,CAAC,GADjC,KAAA,SAAA,EACA,KAAA,QAAA,EAEjB,KAAK,GAAK,EAAS,IACpB,CAEA,MAAA,CAAO,GACN,MAAM,EAAoB,KAAK,QAAQ,WAnBd,IAoBzB,GAAI,EAAK,OAAS,EAAW,OAAO,KAEpC,MAAM,EAAkB,EAAK,OACvB,EAAmB,KAAK,QAAQ,UAxBd,EA0BxB,GADwB,EAAQ,MAAM,MAAM,OAAQ,GAAc,EAAE,OAAO,OAAS,GAC1E,OAAS,EAAU,OAAO,KAGpC,MAAM,EAA0B,EADN,EAAkB,EAAS,KAAK,SAAU,KAAK,QAAQ,UAG3E,EAAgB,KAAK,oBAAoB,GAC3C,KAAK,QAAQ,gBA7Ba,GA8B3B,EACG,EAAqB,KAAK,IAAI,EAAG,EAAkB,GAGzD,OAAI,GAD0B,KAAK,QAAQ,eAlCd,KAmCU,KAEhC,CAAE,SAAU,KAAK,SAAS,KAAM,cAAe,EAAS,aAChE,CAEA,mBAAA,CAA4B,GAC3B,MAAM,EAAgC,KAAK,QAAQ,YAAc,GACjE,IAAK,MAAM,KAAa,EACvB,GAAI,EAAU,KAAK,GAAO,OAAO,EAElC,OAAO,CACR,GChFY,EAAgC,CAC5C,GAAI,OACJ,YAAa,OACb,aAAc,EACd,UAAW,IAAI,EAAc,EAAe,CAAE,WAXJ,CAC1C,+BACA,qDACA,8CACA,8DCRY,EAAb,MACC,GAAc,OAEd,MAAA,CAAO,GACN,MAAM,EAAkB,EAAK,OAC7B,IAAK,EAAQ,WAAW,OAAS,EAAQ,WAAW,KAAM,OAAO,KAEjE,IACC,MAAM,EAAkB,KAAK,MAAM,GACnC,GAAsB,iBAAX,GAAkC,OAAX,EAAiB,OAAO,KAE1D,MAAM,EAAoB,KAAK,UAAU,EAAQ,KAAM,GACvD,OAAI,EAAU,QAjBY,EAiB2B,KAE9C,CAAE,SAAU,OAAQ,cAAe,EAAW,WAhBhC,GAiBtB,CAAA,MACC,OAAO,IACR,CACD,GCrBY,EAAgC,CAC5C,GAAI,OACJ,YAAa,OACb,QAAS,CAAC,SACV,aAAc,EACd,UAAW,IAAI,GCYH,EAAsC,CAClD,GAAI,aACJ,YAAa,aACb,QAAS,CAAC,KAAM,OAChB,aAAc,EACd,UAAW,IAAI,EAAc,EAAqB,CAAE,WAbJ,CAChD,wCACA,uDACA,+EACA,2GACA,yKCTK,EAAsB,wBAGtB,EAAsB,IAAI,OAAO,KAAK,IAAe,UAWrD,EAA0B,IAAI,OACnC,CARmB,gBACK,0BACF,iCACM,QAAQ,MACH,KAAK,KAAgB,QAC1B,KAAK,KAAgB,MAU/C,KAAK,KACP,KAIK,EAAyB,IAAI,OAAO,OAAO,WAWpC,EAAb,MACC,GAAc,MAEd,MAAA,CAAO,GACN,MAAM,EAAkB,EAAK,OAC7B,IAAK,EAAQ,WAAW,KAAM,OAAO,KAGrC,MAAM,EAAoB,EAAQ,QAAQ,EAAqB,IAC/D,IAAK,EAAoB,KAAK,GAAY,OAAO,KAGjD,IAAK,KAAK,aAAa,GAAU,OAAO,KAExC,MAAM,EAAoB,KAAK,UAAU,GACzC,OAAI,EAAU,QA3Da,GA2D0B,KAE9C,CAAE,SAAU,MAAO,cAAe,EAAW,WA1D/B,IA2DtB,CAMA,YAAA,CAAqB,GACpB,MAAM,EAAqB,GAC3B,IAAI,GAAW,EAGf,EAAwB,UAAY,EACpC,IAAI,EAAgC,EAAwB,KAAK,GAEjE,KAAO,GAAO,CACb,MAAM,EAAiC,EAAM,GACvC,EAAqC,EAAM,GAC3C,EAAiC,EAAM,GAE7C,GAAI,EAAY,CACf,GAAwB,IAApB,EAAS,QAAgB,EAAS,EAAS,OAAS,KAAO,EAC9D,OAAO,EAER,EAAS,MACT,GAAW,CACZ,MAAW,EACV,GAAW,EACD,IACV,EAAS,KAAK,GACd,GAAW,GAGZ,EAAQ,EAAwB,KAAK,EACtC,CAEA,OAAO,GAAgC,IAApB,EAAS,MAC7B,CAKA,SAAA,CAAkB,GACjB,MAAM,EAAmB,KAAK,gBAAgB,GACxC,EAAkB,GACxB,IAAI,EAAS,EAGb,IAAK,MAAM,KAAS,EAAQ,CAE3B,MAAM,EAA6B,EADR,EAAiB,IAGvB,aAAjB,IACH,EAAS,KAAK,IAAI,EAAG,EAAS,IAG/B,EAAM,KAAK,IAAI,OAVI,EAUG,GAAwB,GAEzB,aAAjB,GACH,GAEF,CAEA,OAAO,EAAM,KAAK,KACnB,CAGA,eAAA,CAAwB,GACvB,OAAO,EACL,QAAQ,SAAU,QAClB,MAAM,MACN,IAAK,GAAiB,EAAK,QAC3B,OAAQ,GAAiB,EAAK,OAAS,EAC1C,GAgBK,EAAgE,CACrE,GAAI,OACJ,QAAS,OACT,MAAO,OACP,QAAS,WACT,YAAa,OACb,OAAQ,OACR,QAAS,WACT,KAAM,QAGP,SAAS,EAAiB,GACzB,OAAI,EAAM,WAAW,MAAc,KAC/B,EAAM,WAAW,WAAgB,UACjC,EAAM,WAAW,aAAqB,QACtC,EAAM,WAAW,MAAc,UAC/B,EAAM,SAAS,MAAc,cAC7B,EAAM,WAAW,MAAQ,EAAuB,KAAK,GAAe,SACpE,EAAM,WAAW,KAAa,UAC3B,MACR,CCzKA,IAAa,EAA+B,CAC3C,GAAI,MACJ,YAAa,MACb,QAAS,CAAC,OAAQ,QAAS,MAAO,OAClC,aAAc,EACd,UAAW,IAAI"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t}from"./TextFormattingPlugin-BhRxSC8q.mjs";import{t as o}from"./FontPlugin-D041tiLe.mjs";import{n as i}from"./AlignmentPlugin-C9Rr_R-g.mjs";import{t as m}from"./BidiIsolationPlugin-Cw2KMk-H.mjs";import{t as n}from"./BlockquotePlugin-0bZSbkyo.mjs";import{t as r}from"./CodeBlockPlugin-BCJ3faXx.mjs";import{t as e}from"./FontSizePlugin-8CAvj1RD.mjs";import{t as s}from"./FormulaPlugin-DJ39BtqV.mjs";import{t as l}from"./HardBreakPlugin-vniSvTgq.mjs";import{t as a}from"./HeadingPlugin-DUKsLuMd.mjs";import{t as u}from"./HighlightPlugin-DRTAE1N5.mjs";import{t as g}from"./HorizontalRulePlugin-B9OvwrKB.mjs";import{t as f}from"./ImagePlugin-CwxTRr6d.mjs";import{t as p}from"./InlineCodePlugin-uxgMUX_E.mjs";import{t as P}from"./LinkPlugin-CvWHbSkb.mjs";import{t as j}from"./ListPlugin-BchSFWVn.mjs";import{t as w}from"./PrintPlugin-D2javl_d.mjs";import{t as d}from"./SmartPastePlugin-BvJQ-fOz.mjs";import{t as h}from"./StrikethroughPlugin-BdrG1TTY.mjs";import{t as c}from"./SuperSubPlugin-DTZB0Y3D.mjs";import{t as k}from"./TablePlugin-CPvg9YZS.mjs";import{t as x}from"./TextColorPlugin-Ckg3KWvb.mjs";import{t as b}from"./TextDirectionAutoPlugin-DRGbgTlx.mjs";import{t as S}from"./TextDirectionPlugin-BCeYyJHo.mjs";import{t as F}from"./VideoPlugin-BugkI7-m.mjs";function T(T){return{toolbar:[[new o({fonts:[],...T?.font}),new e(T?.fontSize)],[new t(T?.textFormatting),new h(T?.strikethrough),new p(T?.inlineCode),new c(T?.superSub),new m(T?.bidiIsolation)],[new x(T?.textColor),new u(T?.highlight)],[new a(T?.heading),new n(T?.blockquote),new r(T?.codeBlock)],[new i(T?.alignment),new S(T?.textDirection)],[new j(T?.list)],[new P(T?.link),new k(T?.table),new g(T?.horizontalRule),new f(T?.image),new s(T?.formula),new F(T?.video)],[new w(T?.print)]],plugins:[new l,new d(T?.smartPaste),new b(T?.textDirectionAuto)]}}export{T as t};
|
|
2
|
+
//# sourceMappingURL=full-JM0-SwWy.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"full-
|
|
1
|
+
{"version":3,"file":"full-JM0-SwWy.mjs","names":[],"sources":["../../src/presets/FullPreset.ts"],"sourcesContent":["/**\n * Full preset: a fully-featured editor with all standard plugins.\n */\n\nimport { AlignmentPlugin } from '../plugins/alignment/AlignmentPlugin.js';\nimport { BidiIsolationPlugin } from '../plugins/bidi-isolation/BidiIsolationPlugin.js';\nimport { BlockquotePlugin } from '../plugins/blockquote/BlockquotePlugin.js';\nimport { CodeBlockPlugin } from '../plugins/code-block/CodeBlockPlugin.js';\nimport { FontSizePlugin } from '../plugins/font-size/FontSizePlugin.js';\nimport { FontPlugin } from '../plugins/font/FontPlugin.js';\nimport { FormulaPlugin } from '../plugins/formula/FormulaPlugin.js';\nimport { HardBreakPlugin } from '../plugins/hard-break/HardBreakPlugin.js';\nimport { HeadingPlugin } from '../plugins/heading/HeadingPlugin.js';\nimport { HighlightPlugin } from '../plugins/highlight/HighlightPlugin.js';\nimport { HorizontalRulePlugin } from '../plugins/horizontal-rule/HorizontalRulePlugin.js';\nimport { ImagePlugin } from '../plugins/image/ImagePlugin.js';\nimport { InlineCodePlugin } from '../plugins/inline-code/InlineCodePlugin.js';\nimport { LinkPlugin } from '../plugins/link/LinkPlugin.js';\nimport { ListPlugin } from '../plugins/list/ListPlugin.js';\nimport { PrintPlugin } from '../plugins/print/PrintPlugin.js';\nimport { SmartPastePlugin } from '../plugins/smart-paste/SmartPastePlugin.js';\nimport { StrikethroughPlugin } from '../plugins/strikethrough/StrikethroughPlugin.js';\nimport { SuperSubPlugin } from '../plugins/super-sub/SuperSubPlugin.js';\nimport { TablePlugin } from '../plugins/table/TablePlugin.js';\nimport { TextColorPlugin } from '../plugins/text-color/TextColorPlugin.js';\nimport { TextDirectionAutoPlugin } from '../plugins/text-direction-auto/TextDirectionAutoPlugin.js';\nimport { TextDirectionPlugin } from '../plugins/text-direction/TextDirectionPlugin.js';\nimport { TextFormattingPlugin } from '../plugins/text-formatting/TextFormattingPlugin.js';\nimport { VideoPlugin } from '../plugins/video/VideoPlugin.js';\nimport type { FullPresetOptions, PresetConfig } from './PresetTypes.js';\n\n/**\n * Creates a fully-featured editor preset with all standard plugins.\n *\n * Pass `font.fonts` to supply font definitions (e.g. `STARTER_FONTS`).\n * Without explicit fonts, the font picker toolbar renders empty.\n *\n * Toolbar groups:\n * 1. Typography: Font, FontSize\n * 2. Inline marks: TextFormatting, Strikethrough, InlineCode, SuperSub, BidiIsolation\n * 3. Colors: TextColor, Highlight\n * 4. Block types: Heading, Blockquote, CodeBlock\n * 5. Paragraph layout: Alignment, TextDirection\n * 6. Lists: List\n * 7. Insert objects: Link, Table, HorizontalRule, Image, Formula\n * 8. Utility: Print\n *\n * Headless plugins: HardBreak, SmartPaste, TextDirectionAuto.\n */\nexport function createFullPreset(options?: FullPresetOptions): PresetConfig {\n\treturn {\n\t\ttoolbar: [\n\t\t\t[new FontPlugin({ fonts: [], ...options?.font }), new FontSizePlugin(options?.fontSize)],\n\t\t\t[\n\t\t\t\tnew TextFormattingPlugin(options?.textFormatting),\n\t\t\t\tnew StrikethroughPlugin(options?.strikethrough),\n\t\t\t\tnew InlineCodePlugin(options?.inlineCode),\n\t\t\t\tnew SuperSubPlugin(options?.superSub),\n\t\t\t\tnew BidiIsolationPlugin(options?.bidiIsolation),\n\t\t\t],\n\t\t\t[new TextColorPlugin(options?.textColor), new HighlightPlugin(options?.highlight)],\n\t\t\t[\n\t\t\t\tnew HeadingPlugin(options?.heading),\n\t\t\t\tnew BlockquotePlugin(options?.blockquote),\n\t\t\t\tnew CodeBlockPlugin(options?.codeBlock),\n\t\t\t],\n\t\t\t[new AlignmentPlugin(options?.alignment), new TextDirectionPlugin(options?.textDirection)],\n\t\t\t[new ListPlugin(options?.list)],\n\t\t\t[\n\t\t\t\tnew LinkPlugin(options?.link),\n\t\t\t\tnew TablePlugin(options?.table),\n\t\t\t\tnew HorizontalRulePlugin(options?.horizontalRule),\n\t\t\t\tnew ImagePlugin(options?.image),\n\t\t\t\tnew FormulaPlugin(options?.formula),\n\t\t\t\tnew VideoPlugin(options?.video),\n\t\t\t],\n\t\t\t[new PrintPlugin(options?.print)],\n\t\t],\n\t\tplugins: [\n\t\t\tnew HardBreakPlugin(),\n\t\t\tnew SmartPastePlugin(options?.smartPaste),\n\t\t\tnew TextDirectionAutoPlugin(options?.textDirectionAuto),\n\t\t],\n\t};\n}\n"],"mappings":"kvCAiDA,SAAgB,EAAiB,GAChC,MAAO,CACN,QAAS,CACR,CAAC,IAAI,EAAW,CAAE,MAAO,MAAO,GAAS,OAAS,IAAI,EAAe,GAAS,WAC9E,CACC,IAAI,EAAqB,GAAS,gBAClC,IAAI,EAAoB,GAAS,eACjC,IAAI,EAAiB,GAAS,YAC9B,IAAI,EAAe,GAAS,UAC5B,IAAI,EAAoB,GAAS,gBAElC,CAAC,IAAI,EAAgB,GAAS,WAAY,IAAI,EAAgB,GAAS,YACvE,CACC,IAAI,EAAc,GAAS,SAC3B,IAAI,EAAiB,GAAS,YAC9B,IAAI,EAAgB,GAAS,YAE9B,CAAC,IAAI,EAAgB,GAAS,WAAY,IAAI,EAAoB,GAAS,gBAC3E,CAAC,IAAI,EAAW,GAAS,OACzB,CACC,IAAI,EAAW,GAAS,MACxB,IAAI,EAAY,GAAS,OACzB,IAAI,EAAqB,GAAS,gBAClC,IAAI,EAAY,GAAS,OACzB,IAAI,EAAc,GAAS,SAC3B,IAAI,EAAY,GAAS,QAE1B,CAAC,IAAI,EAAY,GAAS,SAE3B,QAAS,CACR,IAAI,EACJ,IAAI,EAAiB,GAAS,YAC9B,IAAI,EAAwB,GAAS,oBAGxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimal-
|
|
1
|
+
{"version":3,"file":"minimal-DSlR2A27.mjs","names":[],"sources":["../../src/presets/MinimalPreset.ts"],"sourcesContent":["/**\n * Minimal preset: a lightweight editor with only font selection.\n */\n\nimport { FontPlugin } from '../plugins/font/FontPlugin.js';\nimport type { MinimalPresetOptions, PresetConfig } from './PresetTypes.js';\n\n/**\n * Creates a minimal editor preset with font selection only.\n * CaretNavigation and GapCursor are auto-registered by the editor.\n *\n * Pass `font.fonts` to supply font definitions (e.g. `STARTER_FONTS`).\n * Without explicit fonts, the font picker toolbar renders empty.\n */\nexport function createMinimalPreset(options?: MinimalPresetOptions): PresetConfig {\n\tconst fontPlugin: FontPlugin = new FontPlugin({\n\t\tfonts: [],\n\t\t...options?.font,\n\t});\n\n\treturn {\n\t\ttoolbar: [[fontPlugin]],\n\t\tplugins: [],\n\t};\n}\n"],"mappings":"yCAcA,SAAgB,EAAoB,GAMnC,MAAO,CACN,QAAS,CAAC,CAAC,IANuB,EAAW,CAC7C,MAAO,MACJ,GAAS,SAKZ,QAAS,GAEX"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e,o as t,s as n,t as s}from"./HTMLUtils-Bhg3_P8B.mjs";import{C as i,D as r,E as o,M as a,N as l,O as c,T as h,_ as d,b as p,c as u,d as g,f as m,g as f,h as y,l as k,m as w,o as S,p as v,r as b,s as I,u as R,v as C,w as x}from"./Document-827l3P80.mjs";import{n as T,o as E,r as M,s as P}from"./NodeResolver-Dleih-8R.mjs";import{a as A,c as B,d as D,f as N,i as O,l as L,n as H,o as z,r as _,t as F,u as j}from"./Selection-HYoVFpAx.mjs";import{a as K,i as $,r as V,t as U}from"./TypeBrands-Ch9856Gb.mjs";import{C as q,S as W,a as G,d as Q,f as J,g as X,h as Y,i as Z,m as ee,n as te,p as ne,r as se,t as ie,u as re,w as oe,x as ae,y as le}from"./BlockInsertion-CYH2gRkY.mjs";import{i as ce,t as he}from"./NodeSelectionCommands-WH5snxr_.mjs";import{C as de,S as pe,b as ue,c as ge,d as me,f as fe,i as ye,l as ke,m as we,n as Se,o as ve,p as be,r as Ie,s as Re,t as Ce,u as xe,w as Te,x as Ee,y as Me}from"./Commands-D5ND50PQ.mjs";import{_ as Pe,b as Ae,c as Be,d as De,f as Ne,g as Oe,i as Le,n as He,p as ze,u as _e,y as Fe}from"./ThemeEngine-BUVo_zaT.mjs";import{_ as je,g as Ke,h as $e,m as Ve,v as Ue,y as qe}from"./TableDimensions-BBhjHNjQ.mjs";import{n as We,t as Ge}from"./DocumentParser-D2tr3ZKn.mjs";import{b as Qe,c as Je,d as Xe,f as Ye,g as Ze,h as et,m as tt,n as nt,o as st,p as it,s as rt,t as ot,u as at,v as lt,w as ct}from"./Decoration-BOP1TAUd.mjs";import{c as ht,l as dt,u as pt}from"./PluginHelpers-KDuTlmXm.mjs";import{n as ut,t as gt}from"./EditorEventBoundary-zpYRxryo.mjs";import{a as mt,c as ft,l as yt,n as kt,t as wt,u as St}from"./StyleRuntime-DW6omotc.mjs";import{t as vt}from"./Platform-ByobkiCc.mjs";import{t as bt}from"./SchemaRegistry-CkBN-1yW.mjs";import{t as It}from"./BlockTypePickerRegistry-BTET9jM-.mjs";import{o as Rt,t as Ct}from"./ToolbarPlugin-dmTj1jIz.mjs";import{t as xt}from"./GapCursorNavigation-DCWOmopl.mjs";import{A as Tt,F as Et,M as Mt,N as Pt,P as At,j as Bt,t as Dt}from"./CaretNavigationPlugin-BPZ9b6XR.mjs";import{n as Nt,t as Ot}from"./DomUtils-Bf7JLFlx.mjs";import{a as Lt,n as Ht,o as zt,r as _t,t as Ft}from"./SelectionSync-BSHIw1EE.mjs";import{t as jt}from"./GapCursorPlugin-2iR6506y.mjs";import{t as Kt}from"./TextFormattingPlugin-BhRxSC8q.mjs";import $t from"dompurify";var Vt=class{steps=[];stepMaps=[];selection;storedMarks;selectionBefore;origin;workingDoc;_readonlyAllowed=!1;constructor(e,t,n="api",s){this.selection=e,this.selectionBefore=e,this.storedMarks=t,this.origin=n,this.workingDoc=s??null}insertText(e,t,n,s,i){const r={type:"insertText",blockId:e,offset:t,text:n,marks:s,...i?{segments:i}:{}};return this.steps.push(r),this.advanceDoc(r),this}deleteText(e,t,n,s,i,r){let o;if(r)o=r;else if(this.workingDoc){const r=T(this.workingDoc,e);o=r?w(r,t,n):[l(s,[...i])]}else o=[l(s,[...i])];const a={type:"deleteText",blockId:e,from:t,to:n,deletedText:s,deletedMarks:i,deletedSegments:o};return this.steps.push(a),this.advanceDoc(a),this}deleteTextAt(e,t,n){const s=this.requireDoc("deleteTextAt"),i=this.requireBlock(s,e),r=d(i).slice(t,n),o=f(i,t),a=w(i,t,n);return this.deleteText(e,t,n,r,o,a)}splitBlock(e,t,n){const s={type:"splitBlock",blockId:e,offset:t,newBlockId:n};return this.steps.push(s),this.advanceDoc(s),this}mergeBlocks(e,t,n,s,i,r){const o={type:"mergeBlocks",targetBlockId:e,sourceBlockId:t,targetLengthBefore:n,...void 0!==s?{sourceType:s}:{},...i?{sourceAttrs:i}:{},...void 0!==r?{sourceHTMLId:r}:{}};return this.steps.push(o),this.advanceDoc(o),this}mergeBlocksAt(e,t){const n=this.requireDoc("mergeBlocksAt"),s=this.requireBlock(n,e),i=this.requireBlock(n,t),r=y(s);return this.mergeBlocks(e,t,r,i.type,i.attrs,i.htmlId)}addMark(e,t,n,s){const i=this.tryGetBlock(e);if(!i){const i={type:"addMark",blockId:e,from:t,to:n,mark:s};return this.steps.push(i),this.advanceDoc(i),this}const r=et(p(i),t,n,s.type);for(const o of r){const t={type:"addMark",blockId:e,from:o.from,to:o.to,mark:s};this.steps.push(t),this.advanceDoc(t)}return this}removeMark(e,t,n,s){const i=this.tryGetBlock(e);if(!i){const i={type:"removeMark",blockId:e,from:t,to:n,mark:s};return this.steps.push(i),this.advanceDoc(i),this}const r=Ze(p(i),t,n,s.type);for(const o of r){const t={type:"removeMark",blockId:e,from:o.from,to:o.to,mark:o.mark};this.steps.push(t),this.advanceDoc(t)}return this}setBlockType(e,t,n){const s=this.requireDoc("setBlockType"),i=this.requireBlock(s,e),r={type:"setBlockType",blockId:e,nodeType:t,...n?{attrs:n}:{},previousNodeType:i.type,...i.attrs?{previousAttrs:i.attrs}:{}};return this.steps.push(r),this.advanceDoc(r),this}insertNode(e,t,n){const s={type:"insertNode",parentPath:e,index:t,node:n};return this.steps.push(s),this.advanceDoc(s),this}removeNode(e,t){const n=E(this.requireDoc("removeNode"),e,t);if(!n)throw new Error(`Node at index ${t} not found under parent path [${e.join(", ")}].`);const s={type:"removeNode",parentPath:e,index:t,removedNode:n};return this.steps.push(s),this.advanceDoc(s),this}moveNode(e,t,n,s){const i=this.requireDoc("moveNode"),r=E(i,e,t);if(!r)throw new Error(`Node at index ${t} not found under source path [${e.join(", ")}].`);if(n.includes(r.id))throw new Error(`Cannot move node "${r.id}" into its own subtree.`);const o=0===n.length?i.children.length:P(i,n)?.children.length??-1;if(!Number.isInteger(s)||s<0||s>o)throw new Error(`Invalid destination index ${s} under path [${n.join(", ")}].`);const a={type:"moveNode",fromParentPath:e,fromIndex:t,toParentPath:n,toIndex:s,movedNode:r};return Ye(a)||(this.steps.push(a),this.advanceDoc(a)),this}setNodeAttr(e,t){const n=P(this.requireDoc("setNodeAttr"),e);if(!n)throw new Error(`Node not found at path [${e.join(", ")}].`);const s={type:"setNodeAttr",path:e,attrs:t,...n.attrs?{previousAttrs:n.attrs}:{}};return this.steps.push(s),this.advanceDoc(s),this}insertInlineNode(e,t,n){const s={type:"insertInlineNode",blockId:e,offset:t,node:n};return this.steps.push(s),this.advanceDoc(s),this}removeInlineNode(e,t){const n=this.requireDoc("removeInlineNode"),s=C(this.requireBlock(n,e),t);if(!s||"inline"!==s.kind)throw new Error(`No InlineNode at offset ${t} in block "${e}".`);const i={type:"removeInlineNode",blockId:e,offset:t,removedNode:s.node};return this.steps.push(i),this.advanceDoc(i),this}setInlineNodeAttr(e,t,n){const s=this.requireDoc("setInlineNodeAttr"),i=p(this.requireBlock(s,e));let r=0;for(const o of i){if(h(o)&&r===t){const s={type:"setInlineNodeAttr",blockId:e,offset:t,attrs:n,previousAttrs:o.attrs};return this.steps.push(s),this.advanceDoc(s),this}r+=h(o)?1:o.text.length}throw new Error(`No InlineNode at offset ${t} in block "${e}".`)}readonlyAllowed(){return this._readonlyAllowed=!0,this}setSelection(e){return this.selection=e,this}setNodeSelection(e,t){return this.selection=_(e,t),this}setStoredMarks(e,t){return this.steps.push({type:"setStoredMarks",marks:e,previousMarks:t}),this.storedMarks=e,this}build(){return{steps:[...this.steps],selectionBefore:this.selectionBefore,selectionAfter:this.selection,storedMarksAfter:this.storedMarks,mapping:lt.from(this.stepMaps),forwardStepMaps:[...this.stepMaps],metadata:{origin:this.origin,timestamp:Date.now(),...this._readonlyAllowed?{readonlyAllowed:!0}:{}}}}requireDoc(e){if(!this.workingDoc)throw new Error(`${e} requires a document. Use state.transaction() or provide doc to constructor.`);return this.workingDoc}requireBlock(e,t){const n=T(e,t);if(!n)throw new Error(`Block "${t}" not found in working document.`);return n}tryGetBlock(e){return this.workingDoc?T(this.workingDoc,e)??null:null}advanceDoc(e){const t=this.workingDoc??Ut;this.stepMaps.push(rt(t,e)),this.workingDoc&&(this.workingDoc=st(this.workingDoc,e))}},Ut={children:[]},qt=class e{doc;selection;storedMarks;schema;_blockMap=null;_blockOrder=null;constructor(e,t,n,s){this.doc=e,this.selection=t,this.storedMarks=n,this.schema=s}static create(t){const n=t?.schema??Me(),s=t?.doc??I(),i=Jt(s.children);return new e(s,t?.selection??F(i?i.id:U(""),0),null,n)}transaction(e="api"){return new Vt(this.selection,this.storedMarks,e,this.doc)}apply(t){let n=this.doc;for(const e of t.steps)n=st(n,e);const s=Gt(n,t.selectionAfter);return new e(n,s,t.storedMarksAfter,this.schema)}getBlock(e){return this._blockMap??=function(e){const t=/* @__PURE__ */new Map;return function e(n){for(const s of n)x(s)&&(t.set(s.id,s),e(s.children))}(e.children),t}(this.doc),this._blockMap.get(e)}getBlockOrder(){return this._blockOrder??=function(e){const t=[];return function e(n){for(const s of n)x(s)&&(o(s)?t.push(s.id):e(s.children))}(e.children),t}(this.doc),this._blockOrder}getNodePath(e){return M(this.doc,e)}getParent(e){const t=M(this.doc,e);if(!t||t.length<=1)return;const n=t[t.length-2];return n?T(this.doc,n):void 0}withSelection(t){const n=Gt(this.doc,t);return new e(this.doc,n,this.storedMarks,this.schema)}toJSON(){return{doc:this.doc,selection:this.selection}}static fromJSON(t,n){return new e(t.doc,t.selection,null,n??Me())}};function Wt(e,t){const n=T(e,t.blockId);if(n){const e=y(n);return t.offset>e?O(t.blockId,e,t.path):t}const s=e.children[0];return s?O(s.id,0):t}function Gt(e,t){if(L(t))return T(e,t.nodeId)?t:Qt(e,t);if(B(t))return T(e,t.blockId)?t:Qt(e,t);const n=Wt(e,t.anchor),s=Wt(e,t.head);return n===t.anchor&&s===t.head?t:A(n,s)}function Qt(e,t){const n=Jt(e.children);return n?F(n.id,0):t}function Jt(e){for(const t of e){if(!x(t))continue;if(o(t))return t;const e=Jt(t.children);if(e)return e}return null}function Xt(e,t,n){const s=function(e){const t=en(e.children,Zt);return t===e.children?e:{children:t}}(function(e){const t=en(e.children,Yt);return t===e.children?e:{children:t}}(e)),i=t?tn(s,t):s,r=t?pe(t):void 0;n(qt.create({doc:i,schema:r}))}function Yt(e){const n=en(e.children,e=>r(e)||h(e)?e:Yt(e)),s=e.htmlId,i=t(s),o=Object.prototype.hasOwnProperty.call(e,"htmlId"),a=s===i&&(void 0!==i||!o);if(n===e.children&&a)return e;const{htmlId:l,...c}=e;return{...c,...i?{htmlId:i}:{},children:n}}function Zt(e){if(!e.children)return e;const t=en(e.children,e=>r(e)||h(e)?e.marks?e:{...e,marks:[]}:Zt(e));return t===e.children?e:{...e,children:t}}function en(e,t){let n=!1;const s=e.map(e=>{const s=t(e);return s!==e&&(n=!0),s});return n?s:e}function tn(e,t){return{children:e.children.map(e=>nn(e,t))}}function nn(e,t){const n=t.getNodeSpec(e.type);let s=e;if(n?.content&&n.content.allow.some(e=>"text"!==e)){const i=n.content.allow.includes("text");if(o(e)){if(!i&&(0!==e.children.length||0!==n.content.min)){const t=e.children.length>0?e.children:void 0,n=S(K("paragraph"),t);s=S(e.type,[n],e.id,e.attrs,e.htmlId)}}else{const n=e.children.map(e=>r(e)||h(e)?e:nn(e,t));s=S(e.type,n,e.id,e.attrs,e.htmlId)}}const i=n?.normalizeAttrs?.(s);if(n?.normalizeAttrs&&!b(s.attrs,i)){const{attrs:e,...t}=s;s={...t,...i?{attrs:i}:{}}}return n?.normalizeNode?.(s)??s}function sn(e){return e.doc.children.map(rn).join("\n")}function rn(e){return o(e)?d(e):v(e).map(rn).join("\n")}function on(e){if(!e)return!0;if(0===e.children.length)return!0;if(e.children.length>1)return!1;const t=e.children[0];return!t||"paragraph"===t.type&&0===y(t)}var an={shorthand:!0,paste:"auto"},ln={shorthand:!1,paste:"never"};function cn(e){return void 0===e||!0===e?an:!1===e?ln:{shorthand:e.shorthand??!0,paste:e.paste??"auto"}}var hn=class{config={};getConfig(){return this.config}setConfig(e){this.config=e}mergeConfig(e){this.config={...this.config,...e}}applyAttribute(e,t,n){if("placeholder"===e){const e=t??void 0;this.config={...this.config,placeholder:e},this.applyPlaceholder(e,n.contentElement)}if("readonly"===e){const e=null!==t;this.applyReadonly(e,n.contentElement,n.pluginManager),this.config={...this.config,readonly:e}}if("theme"===e){const e=t??void 0;this.config={...this.config,theme:e},n.themeController?.apply(e??Be.Light)}"paper-size"===e&&(null===t?(n.applyPaperSize(void 0),this.config={...this.config,paperSize:void 0}):Pe(t)&&(n.applyPaperSize(t),this.config={...this.config,paperSize:t})),"dir"===e&&this.applyDir("ltr"===t||"rtl"===t?t:void 0,n.contentElement,n.editorWrapper)}applyRuntimeConfig(e,t){void 0!==e.placeholder&&this.applyPlaceholder(e.placeholder,t.contentElement),void 0!==e.readonly&&this.applyReadonly(e.readonly,t.contentElement,t.pluginManager),"paperSize"in e&&t.applyPaperSize(e.paperSize),"dir"in e&&this.applyDir(e.dir,t.contentElement,t.editorWrapper),this.config={...this.config,...e}}applyTheme(e,t){this.config={...this.config,theme:e},t?.apply(e)}getTheme(){return this.config.theme??Be.Light}get isReadOnly(){return this.config.readonly??!1}get markdownShorthand(){return cn(this.config.markdown).shorthand}get pasteMarkdown(){return cn(this.config.markdown).paste}getPaperSize(){return this.config.paperSize}applyPlaceholder(e,t){if(!t)return;const n=t.getAttribute("data-default-placeholder")??"";t.setAttribute("data-placeholder",e??n)}applyReadonly(e,t,n){t&&(t.contentEditable=e?"false":"true",e?t.setAttribute("aria-readonly","true"):t.removeAttribute("aria-readonly"),n?.setReadOnly(e))}applyDir(e,t,n){t&&(e?(n?.setAttribute("dir",e),t.setAttribute("dir",e)):(n?.removeAttribute("dir"),t.removeAttribute("dir")))}},dn=class{listeners=/* @__PURE__ */new Map;on(e,t){this.listeners.has(e)||this.listeners.set(e,/* @__PURE__ */new Set),this.listeners.get(e)?.add(t)}off(e,t){this.listeners.get(e)?.delete(t)}emit(e,t){const n=this.listeners.get(e);if(n)for(const s of n)s(t)}clear(){this.listeners.clear()}};function pn(e,t,n){if(o(e))return t.selectedLeafIds.has(e.id)?function(e,t){const n=y(e),s=e.id===t.firstBlockId?t.firstOffset:0,i=e.id===t.lastBlockId?t.lastOffset:n;if(0===s&&i===n)return e;const r=a(w(e,s,i)),{htmlId:o,...l}=e;return{...l,children:r}}(e,t):null;const s=v(e),i=[];let r=s.length!==e.children.length;for(const o of s){const e=pn(o,t,n);e?(i.push(e),e!==o&&(r=!0)):r=!0}if(0===i.length)return null;if(!r)return e;const{htmlId:l,...c}=e,h={...c,children:i};return n?.getNodeSpec(e.type)?.transformSelectionSlice?.(e,h)??h}var un=class{element;getState;dispatch;schemaRegistry;syncSelection;isReadOnly;handleCopy;handleCut;constructor(e,t){this.element=e,this.getState=t.getState,this.dispatch=t.dispatch,this.schemaRegistry=t.schemaRegistry,this.syncSelection=t.syncSelection,this.isReadOnly=t.isReadOnly??(()=>!1),this.handleCopy=this.onCopy.bind(this),this.handleCut=this.onCut.bind(this),e.addEventListener("copy",this.handleCopy),e.addEventListener("cut",this.handleCut)}onCopy(e){if(!gt(e,this.element))return;this.syncSelection?.();const t=this.getState(),n=t.selection;if(B(n))return;if(j(n)&&z(n))return;e.preventDefault();const s=e.clipboardData;s&&(L(n)?this.writeNodeSelectionToClipboard(s,t):this.writeTextSelectionToClipboard(s,t))}onCut(e){if(!gt(e,this.element))return;if(this.isReadOnly())return;this.syncSelection?.();const t=this.getState(),n=t.selection;if(B(n))return;if(j(n)&&z(n))return;e.preventDefault();const s=e.clipboardData;if(s)if(L(n)){this.writeNodeSelectionToClipboard(s,t);const e=he(t,n);e&&this.dispatch(e)}else{this.writeTextSelectionToClipboard(s,t);const e=Se(t);e&&this.dispatch(e)}}writeNodeSelectionToClipboard(e,t){const n=t.selection;if(!L(n))return;const s=t.getBlock(n.nodeId);if(!s)return;if(!o(s))return this.schemaRegistry&&e.setData("text/html",$e({children:[s]},this.schemaRegistry)),void e.setData("text/plain",this.plainTextFromBlockTree(s));const i={type:s.type,...s.htmlId?{htmlId:s.htmlId}:{},...s.attrs?{attrs:{...s.attrs}}:{}};e.setData("application/x-notectl-block",JSON.stringify(i));const r=this.schemaRegistry?.getNodeSpec(s.type);r?.toHTML&&e.setData("text/html",Ke(r.toHTML(s,""),s.htmlId));const a=s.attrs,l="string"==typeof a?.alt?a.alt:"";e.setData("text/plain",l)}plainTextFromBlockTree(e){return o(e)?d(e):v(e).map(e=>this.plainTextFromBlockTree(e)).join("\n")}writeTextSelectionToClipboard(e,t){const n=t.selection;if(L(n))return;if(B(n))return;if(z(n))return;if(this.selectionRequiresDocumentSerializer(t))return void this.writeCompositeSelectionToClipboard(e,t);const s=t.getBlockOrder(),i=D(n,s),r=s.indexOf(i.from.blockId),o=s.indexOf(i.to.blockId),a=[],l=[],c=[];for(let d=r;d<=o;d++){const e=s[d];if(!e)continue;const n=t.getBlock(e);if(!n)continue;const h=y(n),p=d===r?i.from.offset:0,u=d===o?i.to.offset:h,g=this.extractSegmentsForRange(n,p,u),m=this.plainTextFromSegments(g);a.push(m),c.push({block:n,start:p,end:u}),l.push({type:n.type,text:m,...0===p&&u===h&&n.htmlId?{htmlId:n.htmlId}:{},...n.attrs?{attrs:{...n.attrs}}:{},...g.length>0?{segments:g}:{}})}const h=a.join("\n");if(e.setData("text/plain",h),this.schemaRegistry){const n=je(this.schemaRegistry),a=r!==o,h=l.some(e=>void 0!==e.htmlId||void 0!==e.type&&"paragraph"!==e.type);if(a||this.containsInlineSegments(l)||h){const t=this.serializeBlocksToClipboardHTML(c,n,l);e.setData("text/html",t)}else{const o=s[r],a=o?t.getBlock(o):void 0;if(a){const t=this.serializeBlockRangeToHTML(a,i.from.offset,i.to.offset,n);e.setData("text/html",t)}}}}selectionRequiresDocumentSerializer(e){const t=this.getTextSelection(e);if(!t||z(t))return!1;const n=D(t,e.getBlockOrder()),s=M(e.doc,n.from.blockId),i=M(e.doc,n.to.blockId);if(!s||!i)return!1;if(s[0]===i[0]){const t=e.doc.children.find(e=>e.id===s[0]);return!(!t||o(t))}const r=e.doc.children.findIndex(e=>e.id===s[0]),a=e.doc.children.findIndex(e=>e.id===i[0]);for(let l=r;l<=a;l++){const t=e.doc.children[l];if(t){if(!o(t))return!0;if((this.schemaRegistry?.getNodeSpec(t.type))?.isVoid)return!0}}return!1}getTextSelection(e){const t=e.selection;if(j(t))return t}extractPlainTextForRange(e,t,n){return this.plainTextFromSegments(this.extractSegmentsForRange(e,t,n))}plainTextFromSegments(e){return e.map(e=>"inline"===e.kind?"":e.text).join("")}writeCompositeSelectionToClipboard(e,t){const n=this.getTextSelection(t);if(!n)return;const s=t.getBlockOrder(),i=D(n,s),r=s.indexOf(i.from.blockId),o=s.indexOf(i.to.blockId),a=[];for(let l=r;l<=o;l++){const e=s[l];if(!e)continue;const n=t.getBlock(e);if(!n)continue;const c=l===r?i.from.offset:0,h=l===o?i.to.offset:y(n);a.push(this.extractPlainTextForRange(n,c,h))}if(e.setData("text/plain",a.join("\n")),this.schemaRegistry){const s=function(e,t,n){const s=e.getBlockOrder(),i=D(t,s),r=s.indexOf(i.from.blockId),o=s.indexOf(i.to.blockId);if(-1===r||-1===o||r>o)return{children:[]};const a=e.getNodePath(i.from.blockId),l=e.getNodePath(i.to.blockId),c=a?.[0],h=l?.[0];if(!c||!h)return{children:[]};const d=e.doc.children.findIndex(e=>e.id===c),p=e.doc.children.findIndex(e=>e.id===h);if(-1===d||-1===p||d>p)return{children:[]};const u={firstBlockId:i.from.blockId,firstOffset:i.from.offset,lastBlockId:i.to.blockId,lastOffset:i.to.offset,selectedLeafIds:new Set(s.slice(r,o+1))},g=[];for(let m=d;m<=p;m++){const t=e.doc.children[m];if(!t)continue;const s=pn(t,u,n);s&&g.push(s)}return{children:g}}(t,n,this.schemaRegistry);if(s.children.length>0){const t=$e(s,this.schemaRegistry);e.setData("text/html",t)}}}serializeBlockRangeToHTML(e,t,n,s){const i=[];return g(e,t,n,{onText:(e,t)=>{this.schemaRegistry&&i.push(Ue(e,t,this.schemaRegistry,s))},onInline:e=>{const t=this.schemaRegistry?.getInlineNodeSpec(e.inlineType);t?.toHTMLString&&i.push(t.toHTMLString(e))}}),i.join("")}extractSegmentsForRange(e,t,n){const s=[];return g(e,t,n,{onText:(e,t)=>{s.push({text:e,marks:t.map(e=>({type:e.type,...e.attrs?{attrs:{...e.attrs}}:{}}))})},onInline:e=>{s.push({kind:"inline",inlineType:e.inlineType,...Object.keys(e.attrs).length>0?{attrs:{...e.attrs}}:{}})}}),s}containsInlineSegments(e){return e.some(e=>e.segments?.some(e=>"inline"===e.kind))}serializeBlocksToClipboardHTML(e,t,n){const s=[];let i,r=[];const o=()=>{r.length>0&&i&&(s.push(`<${i}>${r.join("")}</${i}>`),r=[],i=void 0)};for(const l of e){const{block:e,start:n,end:a}=l,c=0===n&&a===y(e),{htmlId:h,...d}=e,p={...d,...c&&e.htmlId?{htmlId:e.htmlId}:{}},u=this.serializeBlockRangeToHTML(e,n,a,t),g=this.schemaRegistry?.getNodeSpec(p.type);if(g?.wrapper){const e=g.wrapper(p).tag;i!==e&&(o(),i=e),g.toHTML?r.push(Ke(g.toHTML(p,u),p.htmlId)):r.push(Ke(`<li>${u}</li>`,p.htmlId))}else o(),g?.toHTML?s.push(Ke(g.toHTML(p,u),p.htmlId)):s.push(Ke(`<p>${u}</p>`,p.htmlId))}o();const a=JSON.stringify(n).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""");return s.push(`<span data-notectl-rich="${a}" hidden></span>`),s.join("")}destroy(){this.element.removeEventListener("copy",this.handleCopy),this.element.removeEventListener("cut",this.handleCut)}},gn=class{_composing=!1;_activeBlockId=null;get isComposing(){return this._composing}get activeBlockId(){return this._activeBlockId}start(e){this._composing=!0,this._activeBlockId=e}end(){this._composing=!1,this._activeBlockId=null}},mn=class{element;getState;dispatch;syncSelection;inputRuleRegistry;isReadOnly;shouldApplyInputRules;compositionTracker;getTextInputInterceptors;compositionCommitHandled=!1;handleBeforeInput;handleCompositionStart;handleCompositionEnd;constructor(e,t){this.element=e,this.getState=t.getState,this.dispatch=t.dispatch,this.syncSelection=t.syncSelection,this.inputRuleRegistry=t.inputRuleRegistry,this.isReadOnly=t.isReadOnly??(()=>!1),this.shouldApplyInputRules=t.shouldApplyInputRules??(()=>!0),this.compositionTracker=t.compositionTracker??new gn,this.getTextInputInterceptors=t.getTextInputInterceptors??(()=>[]),this.handleBeforeInput=this.onBeforeInput.bind(this),this.handleCompositionStart=this.onCompositionStart.bind(this),this.handleCompositionEnd=this.onCompositionEnd.bind(this),e.addEventListener("beforeinput",this.handleBeforeInput),e.addEventListener("compositionstart",this.handleCompositionStart),e.addEventListener("compositionend",this.handleCompositionEnd)}onBeforeInput(e){if(!gt(e,this.element))return;if(this.isReadOnly())return;if(this.compositionTracker.isComposing&&"insertCompositionText"===e.inputType)return;if(!function(e){switch(e){case"insertText":case"insertReplacementText":case"insertFromComposition":case"insertParagraph":case"insertLineBreak":case"deleteContentBackward":case"deleteContentForward":case"deleteWordBackward":case"deleteWordForward":case"deleteSoftLineBackward":case"deleteSoftLineForward":case"deleteByCut":case"insertFromPaste":case"insertFromDrop":case"formatBold":case"formatItalic":case"formatUnderline":case"historyUndo":case"historyRedo":return!0;default:return!1}}(e.inputType))return;"insertText"!==e.inputType&&"insertCompositionText"!==e.inputType&&"insertFromComposition"!==e.inputType&&this.syncSelection(),e.preventDefault();const t=this.getState();let n=null;switch(e.inputType){case"insertText":case"insertReplacementText":e.data&&(n=this.runTextInputInterceptors(e.data,t)??ye(t,e.data,"input"));break;case"insertFromComposition":e.data&&(this.compositionCommitHandled=!0,n=this.runTextInputInterceptors(e.data,t)??ye(t,e.data,"input"));break;case"insertParagraph":n=Re(t);break;case"insertLineBreak":n=Ie(t);break;case"deleteContentBackward":n=ge(t);break;case"deleteContentForward":n=ke(t);break;case"deleteWordBackward":n=fe(t);break;case"deleteWordForward":n=be(t);break;case"deleteSoftLineBackward":n=xe(t);break;case"deleteSoftLineForward":n=me(t)}n&&(this.dispatch(n),"insertText"!==e.inputType&&"insertReplacementText"!==e.inputType||this.checkInputRules())}onCompositionStart(e){if(!gt(e,this.element))return;const t=this.getState();j(t.selection)&&(this.compositionCommitHandled=!1,this.compositionTracker.start(t.selection.anchor.blockId))}onCompositionEnd(e){if(!gt(e,this.element))return;if(this.compositionTracker.end(),this.isReadOnly())return;if(this.compositionCommitHandled)return void(this.compositionCommitHandled=!1);const t=e.data;if(!t)return;const n=ye(this.getState(),t,"input");this.dispatch(n)}runTextInputInterceptors(e,t){const n=this.getTextInputInterceptors();if(0===n.length)return null;for(const s of n){const n=s.interceptor(e,t);if(n)return n}return null}checkInputRules(){if(!this.shouldApplyInputRules())return;if(!this.inputRuleRegistry)return;const e=this.inputRuleRegistry.getInputRules();if(0===e.length)return;const t=this.getState();if(!j(t.selection))return;const{anchor:n}=t.selection,s=t.getBlock(n.blockId);if(!s)return;const i=function(e){let t="";for(const n of p(e))t+=r(n)?n.text:"";return t}(s).slice(0,n.offset);for(const r of e){const e=r.pattern.exec(i);if(e){const n=e.index,s=n+e[0].length,i=r.handler(t,e,n,s);if(i)return void this.dispatch(i)}}}destroy(){this.element.removeEventListener("beforeinput",this.handleBeforeInput),this.element.removeEventListener("compositionstart",this.handleCompositionStart),this.element.removeEventListener("compositionend",this.handleCompositionEnd)}},fn={Period:".",Comma:",",Slash:"/",Semicolon:";",Quote:"'",BracketLeft:"[",BracketRight:"]",Backslash:"\\",Minus:"-",Equal:"=",Backquote:"`"},yn={1:"!",2:"@",3:"#",4:"$",5:"%",6:"^",7:"&",8:"*",9:"(",0:")","`":"~","-":"_","=":"+","[":"{","]":"}","\\":"|",";":":","'":'"',",":"<",".":">","/":"?"},kn=function(){const e=/* @__PURE__ */new Map;for(let t=0;t<26;t++){const n=String.fromCharCode(65+t);e.set(`Key${n}`,n)}for(let t=0;t<=9;t++)e.set(`Digit${t}`,String(t)),e.set(`Numpad${t}`,String(t));for(const[t,n]of Object.entries(fn))e.set(t,n);return e}();function wn(e){const t=[];return(e.metaKey||e.ctrlKey)&&t.push("Mod"),e.shiftKey&&t.push("Shift"),e.altKey&&t.push("Alt"),t}function Sn(e){const t=wn(e);let n=e.key;return" "===n?n="Space":1===n.length&&(n=n.toUpperCase()),t.push(n),t.join("-")}function vn(e){return e.ctrlKey||e.metaKey?e.ctrlKey&&e.altKey&&!e.metaKey?null:kn.get(e.code)??null:null}var bn={ArrowLeft:"left",ArrowRight:"right",ArrowUp:"up",ArrowDown:"down"},In=class{element;getState;dispatch;undo;redo;keymapRegistry;isReadOnly;compositionTracker;getTextDirectionFn;navigateFromGapCursorFn;handleKeydown;constructor(e,t){this.element=e,this.getState=t.getState,this.dispatch=t.dispatch,this.undo=t.undo,this.redo=t.redo,this.keymapRegistry=t.keymapRegistry,this.isReadOnly=t.isReadOnly??(()=>!1),this.compositionTracker=t.compositionTracker,this.getTextDirectionFn=t.getTextDirection??(()=>"ltr"),this.navigateFromGapCursorFn=t.navigateFromGapCursor,this.handleKeydown=this.onKeydown.bind(this),e.addEventListener("keydown",this.handleKeydown)}onKeydown(e){if(!gt(e,this.element))return;if(this.compositionTracker?.isComposing)return;if(this.handleNodeSelectionKeys(e))return;if(this.handleGapCursorKeys(e))return;if(this.isReadOnly()){if(this.keymapRegistry){const t=this.keymapRegistry.getKeymapsByPriority();if(this.dispatchKeymaps(e,[t.navigation]))return}return void this.handleEscape(e)}if(this.keymapRegistry){const t=this.keymapRegistry.getKeymapsByPriority();if(this.dispatchKeymaps(e,[t.context,t.navigation,t.default]))return}if(this.handleGapCursorArrowFallback(e))return;if(this.handleTab(e))return;if(this.handleEscape(e))return;if(!e.metaKey&&!e.ctrlKey)return;let t=this.resolveBuiltinShortcut(e.key.toLowerCase(),e.shiftKey);if(null===t){const n=vn(e);null!==n&&(t=this.resolveBuiltinShortcut(n.toLowerCase(),e.shiftKey))}if(null===t)return;if(e.preventDefault(),"undo"===t)return void this.undo();if("redo"===t)return void this.redo();const n=ve(this.getState());n&&this.dispatch(n)}resolveBuiltinShortcut(e,t){return"z"!==e||t?"z"===e&&t||"y"===e&&!t?"redo":"a"!==e||t?null:"selectAll":"undo"}dispatchKeymaps(e,t){if(this.runDescriptor(e,t,Sn(e)))return!0;for(const n of function(e){const t=vn(e);if(null===t)return[];const n=wn(e),s=[[...n,t].join("-")];if(e.shiftKey){const e=yn[t];void 0!==e&&s.push([...n,e].join("-"))}return s}(e))if(this.runDescriptor(e,t,n))return!0;return!1}runDescriptor(e,t,n){for(const s of t)for(let t=s.length-1;t>=0;t--){const i=s[t]?.[n];if(i?.())return e.preventDefault(),!0}return!1}handleNodeSelectionKeys(e){const t=this.getState(),n=t.selection;if(!L(n))return!1;const s=e.key;if(!("ArrowLeft"!==s&&"ArrowUp"!==s&&"ArrowRight"!==s&&"ArrowDown"!==s||e.shiftKey||e.metaKey||e.ctrlKey||e.altKey)){const i=bn[s];if(!i)return!1;const r=ce(t,i,this.isSelectedBlockRtl(n.nodeId));return!!r&&(e.preventDefault(),this.dispatch(r),!0)}if("Backspace"===s||"Delete"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const s=he(t,n);return s&&this.dispatch(s),!0}if("Enter"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const n=Re(t);return n&&this.dispatch(n),!0}if("Escape"===s){e.preventDefault();const n=ce(t,"right");return n&&this.dispatch(n),!0}return!1}handleGapCursorKeys(e){const t=this.getState(),n=t.selection;if(!B(n))return!1;const s=e.key;if("ArrowLeft"===s||"ArrowRight"===s||"ArrowUp"===s||"ArrowDown"===s)return!1;if("Escape"===s||"Tab"===s)return!1;if(e.ctrlKey||e.metaKey||e.altKey)return!1;if("Enter"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const n=Re(t);return n&&this.dispatch(n),!0}if("Backspace"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const s=de(t,n);return s&&this.dispatch(s),!0}if("Delete"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const s=Te(t,n);return s&&this.dispatch(s),!0}if(1===s.length){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const n=ye(t,s);return this.dispatch(n),!0}return!1}handleGapCursorArrowFallback(e){const t=this.getState(),n=t.selection;if(!B(n))return!1;const s=e.key;if("ArrowLeft"!==s&&"ArrowRight"!==s&&"ArrowUp"!==s&&"ArrowDown"!==s)return!1;const i=bn[s];if(!i)return!1;if(!this.navigateFromGapCursorFn)return!1;const r=this.navigateFromGapCursorFn(t,i,this.element);return!(!r||N(r.selectionAfter,n)||(e.preventDefault(),this.dispatch(r),0))}handleTab(e){if("Tab"!==e.key)return!1;if(e.metaKey||e.ctrlKey||e.altKey)return!1;if(e.preventDefault(),e.shiftKey)return!0;const t=ye(this.getState(),"\t");return this.dispatch(t),!0}handleEscape(e){return"Escape"===e.key&&(this.element.blur(),!0)}isSelectedBlockRtl(e){const t=this.element.querySelector(`[data-block-id="${e}"]`);return t instanceof HTMLElement&&"rtl"===this.getTextDirectionFn(t)}destroy(){this.element.removeEventListener("keydown",this.handleKeydown)}},Rn=/(^|\n) {0,3}(```|~~~)/,Cn=/(^|\n)\s*\|?[ :|]*-{3,}[ :|-]*(\n|$)/,xn=/(^|\n) {0,3}(#{1,6} |[-*+] |\d{1,9}[.)] |> )/g;function Tn(e,t){if(0===t.blocks.length)return e.transaction("paste").setSelection(e.selection).build();const n=t.blocks[0];return n?1===t.blocks.length&&n.type===K("paragraph")?function(e,t){const n=e.selection;if(L(n))return e.transaction("paste").setSelection(n).build();if(B(n))return function(e,t,n){const s=Pn(e,t);if(!s)return e.transaction("paste").setSelection(t).build();const i=m(),r=e.transaction("paste");r.insertNode(s.parentPath,s.insertIndex,S(K("paragraph"),[R("")],i));const o=Mn(r,i,0,n);return r.setSelection(F(i,o)),r.build()}(e,n,t);const{builder:s,insertBlockId:i,insertOffset:r}=En(e,n),o=Mn(s,i,r,t);return s.setSelection(F(i,o)),s.build()}(e,n.segments):1===t.blocks.length?function(e,t){const n=e.selection;if(L(n))return e.transaction("paste").setSelection(n).build();if(B(n))return An(e,n,[t]);const{builder:s,insertBlockId:i,insertOffset:r}=En(e,n);s.setBlockType(i,t.type,t.attrs);const o=Mn(s,i,r,t.segments);return s.setSelection(F(i,o)),s.build()}(e,n):function(e,t){const n=e.selection;if(L(n))return e.transaction("paste").setSelection(n).build();if(B(n))return An(e,n,t.blocks);const{builder:s,landingId:i,resolved:r,insertBlockId:o,insertOffset:l}=En(e,n),c=e.getBlockOrder();let h;if(i){const t=M(e.doc,r.blockId)?.[0];h=t?e.doc.children.findIndex(e=>e.id===t):0}else h=c.indexOf(o);const d=t.blocks[0],p=t.blocks[t.blocks.length-1];if(!d||!p)return s.build();const u=t.blocks.slice(1,-1),g=Mn(s,o,l,d.segments),f=m();s.splitBlock(o,g,f),d.type!==K("paragraph")&&s.setBlockType(o,d.type,d.attrs);let y=h+1;for(const k of u){const e=S(k.type,a(k.segments),m(),k.attrs);s.insertNode([],y,e),y++}return Mn(s,f,0,p.segments),p.type!==K("paragraph")&&s.setBlockType(f,p.type,p.attrs),s.setSelection(F(f,tt(p.segments))),s.build()}(e,t):e.transaction("paste").setSelection(e.selection).build()}function En(e,t){const n=e.transaction("paste");let s;z(t)||(s=Ce(e,n));const i=oe(t,e.getBlockOrder());return{builder:n,landingId:s,resolved:i,insertBlockId:s??i.blockId,insertOffset:s?0:i.offset}}function Mn(e,t,n,s){let i=n,r=[];const o=()=>{if(0===r.length)return;const n=r.map(e=>"text"===e.kind?e.text:"").join("");n.length>0&&(e.insertText(t,i,n,[],r),i+=n.length),r=[]};for(const a of s)"inline"===a.kind?(o(),e.insertInlineNode(t,i,a.node),i+=1):r.push(a);return o(),i}function Pn(e,t){const n=M(e.doc,t.blockId);if(!n)return null;const s=le(n),i=W(q(e,s),t.blockId);return i<0?null:{parentPath:s,insertIndex:"before"===t.side?i:i+1}}function An(e,t,n){const s=Pn(e,t);if(!s)return e.transaction("paste").setSelection(t).build();const i=e.transaction("paste");let r,o=s.insertIndex,l=0;for(const c of n){const e=m(),t=S(c.type,a(c.segments),e,c.attrs);i.insertNode(s.parentPath,o,t),o++,r=e,l=tt(c.segments)}return r&&i.setSelection(F(r,l)),i.build()}var Bn=new Set(["P","DIV","H1","H2","H3","H4","H5","H6","BLOCKQUOTE","UL","OL","LI","HR","PRE","TABLE","THEAD","TBODY","TR"]),Dn=new Set(["STRONG","B","EM","I","U","S","STRIKE","DEL","A","SPAN","BR","SUB","SUP","CODE"]),Nn=/^H([1-6])$/;function On(e){const t=e.style.fontWeight,n=Number.parseInt(t,10);return!("normal"===t||!Number.isNaN(n)&&n<700)&&{}}var Ln=new Map([["STRONG",{markName:"bold",getAttrs:On}],["B",{markName:"bold",getAttrs:On}],["EM",{markName:"italic"}],["I",{markName:"italic"}],["U",{markName:"underline"}],["S",{markName:"strikethrough"}],["STRIKE",{markName:"strikethrough"}],["DEL",{markName:"strikethrough"}],["A",{markName:"link",getAttrs:function(e){return{href:n(e.getAttribute("href")??"")}}}]]),Hn=class{schema;blockParseRules;markParseRules;inlineParseRules;blockTagHandlers;constructor(e){this.schema=e.schema,this.blockParseRules=e.schemaRegistry?.getBlockParseRules()??[],this.markParseRules=e.schemaRegistry?.getMarkParseRules()??[],this.inlineParseRules=e.schemaRegistry?.getInlineParseRules()??[],this.blockTagHandlers=this.buildBlockTagHandlers()}parse(e){We(e);const t=this.parseContainer(e);return 0===t.length?{blocks:[{type:this.resolveBlockType(K("paragraph")),segments:[l("")]}]}:{blocks:t}}buildBlockTagHandlers(){const e=e=>this.parseBlockWithLineBreaks(e,this.resolveBlockType(K("paragraph"))),t=e=>this.parseTableAsParagraphs(e);return new Map([["P",e],["DIV",e],["BLOCKQUOTE",e=>this.parseBlockquote(e)],["UL",e=>this.parseList(e,"bullet",0)],["OL",e=>this.parseList(e,"ordered",0)],["LI",e=>this.parseListItem(e,"bullet",0)],["HR",()=>[{type:this.resolveBlockType(K("horizontal_rule")),segments:[]}]],["PRE",e=>[{type:this.resolveBlockType(K("paragraph")),segments:this.ensureSegments(this.parsePreContent(e))}]],["TABLE",t],["THEAD",t],["TBODY",t],["TR",t]])}parseContainer(e){const t=[];let n=[];for(const s of Array.from(e.childNodes))if(s.nodeType===Node.ELEMENT_NODE){const e=s;this.isBlockElement(e)?(this.flushPendingSegments(t,n),n=[],t.push(...this.parseBlockElement(e))):e.children.length>0&&this.containsBlockDescendants(e)?(this.flushPendingSegments(t,n),n=[],t.push(...this.parseContainerWithMarks(e,this.marksFromElement(e)))):n.push(...this.parseInlineNode(s,[]))}else if(s.nodeType===Node.TEXT_NODE){const e=s.textContent??"";e&&n.push(l(e))}return this.flushPendingSegments(t,n),t}parseBlockElement(e){const t=Nn.exec(e.tagName);if(t)return this.parseHeading(e,Number(t[1]));const n=this.blockTagHandlers.get(e.tagName);return n?n(e):this.parseUnknownBlock(e)}parseHeading(e,t){const n=this.resolveBlockType(K("heading"));return[{type:n,...n===K("heading")?{attrs:{level:t}}:{},segments:this.ensureSegments(this.parseInlineChildren(e,[]))}]}parseUnknownBlock(e){const t=this.matchBlockRule(e);return t?[{type:t.type,...t.attrs?{attrs:t.attrs}:{},segments:this.ensureSegments(this.parseInlineChildren(e,[]))}]:[{type:this.resolveBlockType(K("paragraph")),segments:this.ensureSegments(this.parseInlineChildren(e,[]))}]}parseBlockquote(e){const t=this.resolveBlockType(K("blockquote"));return Array.from(e.childNodes).some(e=>e.nodeType===Node.ELEMENT_NODE&&this.isBlockElement(e))?this.parseContainer(e).map(e=>({type:t,segments:e.segments})):[{type:t,segments:this.ensureSegments(this.parseInlineChildren(e,[]))}]}parseList(e,t,n){const s=[];for(const i of Array.from(e.children)){const e=i;"LI"===e.tagName?s.push(...this.parseListItem(e,t,n)):"UL"===e.tagName?s.push(...this.parseList(e,"bullet",n+1)):"OL"===e.tagName&&s.push(...this.parseList(e,"ordered",n+1))}return s}parseListItem(e,t,n){const s=[],i=this.resolveBlockType(K("list_item")),r=this.hasCheckbox(e),o=r?"checklist":t,a=!!r&&this.isCheckboxChecked(e),c=[],h=[];for(const d of Array.from(e.childNodes))if(d.nodeType===Node.ELEMENT_NODE){const e=d;"UL"===e.tagName||"OL"===e.tagName?h.push(e):"INPUT"===e.tagName&&"checkbox"===e.getAttribute("type")||(this.isBlockElement(e)?c.push(...this.parseInlineChildren(e,[])):c.push(...this.parseInlineNode(d,[])))}else if(d.nodeType===Node.TEXT_NODE){const e=d.textContent??"";e&&c.push(l(e))}s.push({type:i,attrs:{listType:o,indent:n,..."checklist"===o?{checked:a}:{}},segments:this.ensureSegments(this.normalizeSegments(c))});for(const l of h){const e="OL"===l.tagName?"ordered":"bullet";s.push(...this.parseList(l,e,n+1))}return s}parseInlineChildren(e,t){const n=[];for(const s of Array.from(e.childNodes))n.push(...this.parseInlineNode(s,t));return this.normalizeSegments(n)}parseInlineNode(e,t){if(e.nodeType===Node.TEXT_NODE){const n=e.textContent??"";return n?[l(n,this.resolveMarks(t))]:[]}if(e.nodeType!==Node.ELEMENT_NODE)return[];const n=e,s=n.tagName;if("BR"===s)return[l("\n",this.resolveMarks(t))];const r=this.matchInlineNodeRule(n);if(r)return[i(r)];if(this.isBlockElement(n)&&!Dn.has(s))return this.parseInlineChildren(n,t);const o=this.mergeMarks(t,this.marksFromElement(n));return this.parseInlineChildren(n,o)}matchInlineNodeRule(e){if(0===this.inlineParseRules.length)return null;const t=e.tagName.toLowerCase();for(const n of this.inlineParseRules)if(n.rule.tag===t){if(n.rule.getAttrs){const t=n.rule.getAttrs(e);if(!1===t)continue;return k(V(n.type),t)}return k(V(n.type))}return null}parsePreContent(e){const t=e.textContent??"";return t?[l(t)]:[]}parseTableAsParagraphs(e){const t=[],n=e.querySelectorAll("td, th");for(const s of Array.from(n)){const e=this.parseInlineChildren(s,[]);e.some(e=>"inline"===e.kind||e.text.length>0)&&t.push({type:this.resolveBlockType(K("paragraph")),segments:this.ensureSegments(e)})}return t}marksFromElement(e){return this.matchMarkRules(e)||this.fallbackMarksFromElement(e)}matchMarkRules(e){if(0===this.markParseRules.length)return null;const t=e.tagName.toLowerCase(),n=[],s=/* @__PURE__ */new Set;for(const i of this.markParseRules)if(i.rule.tag===t&&!s.has(i.type)){if(i.rule.getAttrs){const t=i.rule.getAttrs(e);if(!1===t)continue;n.push({type:$(i.type),...Object.keys(t).length>0?{attrs:t}:{}})}else n.push({type:$(i.type)});s.add(i.type)}return s.size>0?n:null}fallbackMarksFromElement(e){const t=Ln.get(e.tagName);if(!t)return[];if(t.getAttrs){const n=t.getAttrs(e);return!1===n?[]:Object.keys(n).length>0?[{type:$(t.markName),attrs:n}]:[{type:$(t.markName)}]}return[{type:$(t.markName)}]}mergeMarks(e,t){const n=[...e];for(const s of t)n.some(e=>e.type===s.type)||n.push(s);return n}resolveMarks(e){return e.filter(e=>ue(this.schema,e.type))}resolveBlockType(e){return Ee(this.schema,e)?e:K("paragraph")}normalizeSegments(e){if(0===e.length)return[];const t=[];for(const n of e){if("inline"===n.kind){t.push(n);continue}const e=t[t.length-1];e&&"text"===e.kind&&c(e.marks,n.marks)?t[t.length-1]=l(e.text+n.text,e.marks):n.text.length>0&&t.push(n)}return t}ensureSegments(e){return 0===e.length?[l("")]:e}matchBlockRule(e){const t=e.tagName.toLowerCase();for(const n of this.blockParseRules)if(n.rule.tag===t){if(n.rule.getAttrs){const t=n.rule.getAttrs(e);if(!1===t)continue;return{type:K(n.type),attrs:t}}return{type:K(n.type)}}return null}isBlockElement(e){if(Bn.has(e.tagName))return!0;const t=e.tagName.toLowerCase();return this.blockParseRules.some(e=>e.rule.tag===t)}hasCheckbox(e){return null!==e.querySelector('input[type="checkbox"]')}isCheckboxChecked(e){return e.querySelector('input[type="checkbox"]')?.hasAttribute("checked")??!1}containsBlockDescendants(e){for(const t of Array.from(e.children)){if(this.isBlockElement(t))return!0;if(this.containsBlockDescendants(t))return!0}return!1}parseContainerWithMarks(e,t){const n=this.parseContainer(e);return 0===t.length?n:n.map(e=>({...e,segments:this.prependMarks(e.segments,t)}))}prependMarks(e,t){return e.map(e=>"inline"===e.kind?e:l(e.text,this.mergeMarks(t,e.marks)))}parseBlockWithLineBreaks(e,t){const n=this.parseInlineChildren(e,[]);if(!n.some(e=>"text"===e.kind&&e.text.includes("\n")))return[{type:t,segments:this.ensureSegments(n)}];const s=[];let i=[];for(const r of n){if("inline"===r.kind){i.push(r);continue}const e=r.text.split("\n");for(let n=0;n<e.length;n++){n>0&&(s.push({type:t,segments:this.ensureSegments(this.normalizeSegments(i))}),i=[]);const o=e[n]??"";o&&i.push(l(o,r.marks))}}return s.push({type:t,segments:this.ensureSegments(this.normalizeSegments(i))}),s}flushPendingSegments(e,t){const n=this.normalizeSegments(t);0!==n.length&&(n.every(e=>"text"===e.kind&&""===e.text.trim())||e.push({type:this.resolveBlockType(K("paragraph")),segments:n}))}},zn={1:"x-small",2:"small",3:"medium",4:"large",5:"x-large",6:"xx-large",7:"xxx-large"};function _n(e){return e.toLowerCase().includes("font-size")}function Fn(e,t){for(;e.firstChild;)t.appendChild(e.firstChild)}function jn(e){const t=e.parentNode;if(t){for(;e.firstChild;)t.insertBefore(e.firstChild,e);t.removeChild(e)}}var Kn=["script","style","iframe","object","embed","form","noscript"],$n=new Set(["p","div","h1","h2","h3","h4","h5","h6","li","blockquote","table","tr","td","th","pre","figure","hr"]),Vn=class{getState;dispatch;schemaRegistry;tryRichPasteFromJson;constructor(e,t,n,s){this.getState=e,this.dispatch=t,this.schemaRegistry=n,this.tryRichPasteFromJson=s}handleHTMLOrTextPaste(e,t){const n=this.getState(),s=e.getData("text/html");s?this.handleHTML(s,n):t&&this.pastePlainText(t)}pastePlainText(e){if(!e)return;const t=it(e);this.dispatch(Tn(this.getState(),t))}pasteHTMLString(e){this.handleHTML(e,this.getState())}handleHTML(e,t){const n=$t.sanitize(e,{FORBID_TAGS:Kn,ADD_TAGS:this.schemaRegistry?this.schemaRegistry.getAllowedTags():[],ADD_ATTR:this.schemaRegistry?this.schemaRegistry.getAllowedAttrs():[],ALLOWED_URI_REGEXP:s,...qe()}),i=this.extractRichData(n);if(i&&this.tryRichPasteFromJson(i))return;const r=document.createElement("template");r.innerHTML=n,function(e){const t=Array.from(e.querySelectorAll("font"));for(const n of t){const e=n.getAttribute("color"),t=n.getAttribute("face"),s=n.getAttribute("size"),i=n.getAttribute("style")??"";if(!(null!==e||null!==t||null!==s||i.length>0)){jn(n);continue}const r=document.createElement("span"),o=[];if(i&&o.push(i.endsWith(";")?i:`${i};`),e&&o.push(`color: ${e};`),t&&o.push(`font-family: ${t};`),s&&!_n(i)){const e=zn[s];e&&o.push(`font-size: ${e};`)}yt(r,o.join(" ")),Fn(n,r),n.parentNode?.replaceChild(r,n)}}(r.content);const o=r.innerHTML,a=this.schemaRegistry?this.schemaRegistry.getAllowedTags():["strong","em","u","b","i","p","br","div","span"],l=this.schemaRegistry?this.schemaRegistry.getAllowedAttrs():[],c=$t.sanitize(o,{ALLOWED_TAGS:a,ALLOWED_ATTR:l,ALLOWED_URI_REGEXP:s,...qe()});if(this.schemaRegistry){const e=document.createElement("template");if(e.innerHTML=c,this.requiresDocumentParser(c,e.content))return void this.handleDocumentPaste(c,t);const n=new Hn({schema:pe(this.schemaRegistry),schemaRegistry:this.schemaRegistry}).parse(e.content);this.dispatch(Tn(t,n))}else{const e=this.extractTextFromHTML(c);e&&this.dispatch(ye(t,e,"paste"))}}extractRichData(e){const t=document.createElement("template");t.innerHTML=e;const n=t.content.querySelector("[data-notectl-rich]")?.getAttribute("data-notectl-rich");if(n)return this.decodeHTMLEntities(n)}decodeHTMLEntities(e){return e.replace(/"/g,'"').replace(/'/g,"'").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&")}requiresDocumentParser(e,t){return!!this.containsModelledBlockID(t)||!!/<table[\s>]/i.test(e)||!!/<blockquote[\s>]/i.test(e)||!(!/<li[\s>]/i.test(e)||!this.containsMultiBlockListItem(t))||this.containsVoidBlockElements(t)}containsModelledBlockID(e){const t=new Set(this.schemaRegistry?.getBlockParseRules().map(e=>e.rule.tag)??[]);for(const n of Array.from(e.querySelectorAll("[id]"))){const e=n.tagName.toLowerCase();if($n.has(e)||t.has(e))return!0}return!1}containsMultiBlockListItem(e){const t=new Set(["PRE","BLOCKQUOTE","TABLE","HR","H1","H2","H3","H4","H5","H6"]);for(const n of Array.from(e.querySelectorAll("li"))){let e=0,s=!1;for(const i of Array.from(n.childNodes))if(i.nodeType===Node.ELEMENT_NODE){const n=i.tagName;if("UL"===n||"OL"===n||"INPUT"===n||"LI"===n)continue;if(t.has(n))return!0;if("P"===n||"DIV"===n){e++;continue}s=!0}else i.nodeType===Node.TEXT_NODE&&""!==(i.textContent??"").trim()&&(s=!0);if(e>=2||e>=1&&s)return!0}return!1}containsVoidBlockElements(e){if(!this.schemaRegistry)return!1;const t=this.schemaRegistry.getBlockParseRules();for(const n of t){if(!this.schemaRegistry.getNodeSpec(n.type)?.isVoid)continue;const t=e.querySelectorAll(n.rule.tag);for(const e of Array.from(t)){if(!n.rule.getAttrs)return!0;if(!1!==n.rule.getAttrs(e))return!0}}return!1}handleDocumentPaste(e,t){if(!this.schemaRegistry)return;const n=tn(Ge(e,this.schemaRegistry),this.schemaRegistry);if(0===n.children.length)return;const s=t.selection,i=t.transaction("paste");let r;j(s)&&!z(s)&&(r=Ce(t,i));const o=r??(L(s)?s.nodeId:B(s)?s.blockId:s.anchor.blockId),a=ne(t,o,this.schemaRegistry);if(!a)return;const l=a.parentPath[a.parentPath.length-1],c=l?t.getBlock(l)?.type:void 0,h=ie(this.schemaRegistry,c,n.children)?a:J(t,o);if(!h)return;const p=B(s)&&"before"===s.side?0:1;let u,g,f=h.anchorIndex+p;for(const d of n.children){const e=te(d,m());i.insertNode(h.parentPath,f,e),f++,u=ae(e),g=e}if(h.isAnchorEmpty&&!B(s)&&i.removeNode(h.parentPath,h.anchorIndex),u&&g){const e=Z(g,u),t=e?d(e).length:0;i.setSelection(F(u,t))}this.dispatch(i.build())}extractTextFromHTML(e){const t=document.createElement("template");return t.innerHTML=e,t.content.textContent??""}},Un=class{getState;dispatch;schemaRegistry;constructor(e,t,n){this.getState=e,this.dispatch=t,this.schemaRegistry=n}handleBlockPaste(e){let n;try{n=JSON.parse(e)}catch{return}const s=n.type;if(!s)return;const i=this.schemaRegistry?.getNodeSpec(s);if(this.schemaRegistry&&!i)return;const r=this.getState(),o=r.selection,a=re(o),l=m(),c=Y(n.attrs,i?.attrs),h=S(K(s),void 0,l,c,t(n.htmlId)),d=G(r,a);if(d){const e=r.getBlock(d);if(this.cellRejects(e,[h])){const e=J(r,a);if(!e)return;return void this.dispatchNodeInsert(r,e.parentPath,e.anchorIndex+1,h)}const t=Q(r,a,d,this.schemaRegistry);if(!t||!e)return;return void this.dispatchNodeInsert(r,t.parentPath,e.children.length,h)}const p=ne(r,a,this.schemaRegistry);if(!p)return;const u=B(o)&&"before"===o.side?0:1;this.dispatchNodeInsert(r,p.parentPath,p.anchorIndex+u,h)}dispatchNodeInsert(e,t,n,s){const i=e.transaction("paste");i.insertNode(t,n,s),i.setSelection(_(s.id,[...t,s.id])),this.dispatch(i.build())}cellRejects(e,t){return!(!e||!this.schemaRegistry||ie(this.schemaRegistry,e.type,t))}handleRichPasteFromJson(e){let t;try{t=JSON.parse(e)}catch{return!1}return!(!Array.isArray(t)||0===t.length)&&this.handleRichPaste(t)}handleRichPaste(e){if(0===e.length)return!1;if(!e.some(e=>void 0!==e.htmlId||void 0!==e.type&&"paragraph"!==e.type||e.segments?.some(e=>"inline"===e.kind))&&e.length<=1)return!1;let n=this.getState();const s=n.selection,i=re(s),r=n.getBlock(i),o=n.doc.children.some(e=>e.id===i);if(!e.some(e=>t(e.htmlId))&&j(s)&&z(s)&&o&&void 0!==r&&y(r)>0)return this.dispatch(Tn(n,ee(e,this.schemaRegistry))),!0;if(j(s)&&!z(s)){const t=n.transaction("paste"),s=Ce(n,t),i=t.build();if(this.dispatch(i),n=n.apply(i),s)return this.resolveAndInsertRichBlocks(e,n,s)}return this.resolveAndInsertRichBlocks(e,n,i)}resolveAndInsertRichBlocks(e,t,n){const s=[];for(const l of e){const e=X(l,this.schemaRegistry);e&&s.push(se(e))}if(0===s.length)return!1;const i=t.selection,r=G(t,n);if(r){const e=t.getBlock(r);if(this.cellRejects(e,s)){const e=J(t,n);return!!e&&this.insertNodes(s,t,e,e.anchorIndex+1,!1)}const i=Q(t,n,r,this.schemaRegistry);if(!i)return!1;const o=i.anchorIndex>=0?i.anchorIndex+1:e?.children.length??0;return this.insertNodes(s,t,i,o,!0)}const o=ne(t,n,this.schemaRegistry);if(!o)return!1;const a=B(i)&&"before"===i.side?0:1;return this.insertNodes(s,t,o,o.anchorIndex+a,!B(i))}insertNodes(e,t,n,s,i){const r=t.transaction("paste");let o,a=s;for(const l of e)r.insertNode(n.parentPath,a,l),a++,o=l;return i&&n.isAnchorEmpty&&n.anchorIndex>=0&&r.removeNode(n.parentPath,n.anchorIndex),o&&r.setSelection(F(o.id,y(o))),this.dispatch(r.build()),!0}},qn=class{element;getState;dispatch;schemaRegistry;fileHandlerRegistry;isReadOnly;getPasteInterceptors;pasteMarkdown;getMarkdownSyntaxExtensions;announce;markdownImportedMessage;handlePaste;htmlHandler;richBlockHandler;constructor(e,t){this.element=e,this.getState=t.getState,this.dispatch=t.dispatch,this.schemaRegistry=t.schemaRegistry,this.fileHandlerRegistry=t.fileHandlerRegistry,this.isReadOnly=t.isReadOnly??(()=>!1),this.getPasteInterceptors=t.getPasteInterceptors??(()=>[]),this.pasteMarkdown=t.pasteMarkdown??"auto",this.getMarkdownSyntaxExtensions=t.getMarkdownSyntaxExtensions??(()=>[]),this.announce=t.announce,this.markdownImportedMessage=t.markdownImportedMessage??"Markdown imported",this.richBlockHandler=new Un(t.getState,t.dispatch,t.schemaRegistry),this.htmlHandler=new Vn(t.getState,t.dispatch,t.schemaRegistry,e=>this.richBlockHandler.handleRichPasteFromJson(e)),this.handlePaste=this.onPaste.bind(this),e.addEventListener("paste",this.handlePaste)}onPaste(e){if(!gt(e,this.element))return;if(e.preventDefault(),this.isReadOnly())return;const t=e.clipboardData;if(!t)return;const n=t.getData("application/x-notectl-block");if(n)return void this.richBlockHandler.handleBlockPaste(n);if(this.handleFilePaste(t))return;const s=t.getData("text/plain"),i=t.getData("text/html");s&&this.tryPasteInterceptors(s,i)||(s&&"never"!==this.pasteMarkdown&&!function(e){return""!==e.trim()&&/<\w/.test(e)}(i)&&function(e){if(0===e.length)return!1;if(Rn.test(e))return!0;if(e.includes("|")&&Cn.test(e))return!0;const t=e.match(xn);return null!==t&&t.length>=2}(s)?this.handleMarkdownPaste(s):this.htmlHandler.handleHTMLOrTextPaste(t,s))}async handleMarkdownPaste(e){let t;try{const{parseMarkdownToDocument:n}=await import("./MarkdownParser-Dp62mfUq.mjs").then(e=>e.t);t=$e(n(e,this.schemaRegistry,{syntaxExtensions:this.getMarkdownSyntaxExtensions()}),this.schemaRegistry,{includeBlockIds:!1})}catch{return void this.htmlHandler.pastePlainText(e)}this.htmlHandler.pasteHTMLString(t),this.announce?.(this.markdownImportedMessage)}tryPasteInterceptors(e,t){const n=this.getPasteInterceptors(),s=this.getState();for(const i of n){const n=i.interceptor(e,t,s);if(n)return this.dispatch(n),!0}return!1}handleFilePaste(e){if(!this.fileHandlerRegistry)return!1;const t=Array.from(e.files);if(0===t.length)for(let s=0;s<e.items.length;s++){const n=e.items[s];if(n&&"file"===n.kind){const e=n.getAsFile();e&&t.push(e)}}if(0===t.length)return!1;let n=!1;for(const s of t){const e=this.fileHandlerRegistry.matchFileHandlers(s.type);for(const t of e){const e=t(s,null);if(!0===e||e instanceof Promise){n=!0;break}}}return n}destroy(){this.element.removeEventListener("paste",this.handlePaste)}},Wn=class{compositionTracker;inputHandler;keyboardHandler;pasteHandler;clipboardHandler;constructor(e,t){this.compositionTracker=new gn,this.inputHandler=new mn(e,{getState:t.getState,dispatch:t.dispatch,syncSelection:t.syncSelection,inputRuleRegistry:t.inputRuleRegistry,isReadOnly:t.isReadOnly,shouldApplyInputRules:t.shouldApplyInputRules,compositionTracker:this.compositionTracker,getTextInputInterceptors:t.getTextInputInterceptors}),this.keyboardHandler=new In(e,{getState:t.getState,dispatch:t.dispatch,undo:t.undo,redo:t.redo,keymapRegistry:t.keymapRegistry,isReadOnly:t.isReadOnly,compositionTracker:this.compositionTracker,getTextDirection:t.getTextDirection,navigateFromGapCursor:t.navigateFromGapCursor}),this.pasteHandler=new qn(e,{getState:t.getState,dispatch:t.dispatch,schemaRegistry:t.schemaRegistry,fileHandlerRegistry:t.fileHandlerRegistry,isReadOnly:t.isReadOnly,getPasteInterceptors:t.getPasteInterceptors,pasteMarkdown:t.pasteMarkdown,getMarkdownSyntaxExtensions:t.getMarkdownSyntaxExtensions,announce:t.announce,markdownImportedMessage:t.markdownImportedMessage}),this.clipboardHandler=new un(e,{getState:t.getState,dispatch:t.dispatch,schemaRegistry:t.schemaRegistry,syncSelection:t.syncSelection,isReadOnly:t.isReadOnly})}destroy(){this.inputHandler.destroy(),this.keyboardHandler.destroy(),this.pasteHandler.destroy(),this.clipboardHandler.destroy()}},Gn=class{_fileHandlers=[];registerFileHandler(e,t){this._fileHandlers.push({pattern:e,handler:t})}getFileHandlers(){return this._fileHandlers}matchFileHandlers(e){const t=[];for(const n of this._fileHandlers)Qn(n.pattern,e)&&t.push(n.handler);return t}removeFileHandler(e){const t=this._fileHandlers.findIndex(t=>t.handler===e);-1!==t&&this._fileHandlers.splice(t,1)}clear(){this._fileHandlers.length=0}};function Qn(e,t){if("*"===e||"*/*"===e)return!0;if(e===t)return!0;if(e.endsWith("/*")){const n=e.slice(0,-1);return t.startsWith(n)}return!1}var Jn=class{_inputRules=[];registerInputRule(e){this._inputRules.push(e)}getInputRules(){return this._inputRules}removeInputRule(e){const t=this._inputRules.indexOf(e);-1!==t&&this._inputRules.splice(t,1)}clear(){this._inputRules.length=0}},Xn=class{_contextKeymaps=[];_navigationKeymaps=[];_defaultKeymaps=[];registerKeymap(e,t){const n=t?.priority??"default";this.keymapArrayForPriority(n).push(e)}getKeymaps(){return[...this._contextKeymaps,...this._navigationKeymaps,...this._defaultKeymaps]}getKeymapsByPriority(){return{context:[...this._contextKeymaps],navigation:[...this._navigationKeymaps],default:[...this._defaultKeymaps]}}removeKeymap(e){for(const t of[this._contextKeymaps,this._navigationKeymaps,this._defaultKeymaps]){const n=t.indexOf(e);if(-1!==n)return void t.splice(n,1)}}clear(){this._contextKeymaps.length=0,this._navigationKeymaps.length=0,this._defaultKeymaps.length=0}keymapArrayForPriority(e){switch(e){case"context":return this._contextKeymaps;case"navigation":return this._navigationKeymaps;case"default":return this._defaultKeymaps}}},Yn=class{_extensions=[];register(e){this._extensions.push(e)}getExtensions(){return this._extensions}clear(){this._extensions.length=0}},Zn=class{_nodeViews=/* @__PURE__ */new Map;registerNodeView(e,t){if(this._nodeViews.has(e))throw new Error(`NodeView for type "${e}" is already registered.`);this._nodeViews.set(e,t)}getNodeViewFactory(e){return this._nodeViews.get(e)}removeNodeView(e){this._nodeViews.delete(e)}clear(){this._nodeViews.clear()}},es={error(e,t){void 0===t?console.error(e):console.error(e,t)},warn(e,t){void 0===t?console.warn(e):console.warn(e,t)},info(e,t){void 0===t?console.info(e):console.info(e,t)},debug(e,t){void 0===t?console.debug(e):console.debug(e,t)}},ts={error(){},warn(){},info(){},debug(){}};function ns(e,t){const n=`[${t}]`;return{error(t,s){e.error(`${n} ${t}`,s)},warn(t,s){e.warn(`${n} ${t}`,s)},info(t,s){e.info(`${n} ${t}`,s)},debug(t,s){e.debug(`${n} ${t}`,s)}}}var ss=class{commands=/* @__PURE__ */new Map;readonlyBypassActive=!1;log;constructor(e=es){this.log=ns(e,"CommandRegistry")}register(e,t,n,s){if(this.commands.has(e)){const t=this.commands.get(e);throw new Error(`Command "${e}" is already registered by plugin "${t?.pluginId}".`)}const i=s?.readonlyAllowed??!1;this.commands.set(e,{name:e,handler:t,pluginId:n,readonlyAllowed:i})}canExecute(e,t){const n=this.commands.get(e);return!(!n||t&&!n.readonlyAllowed)}execute(e,t){const n=this.commands.get(e);if(!n)return!1;if(t&&!n.readonlyAllowed)return!1;const s=t&&n.readonlyAllowed;s&&(this.readonlyBypassActive=!0);try{return n.handler()}catch(i){return this.log.error(`Command "${e}" error`,i),!1}finally{s&&(this.readonlyBypassActive=!1)}}isReadonlyBypassed(){return this.readonlyBypassActive}has(e){return this.commands.has(e)}remove(e){this.commands.delete(e)}clear(){this.commands.clear(),this.readonlyBypassActive=!1}get rawMap(){return this.commands}},is=class{listeners=/* @__PURE__ */new Map;log;constructor(e=es){this.log=ns(e,"EventBus")}emit(e,t){const n=this.listeners.get(e.id);if(n)for(const i of n)try{i(t)}catch(s){this.log.error(`Listener error on "${e.id}"`,s)}}on(e,t){const n=e.id;this.listeners.has(n)||this.listeners.set(n,/* @__PURE__ */new Set);const s=this.listeners.get(n)??/* @__PURE__ */new Set;return s.add(t),()=>{s.delete(t),0===s.size&&this.listeners.delete(n)}}off(e,t){const n=this.listeners.get(e.id);n&&(n.delete(t),0===n.size&&this.listeners.delete(e.id))}clear(){this.listeners.clear()}},rs=class{middlewares=[];middlewareSorted=null;pasteInterceptors=[];pasteInterceptorsSorted=null;textInputInterceptors=[];textInputInterceptorsSorted=null;log;constructor(e=es){this.log=ns(e,"MiddlewareChain")}addMiddleware(e){this.middlewares.push(e),this.middlewareSorted=null}removeMiddleware(e){const t=this.middlewares.indexOf(e);-1!==t&&this.middlewares.splice(t,1),this.middlewareSorted=null}invalidateMiddlewareSort(){this.middlewareSorted=null}dispatch(e,t,n){if(0===this.middlewares.length)return void n(e);const s=this.getSortedMiddleware();let i=0,r=!1;const o=e=>{if(i<s.length){const n=s[i++];if(!n)return;let r=!1;const l=e=>{r||(r=!0,o(e))};try{n.middleware(e,t,l)}catch(a){this.log.error(`Middleware "${n.name}" error`,a),l(e)}}else r||(r=!0,n(e))};o(e)}getChain(){return this.getSortedMiddleware().map(e=>({name:e.name,priority:e.priority,pluginId:e.pluginId}))}addPasteInterceptor(e){this.pasteInterceptors.push(e),this.pasteInterceptorsSorted=null}removePasteInterceptor(e){const t=this.pasteInterceptors.indexOf(e);-1!==t&&this.pasteInterceptors.splice(t,1),this.pasteInterceptorsSorted=null}invalidatePasteSort(){this.pasteInterceptorsSorted=null}getPasteInterceptors(){return this.getSortedPasteInterceptors()}addTextInputInterceptor(e){this.textInputInterceptors.push(e),this.textInputInterceptorsSorted=null}removeTextInputInterceptor(e){const t=this.textInputInterceptors.indexOf(e);-1!==t&&this.textInputInterceptors.splice(t,1),this.textInputInterceptorsSorted=null}invalidateTextInputSort(){this.textInputInterceptorsSorted=null}getTextInputInterceptors(){return this.getSortedTextInputInterceptors()}get rawMiddlewares(){return this.middlewares}get rawPasteInterceptors(){return this.pasteInterceptors}get rawTextInputInterceptors(){return this.textInputInterceptors}clear(){this.middlewares.length=0,this.middlewareSorted=null,this.pasteInterceptors.length=0,this.pasteInterceptorsSorted=null,this.textInputInterceptors.length=0,this.textInputInterceptorsSorted=null}getSortedMiddleware(){return this.middlewareSorted||(this.middlewareSorted=[...this.middlewares].sort((e,t)=>e.priority-t.priority)),this.middlewareSorted}getSortedPasteInterceptors(){return this.pasteInterceptorsSorted||(this.pasteInterceptorsSorted=[...this.pasteInterceptors].sort((e,t)=>e.priority-t.priority)),this.pasteInterceptorsSorted}getSortedTextInputInterceptors(){return this.textInputInterceptorsSorted||(this.textInputInterceptorsSorted=[...this.textInputInterceptors].sort((e,t)=>e.priority-t.priority)),this.textInputInterceptorsSorted}};function os(e,t,n,s){return{registerCommand:(s,i,r)=>{if(t.has(s)){const e=t.get(s);throw new Error(`Command "${s}" is already registered by plugin "${e?.pluginId}".`)}const o=r?.readonlyAllowed??!1;t.set(s,{name:s,handler:i,pluginId:e,readonlyAllowed:o}),n.commands.push(s)},executeCommand:s}}function as(e,t){return{registerService:(n,s)=>{if(e.has(n.id))throw new Error(`Service "${n.id}" is already registered by another plugin.`);e.set(n.id,s),t.services.push(n.id)},getService:t=>e.get(t.id)}}function ls(e,t){const{pluginId:n,middlewares:s,pasteInterceptors:i,textInputInterceptors:r,invalidateMiddlewareSort:o,invalidatePasteSort:a,invalidateTextInputSort:l}=e;return{registerMiddleware:(e,i)=>{const r={name:i?.name??(e.name||"anonymous"),pluginId:n,middleware:e,priority:i?.priority??100};s.push(r),t.middlewares.push(r),o()},registerPasteInterceptor:(e,s)=>{const r={name:s?.name??"anonymous",pluginId:n,interceptor:e,priority:s?.priority??100};i.push(r),t.pasteInterceptors.push(r),a()},registerTextInputInterceptor:(e,s)=>{const i={name:s?.name??"anonymous",pluginId:n,interceptor:e,priority:s?.priority??100};r.push(i),t.textInputInterceptors.push(i),l()}}}function cs(e,t){return{registerNodeSpec:n=>{e.registerNodeSpec(n),t.nodeSpecs.push(n.type)},registerMarkSpec:n=>{e.registerMarkSpec(n),t.markSpecs.push(n.type)},registerInlineNodeSpec:n=>{e.registerInlineNodeSpec(n),t.inlineNodeSpecs.push(n.type)}}}function hs(e,t,n){return{registerNodeView:(e,s)=>{t.nodeViewRegistry.registerNodeView(e,s),n.nodeViews.push(e)},registerKeymap:(e,s)=>{t.keymapRegistry.registerKeymap(e,s),n.keymaps.push(e)},registerInputRule:e=>{t.inputRuleRegistry.registerInputRule(e),n.inputRules.push(e)},registerMarkdownSyntax:e=>{t.markdownSyntaxRegistry.register(e)},registerToolbarItem:s=>{t.toolbarRegistry.registerToolbarItem(s,e),n.toolbarItems.push(s.id)},registerBlockTypePickerEntry:e=>{t.blockTypePickerRegistry.registerBlockTypePickerEntry(e),n.blockTypePickerEntries.push(e.id)},registerFileHandler:(e,s)=>{t.fileHandlerRegistry.registerFileHandler(e,s),n.fileHandlers.push(s)},registerStyleSheet:e=>{const s=new CSSStyleSheet;s.replaceSync(e),t.pluginStyleSheets.push(s),n.stylesheets.push(s)}}}function ds(e){return{getSchemaRegistry:()=>e.schemaRegistry,getKeymapRegistry:()=>e.keymapRegistry,getInputRuleRegistry:()=>e.inputRuleRegistry,getFileHandlerRegistry:()=>e.fileHandlerRegistry,getNodeViewRegistry:()=>e.nodeViewRegistry,getToolbarRegistry:()=>e.toolbarRegistry,getBlockTypePickerRegistry:()=>e.blockTypePickerRegistry}}var ps=class{tracker;plugins=/* @__PURE__ */new Map;initOrder=[];startedInitOrder=[];initialized=!1;initializing=!1;readOnly=!1;log;constructor(e,t=es){this.tracker=e,this.log=ns(t,"PluginLifecycle")}register(e){if(this.initialized||this.initializing)throw new Error(`Cannot register plugin "${e.id}" after initialization.`);if(this.plugins.has(e.id))throw new Error(`Plugin "${e.id}" is already registered.`);this.plugins.set(e.id,e)}get(e){return this.plugins.get(e)}getPluginIds(){return[...this.plugins.keys()]}async init(e,t){if(!this.initialized&&!this.initializing){this.initializing=!0;try{this.initOrder=this.resolveOrder();for(const s of this.initOrder){if(e.isCancelled?.())return;const i=this.plugins.get(s);if(!i)continue;this.startedInitOrder.push(s);const r=t(s,e);try{await i.init(r)}catch(n){throw await this.rollbackStartedPlugins(),n}}if(e.isCancelled?.())return;if(e.onBeforeReady&&await e.onBeforeReady(),e.isCancelled?.())return;for(const t of this.initOrder){if(e.isCancelled?.())return;const s=this.plugins.get(t);if(s?.onReady)try{await s.onReady()}catch(n){this.log.error(`Plugin "${t}" error in onReady`,n)}}this.initialized=!0}finally{this.initializing=!1}}}async destroy(){const e=[...this.startedInitOrder].reverse();for(const t of e)await this.destroyPlugin(t);this.plugins.clear(),this.initOrder=[],this.startedInitOrder=[],this.initialized=!1,this.initializing=!1}notifyStateChange(e,t,n){for(const i of this.initOrder){const r=this.plugins.get(i);if(r?.onStateChange)try{r.onStateChange(e,t,n)}catch(s){this.log.error(`Plugin "${i}" error in onStateChange`,s)}}}collectDecorations(e,t){let n=ot.empty;for(const i of this.initOrder){const r=this.plugins.get(i);if(r?.decorations)try{const s=r.decorations(e,t);s.isEmpty||(n=n.merge(s))}catch(s){this.log.error(`Plugin "${i}" error in decorations()`,s)}}return n}configurePlugin(e,t){const n=this.plugins.get(e);if(!n)throw new Error(`Plugin "${e}" not found.`);if(n.onConfigure)try{n.onConfigure(t)}catch(s){this.log.error(`Plugin "${e}" error in onConfigure`,s)}}isReadOnly(){return this.readOnly}setReadOnly(e){if(this.readOnly!==e){this.readOnly=e;for(const n of this.initOrder){const s=this.plugins.get(n);if(s?.onReadOnlyChange)try{s.onReadOnlyChange(e)}catch(t){this.log.error(`Plugin "${n}" error in onReadOnlyChange`,t)}}}}get rawPlugins(){return this.plugins}get isInitialized(){return this.initialized}async destroyPlugin(e){const t=this.plugins.get(e);if(t?.destroy)try{await t.destroy()}catch(n){this.log.error(`Plugin "${e}" error in destroy`,n)}this.tracker.cleanup(e)}async rollbackStartedPlugins(){const e=[...this.startedInitOrder].reverse();for(const t of e)await this.destroyPlugin(t);this.startedInitOrder=[],this.initOrder=[],this.initialized=!1}resolveOrder(){const e=[...this.plugins.keys()];for(const r of e){const e=this.plugins.get(r);if(e)for(const t of e.dependencies??[])if(!this.plugins.has(t))throw new Error(`Plugin "${r}" depends on "${t}", which is not registered.`)}const t=/* @__PURE__ */new Map,n=/* @__PURE__ */new Map;for(const r of e)t.set(r,0),n.set(r,[]);for(const r of e){const e=this.plugins.get(r)?.dependencies??[];t.set(r,e.length);for(const t of e){const e=n.get(t);e&&e.push(r)}}const s=[];for(const[r,o]of t)0===o&&s.push(r);const i=[];for(;s.length>0;){s.sort((e,t)=>(this.plugins.get(e)?.priority??100)-(this.plugins.get(t)?.priority??100));const e=s.shift();if(!e)break;i.push(e);for(const i of n.get(e)??[]){const e=(t.get(i)??0)-1;t.set(i,e),0===e&&s.push(i)}}if(i.length!==e.length){const t=e.filter(e=>!i.includes(e));throw new Error(`Circular dependency detected among plugins: ${t.join(", ")}`)}return i}},us=class{deps;registrations=/* @__PURE__ */new Map;pluginStyleSheets=[];constructor(e){this.deps=e}track(e,t){this.registrations.set(e,t)}cleanup(e){const t=this.registrations.get(e);if(t){for(const e of t.commands)this.deps.commandRegistry.remove(e);for(const e of t.services)this.deps.serviceRegistry.remove(e);for(const e of t.middlewares)this.deps.middlewareChain.removeMiddleware(e);for(const e of t.pasteInterceptors)this.deps.middlewareChain.removePasteInterceptor(e);for(const e of t.textInputInterceptors)this.deps.middlewareChain.removeTextInputInterceptor(e);for(const e of t.unsubscribers)e();for(const e of t.nodeSpecs)this.deps.schemaRegistry.removeNodeSpec(e);for(const e of t.markSpecs)this.deps.schemaRegistry.removeMarkSpec(e);for(const e of t.inlineNodeSpecs)this.deps.schemaRegistry.removeInlineNodeSpec(e);for(const e of t.nodeViews)this.deps.nodeViewRegistry.removeNodeView(e);for(const e of t.keymaps)this.deps.keymapRegistry.removeKeymap(e);for(const e of t.inputRules)this.deps.inputRuleRegistry.removeInputRule(e);for(const e of t.toolbarItems)this.deps.toolbarRegistry.removeToolbarItem(e);for(const e of t.fileHandlers)this.deps.fileHandlerRegistry.removeFileHandler(e);for(const e of t.blockTypePickerEntries)this.deps.blockTypePickerRegistry.removeBlockTypePickerEntry(e);for(const e of t.stylesheets){const t=this.pluginStyleSheets.indexOf(e);-1!==t&&this.pluginStyleSheets.splice(t,1)}this.registrations.delete(e)}}clear(){this.registrations.clear(),this.pluginStyleSheets.length=0}get rawStyleSheets(){return this.pluginStyleSheets}},gs=class{services=/* @__PURE__ */new Map;register(e,t){if(this.services.has(e.id))throw new Error(`Service "${e.id}" is already registered.`);this.services.set(e.id,t)}get(e){return this.services.get(e.id)}has(e){return this.services.has(e)}remove(e){this.services.delete(e)}clear(){this.services.clear()}get rawMap(){return this.services}},ms=class{schemaRegistry=new bt;keymapRegistry=new Xn;inputRuleRegistry=new Jn;markdownSyntaxRegistry=new Yn;fileHandlerRegistry=new Gn;nodeViewRegistry=new Zn;toolbarRegistry=new Rt;blockTypePickerRegistry=new It;logger;commandRegistry;serviceRegistry=new gs;middlewareChain;eventBus;registrationTracker;lifecycle;constructor(e={}){this.logger=e.logger??es,this.commandRegistry=new ss(this.logger),this.middlewareChain=new rs(this.logger),this.eventBus=new is(this.logger),this.registrationTracker=new us({commandRegistry:this.commandRegistry,serviceRegistry:this.serviceRegistry,middlewareChain:this.middlewareChain,schemaRegistry:this.schemaRegistry,keymapRegistry:this.keymapRegistry,inputRuleRegistry:this.inputRuleRegistry,nodeViewRegistry:this.nodeViewRegistry,toolbarRegistry:this.toolbarRegistry,fileHandlerRegistry:this.fileHandlerRegistry,blockTypePickerRegistry:this.blockTypePickerRegistry}),this.lifecycle=new ps(this.registrationTracker,this.logger)}registerService(e,t){this.serviceRegistry.register(e,t)}register(e){this.lifecycle.register(e)}async init(e){return this.lifecycle.init(e,(e,t)=>this.createContext(e,t))}notifyStateChange(e,t,n){this.lifecycle.notifyStateChange(e,t,n)}collectDecorations(e,t){return this.lifecycle.collectDecorations(e,t)}dispatchWithMiddleware(e,t,n){this.middlewareChain.dispatch(e,t,n)}canExecuteCommand(e){return this.commandRegistry.canExecute(e,this.lifecycle.isReadOnly())}executeCommand(e){return this.commandRegistry.execute(e,this.lifecycle.isReadOnly())}isReadonlyBypassed(){return this.commandRegistry.isReadonlyBypassed()}configurePlugin(e,t){this.lifecycle.configurePlugin(e,t)}isReadOnly(){return this.lifecycle.isReadOnly()}setReadOnly(e){this.lifecycle.setReadOnly(e)}getPluginIds(){return this.lifecycle.getPluginIds()}getMiddlewareChain(){return this.middlewareChain.getChain()}getPasteInterceptors(){return this.middlewareChain.getPasteInterceptors()}getTextInputInterceptors(){return this.middlewareChain.getTextInputInterceptors()}get(e){return this.lifecycle.get(e)}getService(e){return this.serviceRegistry.get(e)}onEvent(e,t){return this.eventBus.on(e,t)}getPluginStyleSheets(){return this.registrationTracker.rawStyleSheets}async destroy(){await this.lifecycle.destroy(),this.commandRegistry.clear(),this.serviceRegistry.clear(),this.middlewareChain.clear(),this.registrationTracker.clear(),this.eventBus.clear(),this.schemaRegistry.clear(),this.keymapRegistry.clear(),this.inputRuleRegistry.clear(),this.markdownSyntaxRegistry.clear(),this.fileHandlerRegistry.clear(),this.nodeViewRegistry.clear(),this.toolbarRegistry.clear(),this.blockTypePickerRegistry.clear()}createContext(e,t){const n=t.getCompositionState??(()=>fs),{context:s,registrations:i}=function(e){const t={commands:[],services:[],middlewares:[],pasteInterceptors:[],textInputInterceptors:[],unsubscribers:[],nodeSpecs:[],markSpecs:[],inlineNodeSpecs:[],nodeViews:[],keymaps:[],inputRules:[],toolbarItems:[],fileHandlers:[],blockTypePickerEntries:[],stylesheets:[]},n=function(e,t){return{emit:(t,n)=>e.emit(t,n),on:(n,s)=>{const i=e.on(n,s);return t.unsubscribers.push(i),i},off:(t,n)=>e.off(t,n)}}(e.eventBus,t);return{context:{getState:e.getState,dispatch:e.dispatch,getContainer:e.getContainer,getPluginContainer:e.getPluginContainer,isReadOnly:e.isReadOnly,getEventBus:()=>n,...os(e.pluginId,e.commands,t,e.executeCommand),...as(e.services,t),...ls(e,t),...cs(e.schemaRegistry,t),...hs(e.pluginId,e,t),...ds(e),updateConfig:t=>{const n=e.plugins.get(e.pluginId);if(n?.onConfigure)try{n.onConfigure(t)}catch(s){const t=`[PluginContext] Plugin "${e.pluginId}" error in onConfigure`;e.logger.error(t,s)}},announce:t=>{e.announce?.(t)},hasAnnouncement:()=>e.hasAnnouncement?.()??!1,getCompositionState:()=>e.getCompositionState()},registrations:t}}({pluginId:e,logger:this.logger,getState:t.getState,dispatch:t.dispatch,getContainer:t.getContainer,getPluginContainer:t.getPluginContainer,announce:t.announce,hasAnnouncement:t.hasAnnouncement,commands:this.commandRegistry.rawMap,services:this.serviceRegistry.rawMap,middlewares:this.middlewareChain.rawMiddlewares,pasteInterceptors:this.middlewareChain.rawPasteInterceptors,textInputInterceptors:this.middlewareChain.rawTextInputInterceptors,pluginStyleSheets:this.registrationTracker.rawStyleSheets,plugins:this.lifecycle.rawPlugins,eventBus:this.eventBus,schemaRegistry:this.schemaRegistry,keymapRegistry:this.keymapRegistry,inputRuleRegistry:this.inputRuleRegistry,markdownSyntaxRegistry:this.markdownSyntaxRegistry,toolbarRegistry:this.toolbarRegistry,blockTypePickerRegistry:this.blockTypePickerRegistry,fileHandlerRegistry:this.fileHandlerRegistry,nodeViewRegistry:this.nodeViewRegistry,getCompositionState:n,isReadOnly:()=>this.lifecycle.isReadOnly(),invalidateMiddlewareSort:()=>this.middlewareChain.invalidateMiddlewareSort(),invalidatePasteSort:()=>this.middlewareChain.invalidatePasteSort(),invalidateTextInputSort:()=>this.middlewareChain.invalidateTextInputSort(),executeCommand:e=>this.executeCommand(e)});return this.registrationTracker.track(e,i),s}},fs={isComposing:!1,activeBlockId:null};function ys(e,t){return t.isEmpty?e:L(e)?function(e,t){const n={blockId:e.nodeId,offset:0},s=t.mapResult(n,-1);return s.deleted||s.pos.blockId!==e.nodeId?null:_(e.nodeId,e.path)}(e,t):B(e)?function(e,t){const n={blockId:e.blockId,offset:0},s=t.mapResult(n,-1);return s.deleted||s.pos.blockId!==e.blockId?null:H(e.blockId,e.side,e.path)}(e,t):ks(e,t)}function ks(e,t){if(z(e)){const n=t.map(e.anchor,-1);return n===e.anchor?e:F(n.blockId,n.offset)}const n=t.map(e.anchor,-1),s=t.map(e.head,1);return n===e.anchor&&s===e.head?e:A(n,s)}var ws=class{undoStack=[];redoStack=[];groupTimeoutMs;maxDepth;lastOrigin=null;constructor(e){this.groupTimeoutMs=e?.groupTimeoutMs??500,this.maxDepth=e?.maxDepth??100}push(e){if("history"===e.metadata.origin)return;if(!e.steps.some(e=>"setStoredMarks"!==e.type))return void(this.lastOrigin=null);const t=e.metadata.timestamp,n=this.undoStack[this.undoStack.length-1];for(n&&"input"===e.metadata.origin&&"input"===this.lastOrigin&&t-n.timestamp<this.groupTimeoutMs&&this.isSameInputType(n.transactions,e)&&n?this.undoStack[this.undoStack.length-1]={...n,transactions:[...n.transactions,e],timestamp:t}:this.undoStack.push({transactions:[e],timestamp:t,interveningMapping:lt.empty}),this.lastOrigin=e.metadata.origin,this.redoStack=[];this.undoStack.length>this.maxDepth;)this.undoStack.shift()}recordIntervening(e){e.isEmpty||(bs(this.undoStack,e),bs(this.redoStack,e))}undo(e){const t=this.undoStack.pop();if(!t)return null;const n=Ss(t,e,"undo");return null===n?(this.lastOrigin=null,null):(this.redoStack.push({transactions:[n.transaction],timestamp:Date.now(),interveningMapping:lt.empty}),this.lastOrigin=null,{state:n.newState,transaction:n.transaction})}redo(e){const t=this.redoStack.pop();if(!t)return null;const n=Ss(t,e,"redo");return null===n?(this.lastOrigin=null,null):(this.undoStack.push({transactions:[n.transaction],timestamp:Date.now(),interveningMapping:lt.empty}),this.lastOrigin=null,{state:n.newState,transaction:n.transaction})}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}clear(){this.undoStack=[],this.redoStack=[],this.lastOrigin=null}isSameInputType(e,t){const n=e[e.length-1];return!!n&&n.steps[0]?.type===t.steps[0]?.type}};function Ss(e,t,n){let s=e.interveningMapping,i=t.doc;const r=[],o=[];for(let d=e.transactions.length-1;d>=0;d--){const t=e.transactions[d];if(t)for(let e=t.steps.length-1;e>=0;e--){const n=t.steps[e],a=t.forwardStepMaps[e];if(!n||!a)continue;const l=at(Je(n),s,i);if(null===l)return null;const c=rt(i,l);r.push(l),o.push(c),i=st(i,l),s=vs(a,s,c)}}const a=function(e){const t=e.transactions[0];return t?Xe(t):null}(e),l={steps:r,selectionBefore:t.selection,selectionAfter:t.selection,storedMarksAfter:a,mapping:lt.from(o),forwardStepMaps:o,metadata:{origin:"history",timestamp:Date.now(),historyDirection:n}};let c=t.apply(l);const h=e.transactions[0];if(h){const e=ys(h.selectionBefore,s);null!==e&&(c=c.withSelection(e))}return{newState:c,transaction:{...l,selectionAfter:c.selection}}}function vs(e,t,n){return t.isEmpty&&ct(Qe(e),n)?t:lt.from([e]).appendMapping(t).appendMap(n)}function bs(e,t){for(let n=0;n<e.length;n++){const s=e[n];s&&(e[n]={...s,interveningMapping:s.interveningMapping.appendMapping(t)})}}function Is(e){for(const t of e.steps)if("setStoredMarks"!==t.type)return!1;return!0}function Rs(e){return!!e.metadata.readonlyAllowed||Is(e)}function Cs(e,t){if(t){const n=t.getMarkSpec(e.type);if(n)return n.rank??100}switch(e.type){case"bold":return 0;case"italic":return 1;case"underline":return 2;default:return 100}}function xs(e,t,n){if(0===t.length)return e;const s=[...t].sort((e,t)=>Cs(e,n)-Cs(t,n));let i=e;for(let r=s.length-1;r>=0;r--){const e=s[r];if(!e)continue;const t=Ts(e,n);t.appendChild(i),i=t}return i}function Ts(e,t){if(t){const n=t.getMarkSpec(e.type);if(n)return n.toDOM(e)}switch(e.type){case"bold":return document.createElement("strong");case"italic":return document.createElement("em");case"underline":return document.createElement("u");default:return document.createElement("span")}}var Es=class{wrapperElement=null;container;registry;constructor(e,t){this.container=e,this.registry=t}get isActive(){return null!==this.wrapperElement}onCompositionStart(e){this.cleanup();const t=e.storedMarks;if(!t||0===t.length)return;const n=e.selection;if(!j(n))return;if(!z(n))return;const s=document.createElement("span");s.setAttribute("data-cursor-wrapper","");const i=document.createTextNode(""),r=xs(i,t,this.registry);s.appendChild(r);const o=Ht();if(!o||0===o.rangeCount)return;let a;const l=_t(this.container,o);if(l){const e=document.createRange();try{e.setStart(l.anchorNode,l.anchorOffset),e.setEnd(l.focusNode,l.focusOffset)}catch{return}a=e}else a=o.getRangeAt(0);a.insertNode(s);try{o.collapse(i,i.length)}catch{}this.wrapperElement=s}cleanup(){this.wrapperElement&&(this.wrapperElement.remove(),this.wrapperElement=null)}},Ms=class{deps;handleSelectionChange;handleMousedown;handleDragover;handleDrop;handleCompositionStart;handleCompositionEnd;pendingNodeSelectionClear=!1;pendingGapCursorClear=!1;constructor(e){this.deps=e,this.handleCompositionStart=t=>{gt(t,e.contentElement)&&e.cursorWrapper.onCompositionStart(e.getState())},this.handleCompositionEnd=t=>{gt(t,e.contentElement)&&e.cursorWrapper.cleanup()},e.contentElement.addEventListener("compositionstart",this.handleCompositionStart),e.contentElement.addEventListener("compositionend",this.handleCompositionEnd),this.handleSelectionChange=this.onSelectionChange.bind(this),document.addEventListener("selectionchange",this.handleSelectionChange),this.handleMousedown=this.onMousedown.bind(this),e.contentElement.addEventListener("mousedown",this.handleMousedown),this.handleDragover=this.onDragover.bind(this),e.contentElement.addEventListener("dragover",this.handleDragover),this.handleDrop=this.onDrop.bind(this),e.contentElement.addEventListener("drop",this.handleDrop)}syncSelectionFromDOM(){if(this.deps.compositionState.isComposing)return;this.deps.cursorWrapper.isActive&&this.deps.cursorWrapper.cleanup();const e=this.deps.getState();if(L(e.selection)&&!this.pendingNodeSelectionClear)return;if(B(e.selection)&&!this.pendingGapCursorClear)return;this.pendingNodeSelectionClear=!1,this.pendingGapCursorClear=!1;const t=Lt(this.deps.contentElement);if(!t)return;if(N(t,e.selection))return;const n=e.transaction("input").setSelection(t).setStoredMarks(null,e.storedMarks).build(),s=e.apply(n);this.deps.applyUpdate(s,n,!0)}destroy(){const e=this.deps.contentElement;e.removeEventListener("compositionstart",this.handleCompositionStart),e.removeEventListener("compositionend",this.handleCompositionEnd),document.removeEventListener("selectionchange",this.handleSelectionChange),e.removeEventListener("mousedown",this.handleMousedown),e.removeEventListener("dragover",this.handleDragover),e.removeEventListener("drop",this.handleDrop)}onSelectionChange(){if(this.deps.isUpdating())return;const e=this.deps.contentElement.getRootNode(),t="activeElement"in e?e.activeElement:document.activeElement;(this.deps.contentElement.contains(t)||t===this.deps.contentElement)&&ut(t,this.deps.contentElement)&&this.syncSelectionFromDOM()}onMousedown(e){if(this.deps.isUpdating())return;if(!gt(e,this.deps.contentElement))return;this.deps.onMousedown?.();const t=e.target;if(!(t instanceof HTMLElement))return;const n=t.closest("[data-block-id]");if(!(n instanceof HTMLElement&&this.deps.contentElement.contains(n)))return void((this.deps.contentElement.contains(t)||t===this.deps.contentElement)&&this.handleClickBelowContent(e));if(!n.hasAttribute("data-void")&&!n.hasAttribute("data-selectable"))return void this.markPendingSelectionClear();if(n.querySelector("[data-content-dom]")?.contains(t))return void this.markPendingSelectionClear();e.preventDefault(),this.deps.contentElement.focus();const s=_(U(n.getAttribute("data-block-id")??""),Ot(this.deps.contentElement,n)),i=this.deps.getState(),r=i.transaction("input").setSelection(s).setStoredMarks(null,i.storedMarks).build(),o=i.apply(r);this.deps.applyUpdate(o,r)}handleClickBelowContent(e){if(this.deps.isReadOnly())return;const t=this.deps.getState(),n=t.doc.children[t.doc.children.length-1];if(!n)return;const s=n.id,i=this.deps.contentElement.querySelector(`[data-block-id="${s}"]`);if(!i)return;const r=i.getBoundingClientRect();if(e.clientY<=r.bottom)return;const o=t.getBlock(s);if("paragraph"===o?.type&&0===y(o)){const n=t.transaction("input").setSelection(F(s,0)).build();return this.deps.dispatch(n),void e.preventDefault()}e.preventDefault(),this.deps.contentElement.focus();const a=m(),l=t.transaction("input").insertNode([],t.doc.children.length,u(a)).setSelection(F(a,0)).build();this.deps.dispatch(l)}onDragover(e){this.deps.fileHandlerRegistry&&e.dataTransfer&&e.dataTransfer.types.includes("Files")&&e.preventDefault()}onDrop(e){if(this.deps.isReadOnly())return;if(!this.deps.fileHandlerRegistry)return;if(!e.dataTransfer)return;const t=Array.from(e.dataTransfer.files);if(0===t.length)return;const n=this.getPositionFromPoint(e.clientX,e.clientY);let s=!1;for(const i of t){const e=this.deps.fileHandlerRegistry.matchFileHandlers(i.type);for(const t of e){const e=t(i,n);if(!0===e||e instanceof Promise){s=!0;break}}}s&&e.preventDefault()}getPositionFromPoint(e,t){const n=Et(this.deps.contentElement.getRootNode(),e,t);return n&&this.deps.contentElement.contains(n.node)?Ft(this.deps.contentElement,n.node,n.offset):null}markPendingSelectionClear(){const e=this.deps.getState();L(e.selection)&&(this.pendingNodeSelectionClear=!0),B(e.selection)&&(this.pendingGapCursorClear=!0)}},Ps=class{deps;navigationKeymap=null;goalColumn=null;preserveGoalColumn=!1;constructor(e){this.deps=e,this.registerKeymaps()}resetAfterUpdate(){this.preserveGoalColumn||(this.goalColumn=null)}clearGoalColumn(){this.goalColumn=null}destroy(){this.navigationKeymap&&this.deps.keymapRegistry&&(this.deps.keymapRegistry.removeKeymap(this.navigationKeymap),this.navigationKeymap=null)}registerKeymaps(){if(!this.deps.keymapRegistry)return;const e={ArrowLeft:"left",ArrowRight:"right",ArrowUp:"up",ArrowDown:"down"},t={};for(const[n,s]of Object.entries(e))t[n]=()=>this.handleArrow(s);this.navigationKeymap=t,this.deps.keymapRegistry.registerKeymap(t,{priority:"navigation"})}handleArrow(e){const t=this.deps.getState();return!L(t.selection)&&!B(t.selection)&&!!z(t.selection)&&("left"===e||"right"===e?this.handleHorizontalArrow(e):this.handleVerticalArrow(e))}handleHorizontalArrow(e){this.goalColumn=null;const t=this.deps.getState(),n=this.resolveLogicalDirection(t,e),s=At(t,n);if(s)return this.deps.dispatch(s),this.validateSelectionAfterInlineSkip(),!0;if(!Tt(this.deps.contentElement,t,e))return!1;const i=Mt(t,n);return!!i&&(this.deps.dispatch(i),!0)}resolveLogicalDirection(e,t){const n=e.selection;if(!j(n))return t;const s=this.deps.contentElement.querySelector(`[data-block-id="${n.anchor.blockId}"]`);return s instanceof HTMLElement&&"rtl"===vt(s)?"left"===t?"right":"left":t}handleVerticalArrow(e){const t=this.deps.getState(),n=this.deps.contentElement.ownerDocument.getSelection?.()??null,s=n?Bt(n,this.deps.contentElement):null;if(!Tt(this.deps.contentElement,t,e,s))return!1;null===this.goalColumn&&s&&(this.goalColumn=s.left),this.preserveGoalColumn=!0;const i=Pt(this.deps.contentElement,t,e,this.goalColumn);return i?(this.deps.dispatch(i),this.preserveGoalColumn=!1,!0):(this.preserveGoalColumn=!1,!1)}validateSelectionAfterInlineSkip(){const e=this.deps.getState(),t=Lt(this.deps.contentElement);t&&N(t,e.selection)||zt(this.deps.contentElement,e.selection)}};function As(e,t){const n=[];let s=null,i=[];for(const r of e){const e=t.getNodeSpec(r.type)?.wrapper?.(r);e&&s&&e.key===s.key?i.push(r.id):e?(s&&i.length>0&&n.push({spec:s,blockIds:i}),s=e,i=[r.id]):(s&&i.length>0&&n.push({spec:s,blockIds:i}),s=null,i=[])}return s&&i.length>0&&n.push({spec:s,blockIds:i}),n}function Bs(e,t){if(t.className&&e.className!==t.className&&(e.className=t.className),t.attrs)for(const[n,s]of Object.entries(t.attrs))e.getAttribute(n)!==s&&e.setAttribute(n,s)}function Ds(e){const t=document.createElement(e.tag);if(t.setAttribute("data-block-wrapper",e.key),e.className&&(t.className=e.className),e.attrs)for(const[n,s]of Object.entries(e.attrs))t.setAttribute(n,s);return t}function Ns(e,t,n){t!==(n?n.nextSibling:e.firstChild)&&(n||t.parentNode!==e||t!==e.firstChild)&&(n?n.after(t):e.insertBefore(t,e.firstChild))}function Os(e,t,n){for(let i=0;i<t.length;i++){const s=t[i];if(!s)continue;const r=n.querySelector(`[data-block-id="${s}"]`);if(!r)continue;const o=e.children[i]??null;r!==o&&(o?e.insertBefore(r,o):e.appendChild(r))}const s=new Set(t);for(const i of Array.from(e.children)){const t=i.getAttribute("data-block-id");t&&!s.has(t)&&n.insertBefore(i,e)}}function Ls(e,t,n){if(!n)return;const s=As(t,n);for(const i of s){const t=e.querySelector(`[data-block-id="${i.blockIds[0]}"]`);if(!t)continue;const n=Ds(i.spec);t.before(n);for(const s of i.blockIds){const t=e.querySelector(`[data-block-id="${s}"]`);t&&n.appendChild(t)}}}function Hs(e){e.parentElement?.removeChild(e)}function zs(e,t,n){const s=e.parentElement;s?s.replaceChild(t,e):n.replaceChild(t,e)}function _s(e,t,n){if(t?.parentElement){const e=t.parentElement;return void(t.nextSibling?e.insertBefore(n,t.nextSibling):e.appendChild(n))}e.firstChild?e.insertBefore(n,e.firstChild):e.appendChild(n)}function Fs(e,t){if(t){const n=t.getInlineNodeSpec(e.inlineType);if(n){const t=n.toDOM(e);return t.setAttribute("contenteditable","false"),t}}const n=document.createElement("span");return n.setAttribute("data-inline-type",e.inlineType),n.setAttribute("contenteditable","false"),n}function js(e){let t=e.replace(/ {2}/g," ");return t.endsWith(" ")&&(t=`${t.slice(0,-1)} `),t.startsWith(" ")&&(t=` ${t.slice(1)}`),t}var Ks=/* @__PURE__ */new WeakMap;function $s(e){const t=e.nodeName??"span",n=document.createElement(t);if(n.setAttribute("data-decoration","true"),e.class)for(const s of e.class.split(" "))s&&n.classList.add(s);e.style&&yt(n,e.style);for(const[s,i]of Object.entries(e))"class"!==s&&"style"!==s&&"nodeName"!==s&&void 0!==i&&n.setAttribute(s,i);return n}function Vs(e,t,n){Us(e,t,n);const s=n?.decorations?.findNode(t);if(s&&0!==s.length)for(const i of s)i.attrs.style&&wt(e,i.attrs.style)}function Us(e,t,n){const s=Ks.get(e);if(s)for(const o of s.managed)s.preexisting.has(o)||e.classList.remove(o);const i=/* @__PURE__ */new Set;for(const o of n?.decorations?.findNode(t)??[])for(const e of o.attrs.class?.split(/\s+/)??[])e&&i.add(e);if(0===i.size)return void Ks.delete(e);const r=/* @__PURE__ */new Set;for(const o of i)e.classList.contains(o)?r.add(o):e.classList.add(o);Ks.set(e,{managed:i,preexisting:r})}function qs(e,t,n,s){const i=s?.decorations?.findInline(e.id),r=s?.nodeViewRegistry;if(r&&t&&n&&s?.getState&&s?.dispatch){const a=r.getNodeViewFactory(e.type);if(a){const r=a(e,s.getState,s.dispatch);n.set(e.id,r);const l=t.getNodeSpec(e.type);if(l?.isVoid&&r.dom.setAttribute("data-void","true"),l?.selectable&&r.dom.setAttribute("data-selectable","true"),r.contentDOM&&r.contentDOM!==r.dom&&r.contentDOM.setAttribute("data-content-dom","true"),o(e)&&r.contentDOM)Gs(r.contentDOM,e,t,i);else{const i=v(e),o=/* @__PURE__ */new Map;for(const e of i){const i=r.getContentDOM?.(e.id)??r.contentDOM;if(i){const r=qs(e,t,n,s);i.appendChild(r);let a=o.get(i);a||(a=[],o.set(i,a)),a.push(e)}}for(const[e,n]of o)Ls(e,n,t)}return Ws(r.dom,e),r.dom.setAttribute("data-block-type",e.type),Vs(r.dom,e.id,s),r.dom}}if(t){const r=t.getNodeSpec(e.type);if(r){const a=r.toDOM(e);if(r.isVoid&&a.setAttribute("data-void","true"),r.selectable&&a.setAttribute("data-selectable","true"),!r.isVoid)if(o(e))Gs(a,e,t,i);else{const i=v(e);for(const e of i){const i=qs(e,t,n,s);a.appendChild(i)}Ls(a,i,t)}return Ws(a,e),a.setAttribute("data-block-type",e.type),Vs(a,e.id,s),a}}return function(e,t,n){const s=Nt("p",e.id);return Ws(s,e),s.setAttribute("data-block-type",e.type),Gs(s,e,t,n),s}(e,t,i)}function Ws(e,n,s){const i=t(n.htmlId);if(i)return void e.setAttribute("id",i);const r=t(s?.htmlId);r&&e.getAttribute("id")===r&&e.removeAttribute("id")}function Gs(e,t,n,s){for(const r of e.querySelectorAll("[data-cursor-wrapper]"))r.remove();const i=p(t);if(1===i.length&&r(i[0])&&""===i[0].text)return void e.appendChild(document.createElement("br"));if(s&&0!==s.length)!function(e,t,n,s){let i=0;for(const r of t){if(h(r)){e.appendChild(xs(Fs(r,s),r.marks,s)),i+=1;continue}const t=i,o=i+r.text.length;if(0===r.text.length){i=o;continue}const a=/* @__PURE__ */new Set;a.add(t),a.add(o);for(const e of n){const n=Math.max(t,e.from),s=Math.min(o,e.to);n>t&&n<o&&a.add(n),s>t&&s<o&&a.add(s)}const l=[...a].sort((e,t)=>e-t);for(let i=0;i<l.length-1;i++){const o=l[i],a=l[i+1];if(void 0===o||void 0===a||o>=a)continue;const c=o-t,h=a-t,d=r.text.slice(c,h),p=[];for(const e of n)e.from<=o&&e.to>=a&&p.push(e);let u=xs(document.createTextNode(js(d)),r.marks,s);for(const e of p){const t=$s(e.attrs);t.appendChild(u),u=t}e.appendChild(u)}i=o}}(e,i,s,n);else for(const a of i)r(a)?e.appendChild(Qs(a,n)):e.appendChild(xs(Fs(a,n),a.marks,n));const o=i[i.length-1];o&&h(o)&&"hard_break"===o.inlineType&&e.appendChild(document.createElement("br"))}function Qs(e,t){return""===e.text?document.createTextNode(""):xs(document.createTextNode(js(e.text)),e.marks,t)}function Js(e,t,n,s){const i=t?.doc.children??[],r=n.doc.children,a=s?.registry,l=s?.nodeViews,c=null!=s?.compositionBlockId,h=/* @__PURE__ */new Map;for(const o of function(e){const t=[];for(const n of Array.from(e.children))if(n instanceof HTMLElement)if(n.hasAttribute("data-block-id"))t.push(n);else if(n.hasAttribute("data-block-wrapper"))for(const e of Array.from(n.children))e instanceof HTMLElement&&e.hasAttribute("data-block-id")&&t.push(e);return t}(e)){const e=o.getAttribute("data-block-id");e&&h.set(U(e),o)}const d=new Set(r.map(e=>e.id));for(const[o,f]of h)if(!d.has(o)){Hs(f),h.delete(o);const e=l?.get(o);e&&(e.destroy?.(),l?.delete(o))}const p=/* @__PURE__ */new Map;for(const o of i)p.set(o.id,o);let u=null;const g=s?.selectedNodeId,m=s?.previousSelectedNodeId;for(const f of r){const t=h.get(f.id),n=p.get(f.id);if(s?.compositionBlockId===f.id&&t){u=t;continue}const i=s?.oldDecorations?.find(f.id),r=s?.decorations?.find(f.id);if(t&&n&&!Xs(n,f,i,r))u=t;else if(t){const i=l?.get(f.id);if(i){if(i.update?.(f)){if(Ws(i.dom,f,n),o(f)&&i.contentDOM){i.contentDOM.textContent="";const e=s?.decorations?.findInline(f.id);Gs(i.contentDOM,f,a,e)}u=i.dom;continue}i.destroy?.(),l?.delete(f.id)}const r=qs(f,a,l,s);zs(t,r,e),u=r}else{const t=qs(f,a,l,s);_s(e,u,t),u=t}if(g===f.id){const e=l?.get(f.id);if(e)e.selectNode?.();else{const e=h.get(f.id)??u;e instanceof HTMLElement&&e.classList.add("notectl-node-selected")}}else if(m===f.id){const e=l?.get(f.id);if(e)e.deselectNode?.();else{const e=h.get(f.id)??u;e instanceof HTMLElement&&e.classList.remove("notectl-node-selected")}}}if(m&&m!==g){const e=l?.get(m);e&&!d.has(m)&&e.deselectNode?.()}if(g&&!d.has(g)){const e=l?.get(g);e&&e.selectNode?.()}!c&&a&&function(e,t,n){const s=As(t,n),i=function(e,t){const n=[],s=/* @__PURE__ */new Set;for(const r of t)for(const e of r.blockIds)s.add(e);let i=0;for(const r of e){if(!s.has(r.id)){n.push({type:"bare",blockId:r.id});continue}const e=t[i];e&&e.blockIds[0]===r.id&&(n.push({type:"wrapper",key:e.spec.key,blockIds:e.blockIds}),i++)}return n}(t,s),r=function(e){const t=[];for(const n of Array.from(e.children))if(n instanceof HTMLElement)if(n.hasAttribute("data-block-wrapper")){const e=n.getAttribute("data-block-wrapper")??"",s=[];for(const t of Array.from(n.children)){if(!(t instanceof HTMLElement))continue;const e=t.getAttribute("data-block-id");e&&s.push(U(e))}t.push({type:"wrapper",element:n,key:e,blockIds:s})}else if(n.hasAttribute("data-block-id")){const e=n.getAttribute("data-block-id")??"";t.push({type:"bare",element:n,blockId:U(e)})}return t}(e);if(function(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){const s=e[n],i=t[n];if(!s||!i)return!1;if(s.type!==i.type)return!1;if("bare"===s.type&&"bare"===i.type){if(s.blockId!==i.blockId)return!1}else if("wrapper"===s.type&&"wrapper"===i.type){if(s.key!==i.key)return!1;if(s.blockIds.length!==i.blockIds.length)return!1;for(let e=0;e<s.blockIds.length;e++)if(s.blockIds[e]!==i.blockIds[e])return!1}}return!0}(i,r)){let e=0;for(const t of r)if("wrapper"===t.type){const n=s[e];n&&Bs(t.element,n.spec),e++}return}const o=/* @__PURE__ */new Map;for(const h of r){if("wrapper"!==h.type)continue;let e=o.get(h.key);e||(e=[],o.set(h.key,e)),e.push(h.element)}const a=/* @__PURE__ */new Set;let l=null,c=0;for(const h of i){if("bare"===h.type){const t=e.querySelector(`[data-block-id="${h.blockId}"]`);if(!t)continue;t.parentNode!==e?l?l.after(t):e.insertBefore(t,e.firstChild):Ns(e,t,l),l=t;continue}const t=s[c];if(!t)continue;c++;const n=o.get(h.key);let i=null;if(n&&n.length>0){const e=n.shift();e&&(i=e.tagName.toLowerCase()===t.spec.tag?e:Ds(t.spec))}i||(i=Ds(t.spec)),a.add(i),Bs(i,t.spec),i.parentNode!==e?l?l.after(i):e.insertBefore(i,e.firstChild):Ns(e,i,l),Os(i,h.blockIds,e),l=i}for(const h of r)if("wrapper"===h.type&&!a.has(h.element)){for(;h.element.firstChild;)e.insertBefore(h.element.firstChild,h.element);h.element.remove()}}(e,r,a);for(const o of e.querySelectorAll("[data-block-id]")){const e=o.getAttribute("data-block-id");e&&Us(o,U(e),s)}}function Xs(e,t,n,s){if(e.type!==t.type)return!0;if(e.htmlId!==t.htmlId)return!0;if(e.children.length!==t.children.length)return!0;if(!b(e.attrs,t.attrs))return!0;for(let a=0;a<e.children.length;a++){const n=e.children[a],s=t.children[a];if(!n||!s)return!0;if(r(n)&&r(s)){if(n.text!==s.text)return!0;if(!c(n.marks,s.marks))return!0}else if(h(n)&&h(s)){if(n.inlineType!==s.inlineType)return!0;if(!Ys(n.attrs,s.attrs))return!0;if(!c(n.marks,s.marks))return!0}else{if(r(n)||r(s)||h(n)||h(s))return!0;if(Xs(n,s))return!0}}const i=n??[],o=s??[];return i!==o&&!nt(i,o)}function Ys(e,t){const n=Object.keys(e),s=Object.keys(t);if(n.length!==s.length)return!1;for(const i of n)if(e[i]!==t[i])return!1;return!0}var Zs=class{state;contentElement;history;stateChangeCallbacks=[];isUpdating=!1;schemaRegistry;nodeViewRegistry;nodeViews=/* @__PURE__ */new Map;decorations=ot.empty;getDecorations;isReadOnly;isReadonlyBypassed;compositionState;cursorWrapper;navigation;events;constructor(e,t){this.state=t.state,this.contentElement=e,this.schemaRegistry=t.schemaRegistry,this.nodeViewRegistry=t.nodeViewRegistry,this.getDecorations=t.getDecorations,this.isReadOnly=t.isReadOnly??(()=>!1),this.isReadonlyBypassed=t.isReadonlyBypassed??(()=>!1),this.compositionState=t.compositionState??{isComposing:!1,activeBlockId:null},this.history=new ws({maxDepth:t.maxHistoryDepth??100}),t.onStateChange&&this.stateChangeCallbacks.push(t.onStateChange),this.cursorWrapper=new Es(e,this.schemaRegistry),this.navigation=new Ps({contentElement:e,getState:()=>this.state,dispatch:e=>this.dispatch(e),keymapRegistry:t.keymapRegistry}),this.events=new Ms({contentElement:e,getState:()=>this.state,dispatch:e=>this.dispatch(e),applyUpdate:(e,t,n)=>this.applyUpdate(e,t,{skipSelectionSync:n}),isUpdating:()=>this.isUpdating,compositionState:this.compositionState,cursorWrapper:this.cursorWrapper,isReadOnly:this.isReadOnly,fileHandlerRegistry:t.fileHandlerRegistry,onMousedown:()=>this.navigation.clearGoalColumn()}),this.decorations=this.getDecorations?.(this.state)??ot.empty,Js(e,null,this.state,{...this.reconcileOptions(),decorations:this.decorations}),zt(e,this.state.selection)}getState(){return this.state}applyUpdate(e,t,n){if(!this.isUpdating){this.isUpdating=!0;try{const s=this.state;this.state=e,this.cursorWrapper.isActive&&!e.storedMarks?.length&&this.cursorWrapper.cleanup(),(n?.pushHistory&&"history"!==t.metadata.origin||Is(t))&&this.history.push(t);const i=this.getDecorations?.(e,t)??ot.empty;this.reconcileAndSync(s,e,i,n?.skipSelectionSync);for(const n of this.stateChangeCallbacks)n(s,e,t);this.navigation.resetAfterUpdate()}finally{this.isUpdating=!1}}}dispatch(e){if(this.isReadOnly()&&!Rs(e)&&!this.isReadonlyBypassed())return;const t=this.state.apply(e);this.applyUpdate(t,e,{pushHistory:!0})}undo(){if(this.isUpdating||this.isReadOnly())return;const e=this.history.undo(this.state);e&&this.applyUpdate(e.state,e.transaction)}redo(){if(this.isUpdating||this.isReadOnly())return;const e=this.history.redo(this.state);e&&this.applyUpdate(e.state,e.transaction)}onStateChange(e){return this.stateChangeCallbacks.push(e),()=>{const t=this.stateChangeCallbacks.indexOf(e);-1!==t&&this.stateChangeCallbacks.splice(t,1)}}replaceState(e){if(!this.isUpdating){this.isUpdating=!0;try{const t=this.state,n=e.withSelection(t.selection);this.state=n,this.history.clear(),this.cursorWrapper.isActive&&!n.storedMarks?.length&&this.cursorWrapper.cleanup();const s={steps:[],selectionBefore:t.selection,selectionAfter:n.selection,storedMarksAfter:n.storedMarks,mapping:lt.empty,forwardStepMaps:[],metadata:{origin:"api",timestamp:Date.now()}},i=this.getDecorations?.(n,s)??ot.empty;this.reconcileAndSync(t,n,i);for(const e of this.stateChangeCallbacks)e(t,n,s);this.navigation.resetAfterUpdate()}finally{this.isUpdating=!1}}}syncSelection(){this.events.syncSelectionFromDOM()}reconcileAndSync(e,t,n,s){const i=this.decorations;this.decorations=n,Js(this.contentElement,e,t,{...this.reconcileOptions(e.selection),decorations:n,oldDecorations:i,compositionBlockId:this.compositionState.isComposing?this.compositionState.activeBlockId??void 0:void 0}),this.compositionState.isComposing||s||zt(this.contentElement,t.selection)}reconcileOptions(e){const t=L(this.state.selection)?this.state.selection.nodeId:void 0,n=e&&L(e)?e.nodeId:void 0;return{registry:this.schemaRegistry,nodeViewRegistry:this.nodeViewRegistry,nodeViews:this.nodeViews,getState:()=>this.state,dispatch:e=>this.dispatch(e),selectedNodeId:t,previousSelectedNodeId:n}}destroy(){this.cursorWrapper.cleanup(),this.events.destroy(),this.navigation.destroy();for(const e of this.nodeViews.values())e.destroy?.();this.nodeViews.clear()}},ei={paragraph:"Paragraph",heading:"Heading",code_block:"Code Block",blockquote:"Block Quote",list_item:"List Item",horizontal_rule:"Horizontal Rule",image:"Image",table:"Table"};function ti(e,t){return"heading"===e&&t?.level?`Heading ${t.level}`:ei[e]??e}function ni(e){e.registerNodeSpec({type:"paragraph",group:"block",content:{allow:["text"]},toDOM:e=>Nt("p",e.id),toHTML:(e,t)=>`<p>${t||"<br>"}</p>`,parseHTML:[{tag:"p"},{tag:"div",priority:10}],sanitize:{tags:["p"]}})}var si={ariaLabel:"Rich text editor",ariaDescription:"Press Escape to exit the editor",defaultPlaceholder:"Start typing...",markdownImported:"Markdown imported"},ii=/* #__PURE__ */Object.assign({"./locales/ar.ts":()=>import("./ar-eOA3UmiE.mjs"),"./locales/de.ts":()=>import("./de-DRbhnS4T.mjs"),"./locales/es.ts":()=>import("./es-BQ9dox_E.mjs"),"./locales/fr.ts":()=>import("./fr-NVOinLyF.mjs"),"./locales/hi.ts":()=>import("./hi-DrC2H81d.mjs"),"./locales/pt.ts":()=>import("./pt-CFrcl1v_.mjs"),"./locales/ru.ts":()=>import("./ru-gxbzqLL8.mjs"),"./locales/zh.ts":()=>import("./zh-BFZOM3lF.mjs")}),ri=["\n/**\n * Public theme tokens.\n *\n * Declared via @property so that:\n * - DevTools surfaces them as first-class CSS variables,\n * - invalid values are rejected at the engine level instead of breaking\n * downstream rules silently,\n * - the values are interpolatable for animations.\n *\n * The registration is scoped to this shadow root. Consumers override these\n * by setting the same custom properties on a parent (e.g. ::host).\n *\n * Components use the three-tier cascade:\n * var(--notectl-<component>-<prop>, var(--notectl-<prop>, <fallback>))\n */\n@property --notectl-bg { syntax: '<color>'; initial-value: #ffffff; inherits: true; }\n@property --notectl-fg { syntax: '<color>'; initial-value: #1f2328; inherits: true; }\n@property --notectl-fg-muted { syntax: '<color>'; initial-value: #6e7781; inherits: true; }\n@property --notectl-border { syntax: '<color>'; initial-value: #d0d7de; inherits: true; }\n@property --notectl-border-focus { syntax: '<color>'; initial-value: #0969da; inherits: true; }\n@property --notectl-primary { syntax: '<color>'; initial-value: #0969da; inherits: true; }\n@property --notectl-primary-fg { syntax: '<color>'; initial-value: #ffffff; inherits: true; }\n@property --notectl-focus-ring { syntax: '<color>'; initial-value: rgba(9, 105, 218, 0.3); inherits: true; }\n\n:host {\n\tdisplay: block;\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\tfont-size: 16px;\n\tline-height: 1.6;\n\tcolor: var(--notectl-fg);\n}\n\n.notectl-editor {\n\tdisplay: flex;\n\tflex-direction: column;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: var(--notectl-border-radius, 6px);\n\toverflow: hidden;\n\tbackground: var(--notectl-bg);\n\t/* Fill any explicit host height so embedders can size <notectl-editor>\n\t (e.g. height: 500px) and have the toolbar/content/footer fit inside.\n\t border-box keeps the 1px border within the host's height; min-height: 0\n\t lets the flex content shrink below its intrinsic size so internal\n\t scrolling can engage. */\n\tbox-sizing: border-box;\n\theight: 100%;\n\tmin-height: 0;\n}\n\n.notectl-editor:focus-within {\n\tborder-color: var(--notectl-border-focus);\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n}\n\n/* Content Area */\n.notectl-content {\n\tflex: 1;\n\tpadding: 12px 16px;\n\toutline: none;\n\tmin-height: var(--notectl-content-min-height, 400px);\n\tmax-height: var(--notectl-content-max-height, none);\n\toverflow-y: auto;\n\tcursor: text;\n\tposition: relative;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n\t-webkit-user-select: text;\n\tuser-select: text;\n\t-moz-tab-size: 4;\n\ttab-size: 4;\n}\n\n.notectl-content p {\n\tmargin: 0;\n\tpadding: 2px 0;\n\tmin-height: 1.6em;\n}\n\n.notectl-content p + p {\n\tmargin-top: 0;\n}\n\n/* Horizontal Rule */\n.notectl-content hr {\n\tborder: none;\n\tborder-top: 1px solid var(--notectl-border);\n\tmargin: 8px 0;\n\tpadding: 0;\n\tcursor: default;\n\tuser-select: none;\n}\n\n/* Placeholder */\n.notectl-content.notectl-content--empty::before {\n\tcontent: attr(data-placeholder);\n\tcolor: var(--notectl-fg-muted);\n\tpointer-events: none;\n\tposition: absolute;\n\ttop: 12px;\n\tinset-inline-start: 16px;\n}\n\n/* Plugin container bottom */\n.notectl-plugin-container--bottom {\n\tborder-top: 1px solid var(--notectl-border);\n\tflex-shrink: 0;\n}\n\n/* Screen reader announcements */\n.notectl-sr-only {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\tmargin: -1px;\n\tpadding: 0;\n\toverflow: hidden;\n\tclip: rect(0, 0, 0, 0);\n\twhite-space: nowrap;\n\tborder: 0;\n}\n\n/* Node selection */\n.notectl-node-selected {\n\toutline: 2px solid var(--notectl-primary);\n\toutline-offset: 2px;\n}\n\n/* High-contrast / forced-colors mode (Windows High Contrast, etc.) */\n@media (forced-colors: active) {\n\t.notectl-editor {\n\t\tborder-color: CanvasText;\n\t}\n\t.notectl-editor:focus-within {\n\t\tborder-color: Highlight;\n\t\tbox-shadow: 0 0 0 2px Highlight;\n\t}\n\t.notectl-content {\n\t\tcolor: CanvasText;\n\t}\n\t.notectl-plugin-container--top,\n\t.notectl-plugin-container--bottom {\n\t\tborder-color: CanvasText;\n\t}\n\t.notectl-node-selected {\n\t\toutline-color: Highlight;\n\t}\n}\n","\n@media (prefers-reduced-motion: reduce) {\n\t.notectl-toolbar-btn,\n\t.notectl-image__resize-handle,\n\t.notectl-image__size-indicator,\n\t.notectl-color-picker__swatch,\n\t.notectl-font-picker__item,\n\t.notectl-heading-picker__item,\n\t.notectl-font-size-picker__item,\n\t.ntbl-handle,\n\t.ntbl-handle-delete,\n\t.ntbl-insert-line,\n\t.ntbl-insert-btn,\n\t.ntbl-add-zone,\n\t.ntbl-add-icon,\n\t.ntbl-col-bar,\n\t.ntbl-row-bar,\n\t.ntbl-delete-table-btn,\n\t.notectl-code-block__copy {\n\t\ttransition: none !important;\n\t}\n}\n",'\n/* Paper viewport: scroll container with centered gray background */\n.notectl-paper-viewport {\n\tflex: 1;\n\toverflow-y: auto;\n\toverflow-x: hidden;\n\tbackground: var(--notectl-paper-viewport-bg, #e8e8e8);\n\tpadding: 24px 0;\n}\n\n/* Paper surface: white page with shadow, centered */\n.notectl-paper-surface {\n\tmargin: 0 auto;\n\tbackground: var(--notectl-bg);\n\tborder-radius: 2px;\n\tbox-shadow: 0 2px 8px var(--notectl-shadow, rgba(0, 0, 0, 0.15));\n\ttransform-origin: top center;\n\ttransition: transform 0.15s ease-out;\n}\n\n/* Content overrides in paper mode: wider document margins */\n.notectl-editor[data-paper-mode] .notectl-content {\n\tflex: none;\n\tpadding: 48px 56px;\n\tmin-height: auto;\n}\n\n/* Placeholder position override for paper mode */\n.notectl-editor[data-paper-mode] .notectl-content.notectl-content--empty::before {\n\ttop: 48px;\n\tinset-inline-start: 56px;\n}\n\n/* Dark mode: darker viewport background */\n:host([theme="dark"]) .notectl-paper-viewport {\n\t--notectl-paper-viewport-bg: #181825;\n}\n\n@media (prefers-reduced-motion: reduce) {\n\t.notectl-paper-surface {\n\t\ttransition: none !important;\n\t}\n}\n'].join("\n"),oi=null,ai=class{themeStyleSheet=new CSSStyleSheet;systemThemeQuery=null;systemThemeHandler=null;pluginSheets=[];runtimeSheets=[];shadow;constructor(e){this.shadow=e}apply(e){if(this.cleanupSystemThemeListener(),e===Be.System){this.setupSystemThemeListener();const e=_e(this.getSystemTheme());this.setThemeStyleSheet(e)}else this.setThemeStyleSheet(_e(e))}setPluginStyleSheets(e){this.pluginSheets=e,this.refreshAdoptedStyleSheets()}setRuntimeStyleSheets(e){this.runtimeSheets=e,this.refreshAdoptedStyleSheets()}destroy(){this.cleanupSystemThemeListener()}setThemeStyleSheet(e){this.themeStyleSheet.replaceSync(He(e)),this.refreshAdoptedStyleSheets()}refreshAdoptedStyleSheets(){this.shadow.adoptedStyleSheets=[this.themeStyleSheet,(oi||(oi=new CSSStyleSheet).replaceSync(ri),oi),...this.pluginSheets,...this.runtimeSheets]}setupSystemThemeListener(){this.systemThemeQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.systemThemeHandler=e=>{const t=_e(this.getSystemTheme());this.setThemeStyleSheet(t)},this.systemThemeQuery.addEventListener("change",this.systemThemeHandler)}cleanupSystemThemeListener(){this.systemThemeQuery&&this.systemThemeHandler&&this.systemThemeQuery.removeEventListener("change",this.systemThemeHandler),this.systemThemeQuery=null,this.systemThemeHandler=null}getSystemTheme(){return(this.systemThemeQuery??window.matchMedia("(prefers-color-scheme: dark)")).matches?Be.Dark:Be.Light}},li=class{wrapper;content;viewport=null;surface=null;viewportObserver=null;surfaceObserver=null;currentSize=null;currentPaperWidthPx=0;currentPaperHeightPx=0;currentScale=1;compensationFrameId=null;constructor(e,t){this.wrapper=e,this.content=t}apply(e){if(null===e)return void this.disable();const t=Oe(e);this.currentPaperWidthPx=t.widthPx,this.currentPaperHeightPx=t.heightPx,this.currentSize=e,this.viewport||this.enable(),this.updateSurfaceDimensions(),this.wrapper.setAttribute("data-paper-mode",e)}destroy(){this.disable()}getPaperSize(){return this.currentSize}enable(){this.viewport=document.createElement("div"),this.viewport.className="notectl-paper-viewport",this.surface=document.createElement("div"),this.surface.className="notectl-paper-surface",this.wrapper.removeChild(this.content),this.surface.appendChild(this.content),this.viewport.appendChild(this.surface);const e=this.wrapper.querySelector(".notectl-plugin-container--bottom");e?this.wrapper.insertBefore(this.viewport,e):this.wrapper.appendChild(this.viewport),this.viewportObserver=new ResizeObserver(e=>{for(const t of e)this.onViewportResize(t.contentRect.width)}),this.viewportObserver.observe(this.viewport),this.surfaceObserver=new ResizeObserver(e=>{for(const t of e)this.onSurfaceResize(t.contentRect.height)}),this.surfaceObserver.observe(this.surface)}disable(){if(null!==this.compensationFrameId&&(cancelAnimationFrame(this.compensationFrameId),this.compensationFrameId=null),this.viewportObserver?.disconnect(),this.viewportObserver=null,this.surfaceObserver?.disconnect(),this.surfaceObserver=null,this.viewport&&this.surface){this.surface.removeChild(this.content);const e=this.wrapper.querySelector(".notectl-plugin-container--bottom");e?this.wrapper.insertBefore(this.content,e):this.wrapper.appendChild(this.content),this.wrapper.removeChild(this.viewport)}this.viewport=null,this.surface=null,this.currentSize=null,this.currentPaperWidthPx=0,this.currentPaperHeightPx=0,this.currentScale=1,this.wrapper.removeAttribute("data-paper-mode")}updateSurfaceDimensions(){this.surface&&(ft(this.surface,"width",`${this.currentPaperWidthPx}px`),ft(this.surface,"minHeight",`${this.currentPaperHeightPx}px`))}onViewportResize(e){if(!this.surface||0===this.currentPaperWidthPx)return;const t=e-48,n=Math.min(1,t/this.currentPaperWidthPx);this.currentScale=n,ft(this.surface,"transform",n<1?`scale(${n})`:""),this.scheduleHeightCompensation(n)}onSurfaceResize(e){this.surface&&this.viewport&&this.scheduleHeightCompensation(this.currentScale)}scheduleHeightCompensation(e){null!==this.compensationFrameId&&cancelAnimationFrame(this.compensationFrameId),this.compensationFrameId=requestAnimationFrame(()=>{this.compensationFrameId=null,this.updateHeightCompensation(e)})}updateHeightCompensation(e){if(!this.surface)return;if(e>=1)return void ft(this.surface,"marginBottom","");const t=this.surface.scrollHeight,n=t*e-t;ft(this.surface,"marginBottom",`${n}px`)}};function ci(e){return!Array.isArray(e)}function hi(e){if(Array.isArray(e))return{plugins:e,label:void 0};const t=e;return{plugins:t.plugins,label:t.label}}var di=class{deps;cfg;themeController=null;domElements=null;paperLayout=null;pluginManager=null;inputManager=null;view=null;locale=si;cleanedUp=!1;constructor(e){this.deps=e,this.cfg=e.config}announce(e){const t=this.domElements?.announcer;t&&(t.textContent=e)}async run(){try{if(this.setupTheme(),this.isCancelled())return this.abort();const e=await async function(e){const t=new dt(e.locale??"browser").getLocale();return"en"===t?si:await async function(e){return ht(ii,e,si)}(t)}(this.cfg);if(this.isCancelled())return this.abort();if(this.locale=e,this.setupDOM(e),this.setupPlugins(),await this.initPluginsAndView(),this.isCancelled()||!this.view||!this.inputManager||!this.pluginManager||!this.domElements||!this.themeController)return this.abort();const t=this.view,n=this.inputManager,s=this.pluginManager,i=this.domElements,r=this.themeController;return this.finalizeSetup(s,i),{view:t,inputManager:n,pluginManager:s,domElements:i,themeController:r,paperLayout:this.paperLayout,announce:e=>this.announce(e),markdownImportedMessage:this.locale.markdownImported,release:()=>{this.view=null}}}catch(e){throw await this.cleanup(),e}}setupTheme(){this.themeController=new ai(this.deps.shadow),this.deps.styleCoordinator.setup(this.deps.shadow,this.cfg.styleNonce,this.themeController),this.themeController.apply(this.cfg.theme??Be.Light)}setupDOM(e){this.domElements=function(e){const t=e.locale??si,n=t.defaultPlaceholder,s=document.createElement("div");s.className="notectl-editor",s.setAttribute("part","editor");const i=document.createElement("div");i.className="notectl-plugin-container--top",i.setAttribute("part","plugin-container plugin-container-top"),i.setAttribute("data-notectl-no-print","");const r=document.createElement("div");r.className="notectl-content",r.setAttribute("part","content"),r.contentEditable=e.readonly?"false":"true",r.setAttribute("role","textbox"),r.setAttribute("aria-multiline","true"),r.setAttribute("aria-label",t.ariaLabel),e.readonly&&r.setAttribute("aria-readonly","true"),r.setAttribute("aria-description",t.ariaDescription),r.setAttribute("data-default-placeholder",n),r.setAttribute("data-placeholder",e.placeholder??n),e.dir&&(s.setAttribute("dir",e.dir),r.setAttribute("dir",e.dir));const o=document.createElement("div");o.className="notectl-plugin-container--bottom",o.setAttribute("part","plugin-container plugin-container-bottom"),o.setAttribute("data-notectl-no-print","");const a=document.createElement("div");return a.className="notectl-sr-only",a.setAttribute("data-notectl-no-print",""),a.setAttribute("aria-live","polite"),a.setAttribute("aria-atomic","true"),s.appendChild(i),s.appendChild(r),s.appendChild(o),s.appendChild(a),{wrapper:s,content:r,topPluginContainer:i,bottomPluginContainer:o,announcer:a}}({readonly:this.cfg.readonly,placeholder:this.cfg.placeholder,dir:this.cfg.dir??this.deps.hostDir,locale:e}),this.deps.shadow.appendChild(this.domElements.wrapper),this.cfg.paperSize&&(this.paperLayout=new li(this.domElements.wrapper,this.domElements.content),this.paperLayout.apply(this.cfg.paperSize))}setupPlugins(){if(this.domElements){this.pluginManager=new ms({logger:this.cfg.logger}),this.pluginManager.registerService(pt,new dt(this.cfg.locale??"browser")),ni(this.pluginManager.schemaRegistry),function(e,t){if(!t)return;const n=ci(t)?t.groups:t,s=ci(t)?t.overflow:void 0,i=[];for(const o of n){const{plugins:t,label:n}=hi(o),s=[];for(const i of t)s.push(i.id),e.register(i);i.push(void 0!==n?{plugins:s,label:n}:s)}const r={groups:i,overflow:s};e.register(new Ct(r))}(this.pluginManager,this.cfg.toolbar);for(const e of this.cfg.plugins??[])this.pluginManager.register(e);for(const e of this.deps.preInitPlugins)this.pluginManager.register(e);e=this.pluginManager,t=this.cfg.features,function(e,t){if(void 0!==e.get("text-formatting"))return;const n={bold:t?.bold??!0,italic:t?.italic??!0,underline:t?.underline??!0};e.register(new Kt(n))}(e,t),function(e){void 0===e.get("caret-navigation")&&e.register(new Dt)}(e),function(e){void 0===e.get("gap-cursor")&&e.register(new jt)}(e),this.domElements.content.addEventListener("focus",()=>this.deps.events.emit("focus",void 0)),this.domElements.content.addEventListener("blur",()=>this.deps.events.emit("blur",void 0))}var e,t}async initPluginsAndView(){if(!this.pluginManager||!this.domElements||!this.themeController)return;const e=this.domElements,t=this.pluginManager,n=this.themeController;await t.init({isCancelled:()=>this.isCancelled(),getState:()=>{if(!this.view)throw new Error("View not initialized");return this.view.getState()},dispatch:e=>this.dispatch(e),getContainer:()=>e.content,getPluginContainer:t=>"top"===t?e.topPluginContainer:e.bottomPluginContainer,announce:e=>this.announce(e),hasAnnouncement:()=>!!e.announcer?.textContent,getCompositionState:()=>{const e=this.inputManager?.compositionTracker;return e||pi},onBeforeReady:()=>this.createInputAndView(e,t,n)})}createInputAndView(e,t,n){if(this.isCancelled()||!this.pluginManager||!this.themeController)return;const s=pe(t.schemaRegistry),i=qt.create({schema:s}),r=this.deps.configController.markdownShorthand;this.inputManager=new Wn(e.content,{getState:()=>{if(!this.view)throw new Error("View not initialized");return this.view.getState()},dispatch:e=>this.dispatch(e),syncSelection:()=>this.view?.syncSelection(),undo:()=>this.view?.undo(),redo:()=>this.view?.redo(),schemaRegistry:t.schemaRegistry,keymapRegistry:t.keymapRegistry,inputRuleRegistry:t.inputRuleRegistry,fileHandlerRegistry:t.fileHandlerRegistry,isReadOnly:()=>this.deps.configController.isReadOnly,shouldApplyInputRules:()=>r,getPasteInterceptors:()=>t.getPasteInterceptors(),pasteMarkdown:this.deps.configController.pasteMarkdown,getMarkdownSyntaxExtensions:()=>t.markdownSyntaxRegistry.getExtensions(),getTextInputInterceptors:()=>t.getTextInputInterceptors(),getTextDirection:vt,navigateFromGapCursor:xt,announce:e=>this.announce(e),markdownImportedMessage:this.locale.markdownImported}),this.view=new Zs(e.content,{state:i,schemaRegistry:t.schemaRegistry,keymapRegistry:t.keymapRegistry,fileHandlerRegistry:t.fileHandlerRegistry,nodeViewRegistry:t.nodeViewRegistry,maxHistoryDepth:this.cfg.maxHistoryDepth,getDecorations:(e,n)=>t.collectDecorations(e,n)??ot.empty,onStateChange:(n,s,i)=>{!function(e,t,n,s,i,r){const o=s.announcer;if(o&&(o.textContent=""),i.notifyStateChange(e,t,n),ui(s.content,t.doc),r.emit("stateChange",{oldState:e,newState:t,transaction:n}),N(e.selection,t.selection)||r.emit("selectionChange",{selection:t.selection}),!o?.textContent){const s=function(e,t,n){if("undo"===n.metadata.historyDirection)return"Undo";if("redo"===n.metadata.historyDirection)return"Redo";for(const s of n.steps)if("setBlockType"===s.type)return ti(s.nodeType,s.attrs);for(const s of t.schema.markTypes){const n=$(s),i=we(e,n),r=we(t,n);if(i!==r)return`${s} ${r?"on":"off"}`}return null}(e,t,n);s&&o&&(o.textContent=s)}}(n,s,i,e,t,this.deps.events)},isReadOnly:()=>this.deps.configController.isReadOnly,isReadonlyBypassed:()=>t.isReadonlyBypassed(),compositionState:this.inputManager.compositionTracker}),ui(e.content,this.view.getState().doc);const o=t.getPluginStyleSheets();o.length>0&&n.setPluginStyleSheets(o)}finalizeSetup(e,t){if(this.cfg.readonly&&e.setReadOnly(!0),e.onEvent(Le,e=>{!e.options.paperSize&&this.deps.configController.getPaperSize()&&(e.options={...e.options,paperSize:this.deps.configController.getPaperSize()})}),this.cfg.autofocus){const e=t.content;requestAnimationFrame(()=>e.focus())}}dispatch(e){this.view&&this.pluginManager&&this.pluginManager.dispatchWithMiddleware(e,this.view.getState(),e=>this.view?.dispatch(e))}isCancelled(){return this.deps.isCancelled?.()??!1}async abort(){return await this.cleanup(),null}async cleanup(){if(this.cleanedUp)return;this.cleanedUp=!0;const e=this.view;this.view=null,this.paperLayout?.destroy(),this.paperLayout=null,this.deps.styleCoordinator.teardown(this.deps.shadow,this.themeController),this.themeController?.destroy(),this.themeController=null,this.inputManager?.destroy(),this.inputManager=null,e?.destroy();const t=this.pluginManager;this.pluginManager=null,await(t?.destroy()),this.domElements?.wrapper.remove(),this.domElements=null}},pi={isComposing:!1,activeBlockId:null};function ui(e,t){e.classList.toggle("notectl-content--empty",on(t))}var gi=class{state="idle";readyPromiseResolve=null;readyPromiseReject=null;readyPromise;preInitPlugins=[];constructor(){this.readyPromise=this.createReadyPromise()}isInitialized(){return"initializing"===this.state||"ready"===this.state}markInitialized(){return"initializing"!==this.state&&"ready"!==this.state&&("failed"===this.state&&(this.readyPromise=this.createReadyPromise()),this.state="initializing",!0)}whenReady(){return this.readyPromise}resolveReady(){"initializing"===this.state&&(this.state="ready",this.readyPromiseResolve?.(),this.readyPromiseResolve=null,this.readyPromiseReject=null)}failReady(e){"initializing"===this.state&&(this.state="failed",this.readyPromiseReject?.(e),this.readyPromiseResolve=null,this.readyPromiseReject=null)}registerPreInitPlugin(e){if("initializing"===this.state||"ready"===this.state)throw new Error("Cannot register plugins after initialization. Register before calling init() or adding to DOM.");this.preInitPlugins.push(e)}consumePreInitPlugins(){const e=this.preInitPlugins;return this.preInitPlugins=[],e}restorePreInitPlugins(e){0!==e.length&&(this.preInitPlugins=[...e,...this.preInitPlugins])}reset(){this.state="idle",this.preInitPlugins=[],this.readyPromise=this.createReadyPromise()}createReadyPromise(){const e=new Promise((e,t)=>{this.readyPromiseResolve=e,this.readyPromiseReject=t});return e.catch(()=>{}),e}},mi=class{runtimeStyleSheet=null;setup(e,t,n){St(e),this.runtimeStyleSheet=kt(),n?.setRuntimeStyleSheets(this.runtimeStyleSheet?[this.runtimeStyleSheet]:[]),mt(e,{nonce:t,sheet:this.runtimeStyleSheet})}teardown(e,t){e&&St(e),this.runtimeStyleSheet=null,t?.setRuntimeStyleSheets([])}},fi=class extends HTMLElement{view=null;inputManager=null;pluginManager=null;domElements=null;configController=new hn;events=new dn;lifecycle=new gi;styleCoordinator=new mi;themeController=null;paperLayout=null;pendingInitPromise=null;cancelPendingInit=null;autoInitToken=0;autoInitQueued=!1;initVersion=0;releaseInit=null;announce=null;markdownImportedMessage="Markdown imported";static get observedAttributes(){return["placeholder","readonly","theme","paper-size","dir"]}connectedCallback(){Ae(this)||this.lifecycle.isInitialized()||this.scheduleAutoInit()}disconnectedCallback(){setTimeout(()=>{this.isConnected||this.destroy()},0)}attributeChangedCallback(e,t,n){this.configController.applyAttribute(e,n,this.getConfigDeps())}registerPlugin(e){this.lifecycle.registerPreInitPlugin(e)}async init(e){if(Ae(this))throw Fe();if(this.cancelAutoInit(),!this.lifecycle.markInitialized())return;let t;e&&this.configController.setConfig(e);try{t=this.ensureFreshShadowRoot()}catch(o){throw this.lifecycle.failReady(o),o}const n=++this.initVersion;let s=!1;this.cancelPendingInit=()=>{s=!0};const i=this.lifecycle.consumePreInitPlugins(),r=async function(e){return new di(e).run()}({shadow:t,config:this.configController.getConfig(),hostDir:this.getAttribute("dir")??void 0,configController:this.configController,styleCoordinator:this.styleCoordinator,events:this.events,preInitPlugins:i,isCancelled:()=>s||n!==this.initVersion});this.pendingInitPromise=r;try{const e=await r;if(!e){if(s||n!==this.initVersion)return;throw new Error("Editor initialization completed without a result.")}if(n!==this.initVersion)return;this.view=e.view,this.inputManager=e.inputManager,this.pluginManager=e.pluginManager,this.domElements=e.domElements,this.themeController=e.themeController,this.paperLayout=e.paperLayout,this.announce=e.announce,this.markdownImportedMessage=e.markdownImportedMessage,this.releaseInit=e.release,this.lifecycle.resolveReady(),this.events.emit("ready",void 0)}catch(o){throw n===this.initVersion&&(this.lifecycle.restorePreInitPlugins(i),this.lifecycle.failReady(o)),o}finally{this.pendingInitPromise===r&&(this.pendingInitPromise=null,this.cancelPendingInit=null)}}get isReadOnly(){return this.configController.isReadOnly}getJSON(){if(!this.view)throw new Error("Editor not initialized");return this.view.getState().doc}setJSON(e){this.assertInitialized(),Xt(e,this.pluginManager?.schemaRegistry,e=>this.replaceState(e))}async getContentHTML(t){if(!this.view)throw new Error("Editor not initialized");return function(t,n,s){const i=t.doc;if("classes"===s?.cssMode){const t=Ve(i,n,s);return s.pretty?{html:e(t.html),css:t.css,styleMap:t.styleMap}:t}const r=$e(i,n,s);return s?.pretty?e(r):r}(this.view.getState(),this.pluginManager?.schemaRegistry,t)}async setContentHTML(e,t){return this.assertInitialized(),function(e,t,n,s){Xt(Ge(e,t,s),t,n)}(e,this.pluginManager?.schemaRegistry,e=>this.replaceState(e),t)}async getContentMarkdown(e){if(!this.view)throw new Error("Editor not initialized");return async function(e,t,n){const{serializeDocumentToMarkdown:s}=await import("./MarkdownSerializer-DBELFAeo.mjs").then(e=>e.t);return s(e.doc,t,n)}(this.view.getState(),this.pluginManager?.schemaRegistry,e)}async setContentMarkdown(e,t){if(this.assertInitialized(),!this.view)return;const n=this.pluginManager?.markdownSyntaxRegistry.getExtensions(),s={...t,syntaxExtensions:t?.syntaxExtensions??n};await async function(e,t,n,s,i){const{parseMarkdownToDocument:r}=await import("./MarkdownParser-Dp62mfUq.mjs").then(e=>e.t),o=r(e,n,i),a=t.doc.children.map(e=>e.id);Xt({children:o.children.map((e,t)=>{const n=a[t];return n?S(e.type,e.children,n,e.attrs,e.htmlId):e})},n,s)}(e,this.view.getState(),this.pluginManager?.schemaRegistry,e=>this.replaceState(e),s),this.announce?.(this.markdownImportedMessage)}getText(){if(!this.view)throw new Error("Editor not initialized");return sn(this.view.getState())}setText(e){this.assertInitialized(),this.view&&function(e,t,n,s){if(e===sn(t))return;const i=e.split("\n"),r=t.doc.children.map(e=>e.id),o=i.map((e,t)=>S(K("paragraph"),[R(e)],r[t])),a=n?pe(n):void 0;s(qt.create({doc:{children:o},schema:a}))}(e,this.view.getState(),this.pluginManager?.schemaRegistry,e=>this.replaceState(e))}isEmpty(){return!this.view||on(this.view.getState().doc)}commands={toggleBold:()=>this.executeCommand("toggleBold"),toggleItalic:()=>this.executeCommand("toggleItalic"),toggleUnderline:()=>this.executeCommand("toggleUnderline"),undo:()=>{this.configController.isReadOnly||this.view?.undo()},redo:()=>{this.configController.isReadOnly||this.view?.redo()},selectAll:()=>{if(!this.view)return;const e=ve(this.view.getState());this.dispatch(e)}};can(){const e=this.view?.getState().schema,t=this.configController.isReadOnly;return{toggleBold:()=>!t&&!!e&&ue(e,"bold"),toggleItalic:()=>!t&&!!e&&ue(e,"italic"),toggleUnderline:()=>!t&&!!e&&ue(e,"underline"),undo:()=>!t&&(this.view?.history.canUndo()??!1),redo:()=>!t&&(this.view?.history.canRedo()??!1),selectAll:()=>this.canExecuteCommand("selectAll")}}canExecuteCommand(e){return this.pluginManager?.canExecuteCommand(e)??!1}executeCommand(e){return this.pluginManager?.executeCommand(e)??!1}configurePlugin(e,t){this.pluginManager?.configurePlugin(e,t)}getService(e){return this.pluginManager?.getService(e)}onPluginEvent(e,t){return this.pluginManager?.onEvent(e,t)??(()=>{})}getState(){if(!this.view)throw new Error("Editor not initialized");return this.view.getState()}dispatch(e){this.view&&this.pluginManager&&this.pluginManager.dispatchWithMiddleware(e,this.view.getState(),e=>this.view?.dispatch(e))}on(e,t){this.events.on(e,t)}off(e,t){this.events.off(e,t)}whenReady(){return Ae(this)?Promise.reject(Fe()):this.lifecycle.whenReady()}configure(e){this.configController.applyRuntimeConfig(e,this.getConfigDeps())}setTheme(e){this.configController.applyTheme(e,this.themeController)}getTheme(){return this.configController.getTheme()}getPaperSize(){return this.configController.getPaperSize()}destroy(){this.cancelAutoInit(),this.initVersion++,this.cancelPendingInit?.(),this.cancelPendingInit=null;const e=this.pendingInitPromise?.then(()=>{},()=>{})??Promise.resolve();this.pendingInitPromise=null,this.releaseInit?.(),this.releaseInit=null,this.announce=null,this.paperLayout?.destroy(),this.paperLayout=null,this.styleCoordinator.teardown(this.shadowRoot,this.themeController),this.themeController?.destroy(),this.themeController=null,this.inputManager?.destroy(),this.inputManager=null,this.view?.destroy();const t=this.pluginManager?.destroy()??Promise.resolve();return this.view=null,this.pluginManager=null,this.lifecycle.reset(),this.events.clear(),this.domElements?.wrapper.remove(),this.domElements=null,Promise.all([t,e]).then(()=>{})}ensureFreshShadowRoot(){const e=this.shadowRoot;return e?(e.replaceChildren(),e):this.attachShadow({mode:"open"})}getConfigDeps(){return{contentElement:this.domElements?.content??null,editorWrapper:this.domElements?.wrapper??null,pluginManager:this.pluginManager,themeController:this.themeController,applyPaperSize:e=>this.applyPaperSize(e)}}scheduleAutoInit(){const e=++this.autoInitToken;this.autoInitQueued=!0,queueMicrotask(()=>{this.isConnected&&this.autoInitQueued&&this.autoInitToken===e&&(this.autoInitQueued=!1,this.lifecycle.isInitialized()||this.init().catch(()=>{}))})}cancelAutoInit(){this.autoInitToken++,this.autoInitQueued=!1}applyPaperSize(e){this.domElements&&(e?(this.paperLayout||(this.paperLayout=new li(this.domElements.wrapper,this.domElements.content)),this.paperLayout.apply(e)):this.paperLayout?.apply(null))}replaceState(e){this.view&&this.view.replaceState(e)}assertInitialized(){if(!this.view)throw new Error("Editor not initialized")}};async function yi(e){const t=document.createElement("notectl-editor");return await t.init(e),t}function ki(){"undefined"==typeof customElements||customElements.get("notectl-editor")||customElements.define("notectl-editor",fi)}ki();export{gn as C,Vt as E,Sn as S,qt as T,Zn as _,ti as a,Gn as b,Is as c,ks as d,ms as f,ts as g,ns as h,ni as i,ws as l,es as m,fi as n,Es as o,is as p,yi as r,Rs as s,ki as t,ys as u,Xn as v,un as w,Wn as x,Jn as y};
|
|
2
|
+
//# sourceMappingURL=register-BjsdJ3Aq.mjs.map
|