@notectl/core 2.2.2 → 2.2.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.
Files changed (41) hide show
  1. package/dist/chunks/{CodeBlockPlugin-Uv6EXaH1.mjs → CodeBlockPlugin-CcB0WaIz.mjs} +2 -2
  2. package/dist/chunks/{CodeBlockPlugin-Uv6EXaH1.mjs.map → CodeBlockPlugin-CcB0WaIz.mjs.map} +1 -1
  3. package/dist/chunks/{Commands-CyT1Li7_.mjs → Commands-BIIpx_Zd.mjs} +2 -2
  4. package/dist/chunks/Commands-BIIpx_Zd.mjs.map +1 -0
  5. package/dist/chunks/{FormulaPlugin-UA-9tRpY.mjs → FormulaPlugin-66Cc9sH2.mjs} +2 -2
  6. package/dist/chunks/{FormulaPlugin-UA-9tRpY.mjs.map → FormulaPlugin-66Cc9sH2.mjs.map} +1 -1
  7. package/dist/chunks/{HardBreakPlugin-BkgoJkjC.mjs → HardBreakPlugin-9DOyCyyM.mjs} +2 -2
  8. package/dist/chunks/{HardBreakPlugin-BkgoJkjC.mjs.map → HardBreakPlugin-9DOyCyyM.mjs.map} +1 -1
  9. package/dist/chunks/{InlineCodePlugin-D3QulApr.mjs → InlineCodePlugin-Cj1EZ3x2.mjs} +2 -2
  10. package/dist/chunks/{InlineCodePlugin-D3QulApr.mjs.map → InlineCodePlugin-Cj1EZ3x2.mjs.map} +1 -1
  11. package/dist/chunks/{SimpleMark-Db8ir_z2.mjs → SimpleMark-Bdqjcz0G.mjs} +2 -2
  12. package/dist/chunks/{SimpleMark-Db8ir_z2.mjs.map → SimpleMark-Bdqjcz0G.mjs.map} +1 -1
  13. package/dist/chunks/{SmartPastePlugin-Db1RcNJf.mjs → SmartPastePlugin-BhkoH03E.mjs} +2 -2
  14. package/dist/chunks/{SmartPastePlugin-Db1RcNJf.mjs.map → SmartPastePlugin-BhkoH03E.mjs.map} +1 -1
  15. package/dist/chunks/{StrikethroughPlugin-Bsg7Ma4I.mjs → StrikethroughPlugin-DRuwEZhu.mjs} +2 -2
  16. package/dist/chunks/{StrikethroughPlugin-Bsg7Ma4I.mjs.map → StrikethroughPlugin-DRuwEZhu.mjs.map} +1 -1
  17. package/dist/chunks/{SuperSubPlugin-ChEga-b_.mjs → SuperSubPlugin-IZ_x8GS-.mjs} +2 -2
  18. package/dist/chunks/{SuperSubPlugin-ChEga-b_.mjs.map → SuperSubPlugin-IZ_x8GS-.mjs.map} +1 -1
  19. package/dist/chunks/{TextFormattingPlugin-Db5SCNOF.mjs → TextFormattingPlugin-CpyZgtLi.mjs} +2 -2
  20. package/dist/chunks/{TextFormattingPlugin-Db5SCNOF.mjs.map → TextFormattingPlugin-CpyZgtLi.mjs.map} +1 -1
  21. package/dist/chunks/{full--GEBZ2xU.mjs → full-CHkwduuY.mjs} +2 -2
  22. package/dist/chunks/{full--GEBZ2xU.mjs.map → full-CHkwduuY.mjs.map} +1 -1
  23. package/dist/chunks/{src-C5Lblp2i.mjs → src-gVRDR_79.mjs} +2 -2
  24. package/dist/chunks/{src-C5Lblp2i.mjs.map → src-gVRDR_79.mjs.map} +1 -1
  25. package/dist/commands/Commands.d.ts.map +1 -1
  26. package/dist/full.mjs +1 -1
  27. package/dist/notectl-core.mjs +1 -1
  28. package/dist/notectl-core.umd.js +1 -1
  29. package/dist/notectl-core.umd.js.map +1 -1
  30. package/dist/plugins/code-block.mjs +1 -1
  31. package/dist/plugins/formula.mjs +1 -1
  32. package/dist/plugins/hard-break.mjs +1 -1
  33. package/dist/plugins/inline-code.mjs +1 -1
  34. package/dist/plugins/smart-paste.mjs +1 -1
  35. package/dist/plugins/strikethrough.mjs +1 -1
  36. package/dist/plugins/super-sub.mjs +1 -1
  37. package/dist/plugins/text-formatting.mjs +1 -1
  38. package/dist/presets/full.mjs +1 -1
  39. package/dist/presets.mjs +1 -1
  40. package/package.json +415 -423
  41. package/dist/chunks/Commands-CyT1Li7_.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- import{A as e,C as t,E as n,S as s,T as i,a as r,c as o,d as a,f as l,g as c,h,i as d,j as p,l as u,m as g,o as m,p as f,s as y,u as S,v as k,w,x as v}from"./Document-r7vLOAGA.mjs";import{a as b,c as R,d as I,f as C,i as x,l as T,n as E,o as P,r as M,t as A,u as B}from"./Selection-HYoVFpAx.mjs";import{C as N,S as D,b as O,c as L,d as H,f as z,i as _,l as F,m as K,n as $,o as j,p as V,r as U,s as q,t as W,u as G,w as Q,x as J,y as X}from"./Commands-CyT1Li7_.mjs";import{a as Y,i as Z,r as ee,t as te}from"./TypeBrands-Ch9856Gb.mjs";import{n as ne,t as se}from"./DomUtils-Bf7JLFlx.mjs";import{a as ie,i as re,t as oe}from"./HTMLUtils-C6B4UT00.mjs";import{n as ae,o as le,r as ce,s as he}from"./NodeResolver-ChgLF_IP.mjs";import{C as de,S as pe,a as ue,d as ge,f as me,g as fe,h as ye,i as Se,m as ke,n as we,p as ve,r as be,t as Re,u as Ie,w as Ce,x as xe,y as Te}from"./BlockInsertion-6rR9tIGP.mjs";import{C as Ee,_ as Pe,c as Me,d as Ae,f as Be,h as Ne,m as De,n as Oe,o as Le,p as He,s as ze,t as _e,u as Fe,y as Ke}from"./Decoration-ZeyVfwJB.mjs";import{t as $e}from"./GapCursorNavigation-ycNzuQVH.mjs";import{C as je,S as Ve,b as Ue,t as qe,v as We,x as Ge,y as Qe}from"./CaretNavigationPlugin-Bb7W_FMg.mjs";import{i as Je,t as Xe}from"./NodeSelectionCommands-Dj4VxLdD.mjs";import{t as Ye}from"./Platform-ByobkiCc.mjs";import{a as Ze,n as et,o as tt,r as nt,t as st}from"./SelectionSync-BSHIw1EE.mjs";import{a as it,c as rt,n as ot,o as at,s as lt,t as ct}from"./DocumentParser-CcTSeT1B.mjs";import{c as ht,i as dt,l as pt,n as ut,s as gt,t as mt}from"./StyleRuntime-BAutwDZT.mjs";import{t as ft}from"./BlockTypePickerRegistry-BTET9jM-.mjs";import{o as yt,t as St}from"./ToolbarPlugin-B5UUc6dY.mjs";import{_ as kt,a as wt,f as vt,h as bt,i as Rt,l as It,n as Ct,o as xt,u as Tt}from"./PrintTypes-WdtgSj74.mjs";import{c as Et,l as Pt,s as Mt}from"./PluginHelpers-D4quRJ5a.mjs";import{t as At}from"./GapCursorPlugin-B29ieXel.mjs";import{t as Bt}from"./TextFormattingPlugin-Db5SCNOF.mjs";import Nt from"dompurify";var Dt=class{_nodeSpecs=/* @__PURE__ */new Map;_markSpecs=/* @__PURE__ */new Map;_inlineNodeSpecs=/* @__PURE__ */new Map;registerNodeSpec(e){if(this._nodeSpecs.has(e.type))throw new Error(`NodeSpec for type "${e.type}" is already registered.`);this._nodeSpecs.set(e.type,e)}getNodeSpec(e){return this._nodeSpecs.get(e)}removeNodeSpec(e){this._nodeSpecs.delete(e)}getNodeTypes(){return[...this._nodeSpecs.keys()]}registerMarkSpec(e){if(this._markSpecs.has(e.type))throw new Error(`MarkSpec for type "${e.type}" is already registered.`);this._markSpecs.set(e.type,e)}getMarkSpec(e){return this._markSpecs.get(e)}removeMarkSpec(e){this._markSpecs.delete(e)}getMarkTypes(){return[...this._markSpecs.keys()]}registerInlineNodeSpec(e){if(this._inlineNodeSpecs.has(e.type))throw new Error(`InlineNodeSpec for type "${e.type}" is already registered.`);this._inlineNodeSpecs.set(e.type,e)}getInlineNodeSpec(e){return this._inlineNodeSpecs.get(e)}removeInlineNodeSpec(e){this._inlineNodeSpecs.delete(e)}getInlineNodeTypes(){return[...this._inlineNodeSpecs.keys()]}getBlockParseRules(){return this.collectParseRules(this._nodeSpecs)}getInlineParseRules(){return this.collectParseRules(this._inlineNodeSpecs)}getMarkParseRules(){return this.collectParseRules(this._markSpecs)}getAllowedTags(){return[...this.collectSanitizeValues(new Set(["p","br","div","span"]),e=>e.sanitize?.tags)]}getAllowedAttrs(){return[...this.collectSanitizeValues(new Set(["style","dir"]),e=>e.sanitize?.attrs)]}collectParseRules(e){const t=[];for(const[n,s]of e)if(s.parseHTML)for(const e of s.parseHTML)t.push({rule:e,type:n});return t.sort((e,t)=>(t.rule.priority??50)-(e.rule.priority??50))}collectSanitizeValues(e,t){const n=[this._nodeSpecs,this._inlineNodeSpecs,this._markSpecs];for(const s of n)for(const n of s.values()){const s=t(n);if(s)for(const t of s)e.add(t)}return e}clear(){this._nodeSpecs.clear(),this._markSpecs.clear(),this._inlineNodeSpecs.clear()}};function Ot(e){e.registerNodeSpec({type:"paragraph",group:"block",content:{allow:["text"]},toDOM:e=>ne("p",e.id),toHTML:(e,t)=>`<p>${t||"<br>"}</p>`,parseHTML:[{tag:"p"},{tag:"div",priority:10}],sanitize:{tags:["p"]}})}var Lt=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=ae(this.workingDoc,e);o=r?l(r,t,n):[p(s,[...i])]}else o=[p(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=h(i).slice(t,n),o=g(i,t),a=l(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){const r={type:"mergeBlocks",targetBlockId:e,sourceBlockId:t,targetLengthBefore:n,...void 0!==s?{sourceType:s}:{},...i?{sourceAttrs:i}:{}};return this.steps.push(r),this.advanceDoc(r),this}mergeBlocksAt(e,t){const n=this.requireDoc("mergeBlocksAt"),s=this.requireBlock(n,e),i=this.requireBlock(n,t),r=f(s);return this.mergeBlocks(e,t,r,i.type,i.attrs)}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=De(k(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=Ne(k(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=le(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}setNodeAttr(e,t){const n=he(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,n,s){const i=this.requireDoc("setInlineNodeAttr"),r=k(this.requireBlock(i,e));let o=0;for(const a of r){if(t(a)&&o===n){const t={type:"setInlineNodeAttr",blockId:e,offset:n,attrs:s,previousAttrs:a.attrs};return this.steps.push(t),this.advanceDoc(t),this}o+=t(a)?1:a.text.length}throw new Error(`No InlineNode at offset ${n} in block "${e}".`)}readonlyAllowed(){return this._readonlyAllowed=!0,this}setSelection(e){return this.selection=e,this}setNodeSelection(e,t){return this.selection=M(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:Pe.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=ae(e,t);if(!n)throw new Error(`Block "${t}" not found in working document.`);return n}tryGetBlock(e){return this.workingDoc?ae(this.workingDoc,e)??null:null}advanceDoc(e){const t=this.workingDoc??Ht;this.stepMaps.push(ze(t,e)),this.workingDoc&&(this.workingDoc=Le(this.workingDoc,e))}},Ht={children:[]},zt=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??J(),s=t?.doc??r(),i=$t(s.children);return new e(s,t?.selection??A(i?i.id:te(""),0),null,n)}transaction(e="api"){return new Lt(this.selection,this.storedMarks,e,this.doc)}apply(t){let n=this.doc;for(const e of t.steps)n=Le(n,e);const s=Ft(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 i of n)s(i)&&(t.set(i.id,i),e(i.children))}(e.children),t}(this.doc),this._blockMap.get(e)}getBlockOrder(){return this._blockOrder??=function(e){const t=[];return function e(n){for(const i of n)s(i)&&(w(i)?t.push(i.id):e(i.children))}(e.children),t}(this.doc),this._blockOrder}getNodePath(e){return ce(this.doc,e)}getParent(e){const t=ce(this.doc,e);if(!t||t.length<=1)return;const n=t[t.length-2];return n?ae(this.doc,n):void 0}withSelection(t){const n=Ft(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??J())}};function _t(e,t){const n=ae(e,t.blockId);if(n){const e=f(n);return t.offset>e?x(t.blockId,e,t.path):t}const s=e.children[0];return s?x(s.id,0):t}function Ft(e,t){if(T(t))return ae(e,t.nodeId)?t:Kt(e,t);if(R(t))return ae(e,t.blockId)?t:Kt(e,t);const n=_t(e,t.anchor),s=_t(e,t.head);return n===t.anchor&&s===t.head?t:b(n,s)}function Kt(e,t){const n=$t(e.children);return n?A(n.id,0):t}function $t(e){for(const t of e){if(!s(t))continue;if(w(t))return t;const e=$t(t.children);if(e)return e}return null}function jt(e,t){return t.isEmpty?e:T(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:M(e.nodeId,e.path)}(e,t):R(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:E(e.blockId,e.side,e.path)}(e,t):Vt(e,t)}function Vt(e,t){if(P(e)){const n=t.map(e.anchor,-1);return n===e.anchor?e:A(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:b(n,s)}function Ut(e){for(const t of e.steps)if("setStoredMarks"!==t.type)return!1;return!0}function qt(e){return!!e.metadata.readonlyAllowed||Ut(e)}var Wt=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:Pe.empty}),this.lastOrigin=e.metadata.origin,this.redoStack=[];this.undoStack.length>this.maxDepth;)this.undoStack.shift()}recordIntervening(e){e.isEmpty||(Jt(this.undoStack,e),Jt(this.redoStack,e))}undo(e){const t=this.undoStack.pop();if(!t)return null;const n=Gt(t,e,"undo");return null===n?(this.lastOrigin=null,null):(this.redoStack.push({transactions:[n.transaction],timestamp:Date.now(),interveningMapping:Pe.empty}),this.lastOrigin=null,{state:n.newState,transaction:n.transaction})}redo(e){const t=this.redoStack.pop();if(!t)return null;const n=Gt(t,e,"redo");return null===n?(this.lastOrigin=null,null):(this.undoStack.push({transactions:[n.transaction],timestamp:Date.now(),interveningMapping:Pe.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 Gt(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=Fe(Me(n),s,i);if(null===l)return null;const c=ze(i,l);r.push(l),o.push(c),i=Le(i,l),s=Qt(a,s,c)}}const a=function(e){const t=e.transactions[0];return t?Ae(t):null}(e),l={steps:r,selectionBefore:t.selection,selectionAfter:t.selection,storedMarksAfter:a,mapping:Pe.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=jt(h.selectionBefore,s);null!==e&&(c=c.withSelection(e))}return{newState:c,transaction:{...l,selectionAfter:c.selection}}}function Qt(e,t,n){return t.isEmpty&&Ee(Ke(e),n)?t:Pe.from([e]).appendMapping(t).appendMap(n)}function Jt(e,t){for(let n=0;n<e.length;n++){const s=e[n];s&&(e[n]={...s,interveningMapping:s.interveningMapping.appendMapping(t)})}}var Xt={Period:".",Comma:",",Slash:"/",Semicolon:";",Quote:"'",BracketLeft:"[",BracketRight:"]",Backslash:"\\",Minus:"-",Equal:"=",Backquote:"`"},Yt={1:"!",2:"@",3:"#",4:"$",5:"%",6:"^",7:"&",8:"*",9:"(",0:")","`":"~","-":"_","=":"+","[":"{","]":"}","\\":"|",";":":","'":'"',",":"<",".":">","/":"?"},Zt=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(Xt))e.set(t,n);return e}();function en(e){const t=[];return(e.metaKey||e.ctrlKey)&&t.push("Mod"),e.shiftKey&&t.push("Shift"),e.altKey&&t.push("Alt"),t}function tn(e){const t=en(e);let n=e.key;return" "===n?n="Space":1===n.length&&(n=n.toUpperCase()),t.push(n),t.join("-")}function nn(e){return e.ctrlKey||e.metaKey?e.ctrlKey&&e.altKey&&!e.metaKey?null:Zt.get(e.code)??null:null}function sn(t,n){if(w(t))return n.selectedLeafIds.has(t.id)?function(t,n){const s=f(t),i=t.id===n.firstBlockId?n.firstOffset:0,r=t.id===n.lastBlockId?n.lastOffset:s;if(0===i&&r===s)return t;const o=e(l(t,i,r));return{...t,children:o}}(t,n):null;const s=a(t),i=[];let r=s.length!==t.children.length;for(const e of s){const t=sn(e,n);t?(i.push(t),t!==e&&(r=!0)):r=!0}return 0===i.length?null:r?{...t,children:i}:t}var rn=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){this.syncSelection?.();const t=this.getState(),n=t.selection;if(R(n))return;if(B(n)&&P(n))return;e.preventDefault();const s=e.clipboardData;s&&(T(n)?this.writeNodeSelectionToClipboard(s,t):this.writeTextSelectionToClipboard(s,t))}onCut(e){if(this.isReadOnly())return;this.syncSelection?.();const t=this.getState(),n=t.selection;if(R(n))return;if(B(n)&&P(n))return;e.preventDefault();const s=e.clipboardData;if(s)if(T(n)){this.writeNodeSelectionToClipboard(s,t);const e=Xe(t,n);e&&this.dispatch(e)}else{this.writeTextSelectionToClipboard(s,t);const e=$(t);e&&this.dispatch(e)}}writeNodeSelectionToClipboard(e,t){const n=t.selection;if(!T(n))return;const s=t.getBlock(n.nodeId);if(!s)return;const i={type:s.type,...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",r.toHTML(s,""));const o=s.attrs,a="string"==typeof o?.alt?o.alt:"";e.setData("text/plain",a)}writeTextSelectionToClipboard(e,t){const n=t.selection;if(T(n))return;if(R(n))return;if(P(n))return;if(this.selectionRequiresDocumentSerializer(t))return void this.writeCompositeSelectionToClipboard(e,t);const s=t.getBlockOrder(),i=I(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=f(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,...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=lt(this.schemaRegistry),a=r!==o,h=l.some(e=>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||P(t))return!1;const n=I(t,e.getBlockOrder()),s=ce(e.doc,n.from.blockId),i=ce(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||w(t))}const r=e.doc.children.findIndex(e=>e.id===s[0]),o=e.doc.children.findIndex(e=>e.id===i[0]);for(let a=r;a<=o;a++){const t=e.doc.children[a];if(t){if(!w(t))return!0;if((this.schemaRegistry?.getNodeSpec(t.type))?.isVoid)return!0}}return!1}getTextSelection(e){const t=e.selection;if(B(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=I(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:f(n);a.push(this.extractPlainTextForRange(n,c,h))}if(e.setData("text/plain",a.join("\n")),this.schemaRegistry){const s=function(e,t){const n=e.getBlockOrder(),s=I(t,n),i=n.indexOf(s.from.blockId),r=n.indexOf(s.to.blockId);if(-1===i||-1===r||i>r)return{children:[]};const o=e.getNodePath(s.from.blockId),a=e.getNodePath(s.to.blockId),l=o?.[0],c=a?.[0];if(!l||!c)return{children:[]};const h=e.doc.children.findIndex(e=>e.id===l),d=e.doc.children.findIndex(e=>e.id===c);if(-1===h||-1===d||h>d)return{children:[]};const p={firstBlockId:s.from.blockId,firstOffset:s.from.offset,lastBlockId:s.to.blockId,lastOffset:s.to.offset,selectedLeafIds:new Set(n.slice(i,r+1))},u=[];for(let g=h;g<=d;g++){const t=e.doc.children[g];if(!t)continue;const n=sn(t,p);n&&u.push(n)}return{children:u}}(t,n);if(s.children.length>0){const t=at(s,this.schemaRegistry);e.setData("text/html",t)}}}serializeBlockRangeToHTML(e,t,n,s){const i=[];return u(e,t,n,{onText:(e,t)=>{this.schemaRegistry&&i.push(rt(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 u(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=this.serializeBlockRangeToHTML(e,n,a,t),h=this.schemaRegistry?.getNodeSpec(e.type);if(h?.wrapper){const t=h.wrapper(e).tag;i!==t&&(o(),i=t),h.toHTML?r.push(h.toHTML(e,c)):r.push(`<li>${c}</li>`)}else o(),h?.toHTML?s.push(h.toHTML(e,c)):s.push(`<p>${c}</p>`)}o();const a=JSON.stringify(n).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;");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)}},on=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}},an=class{element;getState;dispatch;syncSelection;inputRuleRegistry;isReadOnly;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.compositionTracker=t.compositionTracker??new on,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(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)??_(t,e.data,"input"));break;case"insertFromComposition":e.data&&(this.compositionCommitHandled=!0,n=this.runTextInputInterceptors(e.data,t)??_(t,e.data,"input"));break;case"insertParagraph":n=q(t);break;case"insertLineBreak":n=U(t);break;case"deleteContentBackward":n=L(t);break;case"deleteContentForward":n=F(t);break;case"deleteWordBackward":n=z(t);break;case"deleteWordForward":n=V(t);break;case"deleteSoftLineBackward":n=G(t);break;case"deleteSoftLineForward":n=H(t)}n&&(this.dispatch(n),"insertText"!==e.inputType&&"insertReplacementText"!==e.inputType||this.checkInputRules())}onCompositionStart(e){const t=this.getState();B(t.selection)&&(this.compositionCommitHandled=!1,this.compositionTracker.start(t.selection.anchor.blockId))}onCompositionEnd(e){if(this.compositionTracker.end(),this.isReadOnly())return;if(this.compositionCommitHandled)return void(this.compositionCommitHandled=!1);const t=e.data;if(!t)return;const n=_(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.inputRuleRegistry)return;const e=this.inputRuleRegistry.getInputRules();if(0===e.length)return;const t=this.getState();if(!B(t.selection))return;const{anchor:n}=t.selection,s=t.getBlock(n.blockId);if(!s)return;const i=h(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)}},ln={ArrowLeft:"left",ArrowRight:"right",ArrowUp:"up",ArrowDown:"down"},cn=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(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=nn(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=j(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,tn(e)))return!0;for(const n of function(e){const t=nn(e);if(null===t)return[];const n=en(e),s=[[...n,t].join("-")];if(e.shiftKey){const e=Yt[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(!T(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=ln[s];if(!i)return!1;const r=Je(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=Xe(t,n);return s&&this.dispatch(s),!0}if("Enter"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const n=q(t);return n&&this.dispatch(n),!0}if("Escape"===s){e.preventDefault();const n=Je(t,"right");return n&&this.dispatch(n),!0}return!1}handleGapCursorKeys(e){const t=this.getState(),n=t.selection;if(!R(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=q(t);return n&&this.dispatch(n),!0}if("Backspace"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const s=X(t,n);return s&&this.dispatch(s),!0}if("Delete"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const s=O(t,n);return s&&this.dispatch(s),!0}if(1===s.length){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const n=_(t,s);return this.dispatch(n),!0}return!1}handleGapCursorArrowFallback(e){const t=this.getState(),n=t.selection;if(!R(n))return!1;const s=e.key;if("ArrowLeft"!==s&&"ArrowRight"!==s&&"ArrowUp"!==s&&"ArrowDown"!==s)return!1;const i=ln[s];if(!i)return!1;if(!this.navigateFromGapCursorFn)return!1;const r=this.navigateFromGapCursorFn(t,i,this.element);return!(!r||C(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=_(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)}};function hn(t,n){if(0===n.blocks.length)return t.transaction("paste").setSelection(t.selection).build();const s=n.blocks[0];return s?1===n.blocks.length&&s.type===Y("paragraph")?function(e,t){const n=e.selection;if(T(n))return e.transaction("paste").setSelection(n).build();if(R(n))return function(e,t,n){const s=un(e,t);if(!s)return e.transaction("paste").setSelection(t).build();const i=S(),r=e.transaction("paste");r.insertNode(s.parentPath,s.insertIndex,d(Y("paragraph"),[o("")],i));const a=pn(r,i,0,n);return r.setSelection(A(i,a)),r.build()}(e,n,t);const{builder:s,insertBlockId:i,insertOffset:r}=dn(e,n),a=pn(s,i,r,t);return s.setSelection(A(i,a)),s.build()}(t,s.segments):1===n.blocks.length?function(e,t){const n=e.selection;if(T(n))return e.transaction("paste").setSelection(n).build();if(R(n))return gn(e,n,[t]);const{builder:s,insertBlockId:i,insertOffset:r}=dn(e,n);s.setBlockType(i,t.type,t.attrs);const o=pn(s,i,r,t.segments);return s.setSelection(A(i,o)),s.build()}(t,s):function(t,n){const s=t.selection;if(T(s))return t.transaction("paste").setSelection(s).build();if(R(s))return gn(t,s,n.blocks);const{builder:i,landingId:r,resolved:o,insertBlockId:a,insertOffset:l}=dn(t,s),c=t.getBlockOrder();let h;if(r){const e=ce(t.doc,o.blockId)?.[0];h=e?t.doc.children.findIndex(t=>t.id===e):0}else h=c.indexOf(a);const p=n.blocks[0],u=n.blocks[n.blocks.length-1];if(!p||!u)return i.build();const g=n.blocks.slice(1,-1),m=pn(i,a,l,p.segments),f=S();i.splitBlock(a,m,f),p.type!==Y("paragraph")&&i.setBlockType(a,p.type,p.attrs);let y=h+1;for(const k of g){const t=d(k.type,e(k.segments),S(),k.attrs);i.insertNode([],y,t),y++}return pn(i,f,0,u.segments),u.type!==Y("paragraph")&&i.setBlockType(f,u.type,u.attrs),i.setSelection(A(f,He(u.segments))),i.build()}(t,n):t.transaction("paste").setSelection(t.selection).build()}function dn(e,t){const n=e.transaction("paste");let s;P(t)||(s=W(e,n));const i=Ce(t,e.getBlockOrder());return{builder:n,landingId:s,resolved:i,insertBlockId:s??i.blockId,insertOffset:s?0:i.offset}}function pn(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 un(e,t){const n=ce(e.doc,t.blockId);if(!n)return null;const s=Te(n),i=pe(de(e,s),t.blockId);return i<0?null:{parentPath:s,insertIndex:"before"===t.side?i:i+1}}function gn(t,n,s){const i=un(t,n);if(!i)return t.transaction("paste").setSelection(n).build();const r=t.transaction("paste");let o,a=i.insertIndex,l=0;for(const c of s){const t=S(),n=d(c.type,e(c.segments),t,c.attrs);r.insertNode(i.parentPath,a,n),a++,o=t,l=He(c.segments)}return o&&r.setSelection(A(o,l)),r.build()}var mn=new Set(["P","DIV","H1","H2","H3","H4","H5","H6","BLOCKQUOTE","UL","OL","LI","HR","PRE","TABLE","THEAD","TBODY","TR"]),fn=new Set(["STRONG","B","EM","I","U","S","STRIKE","DEL","A","SPAN","BR","SUB","SUP","CODE"]),yn=/^H([1-6])$/;function Sn(e){const t=e.style.fontWeight,n=Number.parseInt(t,10);return!("normal"===t||!Number.isNaN(n)&&n<700)&&{}}var kn=new Map([["STRONG",{markName:"bold",getAttrs:Sn}],["B",{markName:"bold",getAttrs:Sn}],["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:ie(e.getAttribute("href")??"")}}}]]),wn=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){ot(e);const t=this.parseContainer(e);return 0===t.length?{blocks:[{type:this.resolveBlockType(Y("paragraph")),segments:[p("")]}]}:{blocks:t}}buildBlockTagHandlers(){const e=e=>this.parseBlockWithLineBreaks(e,this.resolveBlockType(Y("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(Y("horizontal_rule")),segments:[]}]],["PRE",e=>[{type:this.resolveBlockType(Y("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(p(e))}return this.flushPendingSegments(t,n),t}parseBlockElement(e){const t=yn.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(Y("heading"));return[{type:n,...n===Y("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(Y("paragraph")),segments:this.ensureSegments(this.parseInlineChildren(e,[]))}]}parseBlockquote(e){const t=this.resolveBlockType(Y("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(Y("list_item")),r=this.hasCheckbox(e),o=r?"checklist":t,a=!!r&&this.isCheckboxChecked(e),l=[],c=[];for(const h of Array.from(e.childNodes))if(h.nodeType===Node.ELEMENT_NODE){const e=h;"UL"===e.tagName||"OL"===e.tagName?c.push(e):"INPUT"===e.tagName&&"checkbox"===e.getAttribute("type")||(this.isBlockElement(e)?l.push(...this.parseInlineChildren(e,[])):l.push(...this.parseInlineNode(h,[])))}else if(h.nodeType===Node.TEXT_NODE){const e=h.textContent??"";e&&l.push(p(e))}s.push({type:i,attrs:{listType:o,indent:n,..."checklist"===o?{checked:a}:{}},segments:this.ensureSegments(this.normalizeSegments(l))});for(const h of c){const e="OL"===h.tagName?"ordered":"bullet";s.push(...this.parseList(h,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?[p(n,this.resolveMarks(t))]:[]}if(e.nodeType!==Node.ELEMENT_NODE)return[];const n=e,s=n.tagName;if("BR"===s)return[p("\n",this.resolveMarks(t))];const i=this.matchInlineNodeRule(n);if(i)return[v(i)];if(this.isBlockElement(n)&&!fn.has(s))return this.parseInlineChildren(n,t);const r=this.mergeMarks(t,this.marksFromElement(n));return this.parseInlineChildren(n,r)}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 y(ee(n.type),t)}return y(ee(n.type))}return null}parsePreContent(e){const t=e.textContent??"";return t?[p(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(Y("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:Z(i.type),...Object.keys(t).length>0?{attrs:t}:{}})}else n.push({type:Z(i.type)});s.add(i.type)}return s.size>0?n:null}fallbackMarksFromElement(e){const t=kn.get(e.tagName);if(!t)return[];if(t.getAttrs){const n=t.getAttrs(e);return!1===n?[]:Object.keys(n).length>0?[{type:Z(t.markName),attrs:n}]:[{type:Z(t.markName)}]}return[{type:Z(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=>D(this.schema,e.type))}resolveBlockType(e){return N(this.schema,e)?e:Y("paragraph")}normalizeSegments(e){if(0===e.length)return[];const t=[];for(const s of e){if("inline"===s.kind){t.push(s);continue}const e=t[t.length-1];e&&"text"===e.kind&&n(e.marks,s.marks)?t[t.length-1]=p(e.text+s.text,e.marks):s.text.length>0&&t.push(s)}return t}ensureSegments(e){return 0===e.length?[p("")]: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:Y(n.type),attrs:t}}return{type:Y(n.type)}}return null}isBlockElement(e){if(mn.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:p(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(p(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(Y("paragraph")),segments:n}))}},vn={1:"x-small",2:"small",3:"medium",4:"large",5:"x-large",6:"xx-large",7:"xxx-large"};function bn(e){return e.toLowerCase().includes("font-size")}function Rn(e,t){for(;e.firstChild;)t.appendChild(e.firstChild)}function In(e){const t=e.parentNode;if(t){for(;e.firstChild;)t.insertBefore(e.firstChild,e);t.removeChild(e)}}var Cn=["script","style","iframe","object","embed","form","noscript"],xn=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");if(s)this.handleHTML(s,n);else if(t){const e=Be(t);this.dispatch(hn(this.getState(),e))}}handleHTML(e,t){const n=Nt.sanitize(e,{FORBID_TAGS:Cn,ADD_TAGS:this.schemaRegistry?this.schemaRegistry.getAllowedTags():[],ADD_ATTR:this.schemaRegistry?this.schemaRegistry.getAllowedAttrs():[],ALLOWED_URI_REGEXP:oe}),s=this.extractRichData(n);if(s&&this.tryRichPasteFromJson(s))return;const i=document.createElement("template");i.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)){In(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&&!bn(i)){const e=vn[s];e&&o.push(`font-size: ${e};`)}ht(r,o.join(" ")),Rn(n,r),n.parentNode?.replaceChild(r,n)}}(i.content);const r=i.innerHTML,o=this.schemaRegistry?this.schemaRegistry.getAllowedTags():["strong","em","u","b","i","p","br","div","span"],a=this.schemaRegistry?this.schemaRegistry.getAllowedAttrs():[],l=Nt.sanitize(r,{ALLOWED_TAGS:o,ALLOWED_ATTR:a,ALLOWED_URI_REGEXP:oe});if(this.schemaRegistry){const e=document.createElement("template");if(e.innerHTML=l,this.requiresDocumentParser(l,e.content))return void this.handleDocumentPaste(l,t);const n=new wn({schema:Q(this.schemaRegistry),schemaRegistry:this.schemaRegistry}).parse(e.content);this.dispatch(hn(t,n))}else{const e=this.extractTextFromHTML(l);e&&this.dispatch(_(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(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&")}requiresDocumentParser(e,t){return!!/<table[\s>]/i.test(e)||!!/<blockquote[\s>]/i.test(e)||this.containsVoidBlockElements(t)}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=ct(e,this.schemaRegistry);if(0===n.children.length)return;const s=t.selection,i=t.transaction("paste");let r;B(s)&&!P(s)&&(r=W(t,i));const o=r??(T(s)?s.nodeId:R(s)?s.blockId:s.anchor.blockId),a=ve(t,o,this.schemaRegistry);if(!a)return;const l=a.parentPath[a.parentPath.length-1],c=l?t.getBlock(l)?.type:void 0,d=Re(this.schemaRegistry,c,n.children)?a:me(t,o);if(!d)return;const p=R(s)&&"before"===s.side?0:1;let u,g,m=d.anchorIndex+p;for(const h of n.children){const e=we(h,S());i.insertNode(d.parentPath,m,e),m++,u=xe(e),g=e}if(d.isAnchorEmpty&&!R(s)&&i.removeNode(d.parentPath,d.anchorIndex),u&&g){const e=Se(g,u),t=e?h(e).length:0;i.setSelection(A(u,t))}this.dispatch(i.build())}extractTextFromHTML(e){const t=document.createElement("template");return t.innerHTML=e,t.content.textContent??""}},Tn=class{getState;dispatch;schemaRegistry;constructor(e,t,n){this.getState=e,this.dispatch=t,this.schemaRegistry=n}handleBlockPaste(e){let t;try{t=JSON.parse(e)}catch{return}const n=t.type;if(!n)return;const s=this.schemaRegistry?.getNodeSpec(n);if(this.schemaRegistry&&!s)return;const i=this.getState(),r=i.selection,o=Ie(r),a=S(),l=ye(t.attrs,s?.attrs),c=d(Y(n),void 0,a,l),h=ue(i,o);if(h){const e=i.getBlock(h);if(this.cellRejects(e,[c])){const e=me(i,o);if(!e)return;return void this.dispatchNodeInsert(i,e.parentPath,e.anchorIndex+1,c)}const t=ge(i,o,h,this.schemaRegistry);if(!t||!e)return;return void this.dispatchNodeInsert(i,t.parentPath,e.children.length,c)}const p=ve(i,o,this.schemaRegistry);if(!p)return;const u=R(r)&&"before"===r.side?0:1;this.dispatchNodeInsert(i,p.parentPath,p.anchorIndex+u,c)}dispatchNodeInsert(e,t,n,s){const i=e.transaction("paste");i.insertNode(t,n,s),i.setSelection(M(s.id,[...t,s.id])),this.dispatch(i.build())}cellRejects(e,t){return!(!e||!this.schemaRegistry||Re(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.type&&"paragraph"!==e.type||e.segments?.some(e=>"inline"===e.kind))&&e.length<=1)return!1;let t=this.getState();const n=t.selection,s=Ie(n),i=t.getBlock(s),r=t.doc.children.some(e=>e.id===s);if(B(n)&&P(n)&&r&&void 0!==i&&f(i)>0)return this.dispatch(hn(t,ke(e,this.schemaRegistry))),!0;if(B(n)&&!P(n)){const n=t.transaction("paste"),s=W(t,n),i=n.build();if(this.dispatch(i),t=t.apply(i),s)return this.resolveAndInsertRichBlocks(e,t,s)}return this.resolveAndInsertRichBlocks(e,t,s)}resolveAndInsertRichBlocks(e,t,n){const s=[];for(const l of e){const e=fe(l,this.schemaRegistry);e&&s.push(be(e))}if(0===s.length)return!1;const i=t.selection,r=ue(t,n);if(r){const e=t.getBlock(r);if(this.cellRejects(e,s)){const e=me(t,n);return!!e&&this.insertNodes(s,t,e,e.anchorIndex+1,!1)}const i=ge(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=ve(t,n,this.schemaRegistry);if(!o)return!1;const a=R(i)&&"before"===i.side?0:1;return this.insertNodes(s,t,o,o.anchorIndex+a,!R(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(A(o.id,f(o))),this.dispatch(r.build()),!0}},En=class{element;getState;dispatch;fileHandlerRegistry;isReadOnly;getPasteInterceptors;handlePaste;htmlHandler;richBlockHandler;constructor(e,t){this.element=e,this.getState=t.getState,this.dispatch=t.dispatch,this.fileHandlerRegistry=t.fileHandlerRegistry,this.isReadOnly=t.isReadOnly??(()=>!1),this.getPasteInterceptors=t.getPasteInterceptors??(()=>[]),this.richBlockHandler=new Tn(t.getState,t.dispatch,t.schemaRegistry),this.htmlHandler=new xn(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(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)||this.htmlHandler.handleHTMLOrTextPaste(t,s)}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)}},Pn=class{compositionTracker;inputHandler;keyboardHandler;pasteHandler;clipboardHandler;constructor(e,t){this.compositionTracker=new on,this.inputHandler=new an(e,{getState:t.getState,dispatch:t.dispatch,syncSelection:t.syncSelection,inputRuleRegistry:t.inputRuleRegistry,isReadOnly:t.isReadOnly,compositionTracker:this.compositionTracker,getTextInputInterceptors:t.getTextInputInterceptors}),this.keyboardHandler=new cn(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 En(e,{getState:t.getState,dispatch:t.dispatch,schemaRegistry:t.schemaRegistry,fileHandlerRegistry:t.fileHandlerRegistry,isReadOnly:t.isReadOnly,getPasteInterceptors:t.getPasteInterceptors}),this.clipboardHandler=new rn(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()}},Mn=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}}},An=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}},Bn=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)Nn(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 Nn(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 Dn=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()}};function On(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 Ln(e,t,n){if(0===t.length)return e;const s=[...t].sort((e,t)=>On(e,n)-On(t,n));let i=e;for(let r=s.length-1;r>=0;r--){const e=s[r];if(!e)continue;const t=Hn(e,n);t.appendChild(i),i=t}return i}function Hn(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 zn=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(!B(n))return;if(!P(n))return;const s=document.createElement("span");s.setAttribute("data-cursor-wrapper","");const i=document.createTextNode("​"),r=Ln(i,t,this.registry);s.appendChild(r);const o=et();if(!o||0===o.rangeCount)return;let a;const l=nt(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)}},_n={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)}},Fn={error(){},warn(){},info(){},debug(){}};function Kn(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 $n=class{listeners=/* @__PURE__ */new Map;log;constructor(e=_n){this.log=Kn(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()}},jn=class{commands=/* @__PURE__ */new Map;readonlyBypassActive=!1;log;constructor(e=_n){this.log=Kn(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}},Vn=class{middlewares=[];middlewareSorted=null;pasteInterceptors=[];pasteInterceptorsSorted=null;textInputInterceptors=[];textInputInterceptorsSorted=null;log;constructor(e=_n){this.log=Kn(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 Un(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 qn(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 Wn(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 Gn(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 Qn(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)},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 Jn(e){return{getSchemaRegistry:()=>e.schemaRegistry,getKeymapRegistry:()=>e.keymapRegistry,getInputRuleRegistry:()=>e.inputRuleRegistry,getFileHandlerRegistry:()=>e.fileHandlerRegistry,getNodeViewRegistry:()=>e.nodeViewRegistry,getToolbarRegistry:()=>e.toolbarRegistry,getBlockTypePickerRegistry:()=>e.blockTypePickerRegistry}}var Xn=class{tracker;plugins=/* @__PURE__ */new Map;initOrder=[];startedInitOrder=[];initialized=!1;initializing=!1;readOnly=!1;log;constructor(e,t=_n){this.tracker=e,this.log=Kn(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=_e.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}},Yn=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}},Zn=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}},es=class{schemaRegistry=new Dt;keymapRegistry=new Mn;inputRuleRegistry=new An;fileHandlerRegistry=new Bn;nodeViewRegistry=new Dn;toolbarRegistry=new yt;blockTypePickerRegistry=new ft;logger;commandRegistry;serviceRegistry=new Zn;middlewareChain;eventBus;registrationTracker;lifecycle;constructor(e={}){this.logger=e.logger??_n,this.commandRegistry=new jn(this.logger),this.middlewareChain=new Vn(this.logger),this.eventBus=new $n(this.logger),this.registrationTracker=new Yn({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 Xn(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.fileHandlerRegistry.clear(),this.nodeViewRegistry.clear(),this.toolbarRegistry.clear(),this.blockTypePickerRegistry.clear()}createContext(e,t){const n=t.getCompositionState??(()=>ts),{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,...Un(e.pluginId,e.commands,t,e.executeCommand),...qn(e.services,t),...Wn(e,t),...Gn(e.schemaRegistry,t),...Qn(e.pluginId,e,t),...Jn(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,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}},ts={isComposing:!1,activeBlockId:null},ns={EN:"en",DE:"de",ES:"es",FR:"fr",ZH:"zh",RU:"ru",AR:"ar",HI:"hi",PT:"pt",BROWSER:"browser"},ss={paragraph:"Paragraph",heading:"Heading",code_block:"Code Block",blockquote:"Block Quote",list_item:"List Item",horizontal_rule:"Horizontal Rule",image:"Image",table:"Table"};function is(e,t){return"heading"===e&&t?.level?`Heading ${t.level}`:ss[e]??e}function rs(e,t){const n=t?.document??globalThis.document,s=t?.container??n.head;if(t?.id){const s=n.getElementById(t.id);if(s instanceof HTMLStyleElement)return s.textContent=e,t.nonce&&s.setAttribute("nonce",t.nonce),s}const i=n.createElement("style");return i.textContent=e,t?.id&&(i.id=t.id),t?.nonce&&i.setAttribute("nonce",t.nonce),s.appendChild(i),i}function os(e,t){const n=(t??globalThis.document).getElementById(e);n&&n.remove()}var as=/* @__PURE__ */new WeakSet;function ls(e,t){const n=t?.target??globalThis.document,s=new CSSStyleSheet;return s.replaceSync(e),as.add(s),t?.replace&&(n.adoptedStyleSheets=n.adoptedStyleSheets.filter(e=>!as.has(e))),n.adoptedStyleSheets=[...n.adoptedStyleSheets,s],s}function cs(e,t){const n=t??globalThis.document;n.adoptedStyleSheets=n.adoptedStyleSheets.filter(t=>t!==e)}function hs(e,t,n){const s=t?function(e,t){return{children:e.children.map(e=>ds(e,t))}}(e,t):e,i=t?Q(t):void 0;n(zt.create({doc:s,schema:i}))}function ds(e,n){const s=n.getNodeSpec(e.type);if(!s?.content||!((r=s.content).allow.length>0)||r.allow.includes("text"))return e;var r;if(w(e)){const t=e.children.length>0?e.children:void 0,n=d(Y("paragraph"),t);return d(e.type,[n],e.id,e.attrs)}const o=e.children.map(e=>i(e)||t(e)?e:ds(e,n));return d(e.type,o,e.id,e.attrs)}function ps(e){return e.doc.children.map(us).join("\n")}function us(e){return w(e)?h(e):a(e).map(us).join("\n")}function gs(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===f(t)}var ms=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??bt.Light)}"paper-size"===e&&(null===t?(n.applyPaperSize(void 0),this.config={...this.config,paperSize:void 0}):Tt(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??bt.Light}get isReadOnly(){return this.config.readonly??!1}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")))}},fs=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()}},ys=class{deps;handleSelectionChange;handleMousedown;handleDragover;handleDrop;handleCompositionStart;handleCompositionEnd;pendingNodeSelectionClear=!1;pendingGapCursorClear=!1;constructor(e){this.deps=e,this.handleCompositionStart=()=>{e.cursorWrapper.onCompositionStart(e.getState())},this.handleCompositionEnd=()=>{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(T(e.selection)&&!this.pendingNodeSelectionClear)return;if(R(e.selection)&&!this.pendingGapCursorClear)return;this.pendingNodeSelectionClear=!1,this.pendingGapCursorClear=!1;const t=Ze(this.deps.contentElement);if(!t)return;if(C(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)&&this.syncSelectionFromDOM()}onMousedown(e){if(this.deps.isUpdating())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=M(te(n.getAttribute("data-block-id")??""),se(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===f(o)){const n=t.transaction("input").setSelection(A(s,0)).build();return this.deps.dispatch(n),void e.preventDefault()}e.preventDefault(),this.deps.contentElement.focus();const a=S(),l=t.transaction("input").insertNode([],t.doc.children.length,m(a)).setSelection(A(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=je(this.deps.contentElement.getRootNode(),e,t);return n&&this.deps.contentElement.contains(n.node)?st(this.deps.contentElement,n.node,n.offset):null}markPendingSelectionClear(){const e=this.deps.getState();T(e.selection)&&(this.pendingNodeSelectionClear=!0),R(e.selection)&&(this.pendingGapCursorClear=!0)}},Ss=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!T(t.selection)&&!R(t.selection)&&!!P(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=Ve(t,n);if(s)return this.deps.dispatch(s),this.validateSelectionAfterInlineSkip(),!0;if(!We(this.deps.contentElement,t,e))return!1;const i=Ue(t,n);return!!i&&(this.deps.dispatch(i),!0)}resolveLogicalDirection(e,t){const n=e.selection;if(!B(n))return t;const s=this.deps.contentElement.querySelector(`[data-block-id="${n.anchor.blockId}"]`);return s instanceof HTMLElement&&"rtl"===Ye(s)?"left"===t?"right":"left":t}handleVerticalArrow(e){const t=this.deps.getState(),n=this.deps.contentElement.ownerDocument.getSelection?.()??null,s=n?Qe(n,this.deps.contentElement):null;if(!We(this.deps.contentElement,t,e,s))return!1;null===this.goalColumn&&s&&(this.goalColumn=s.left),this.preserveGoalColumn=!0;const i=Ge(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=Ze(this.deps.contentElement);t&&C(t,e.selection)||tt(this.deps.contentElement,e.selection)}};function ks(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 ws(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 vs(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 bs(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 Rs(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 Is(e,t,n){if(!n)return;const s=ks(t,n);for(const i of s){const t=e.querySelector(`[data-block-id="${i.blockIds[0]}"]`);if(!t)continue;const n=vs(i.spec);t.before(n);for(const s of i.blockIds){const t=e.querySelector(`[data-block-id="${s}"]`);t&&n.appendChild(t)}}}function Cs(e){e.parentElement?.removeChild(e)}function xs(e,t,n){const s=e.parentElement;s?s.replaceChild(t,e):n.replaceChild(t,e)}function Ts(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 Es(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 Ps(e){let t=e.replace(/ {2}/g,"  ");return t.endsWith(" ")&&(t=`${t.slice(0,-1)} `),t.startsWith(" ")&&(t=` ${t.slice(1)}`),t}function Ms(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&&ht(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 As(e,t,n){const s=n?.decorations?.findNode(t);if(s&&0!==s.length)for(const i of s){if(i.attrs.class)for(const t of i.attrs.class.split(" "))t&&e.classList.add(t);i.attrs.style&&mt(e,i.attrs.style)}}function Bs(e,t,n,s){const i=s?.decorations?.findInline(e.id),r=s?.nodeViewRegistry;if(r&&t&&n&&s?.getState&&s?.dispatch){const o=r.getNodeViewFactory(e.type);if(o){const r=o(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"),w(e)&&r.contentDOM)Ns(r.contentDOM,e,t,i);else{const i=a(e),o=/* @__PURE__ */new Map;for(const e of i){const i=r.getContentDOM?.(e.id)??r.contentDOM;if(i){const r=Bs(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)Is(e,n,t)}return r.dom.setAttribute("data-block-type",e.type),As(r.dom,e.id,s),r.dom}}if(t){const r=t.getNodeSpec(e.type);if(r){const o=r.toDOM(e);if(r.isVoid&&o.setAttribute("data-void","true"),r.selectable&&o.setAttribute("data-selectable","true"),!r.isVoid)if(w(e))Ns(o,e,t,i);else{const i=a(e);for(const e of i){const i=Bs(e,t,n,s);o.appendChild(i)}Is(o,i,t)}return o.setAttribute("data-block-type",e.type),As(o,e.id,s),o}}return function(e,t,n){const s=ne("p",e.id);return s.setAttribute("data-block-type",e.type),Ns(s,e,t,n),s}(e,t,i)}function Ns(e,n,s,r){for(const t of e.querySelectorAll("[data-cursor-wrapper]"))t.remove();const o=k(n);if(1===o.length&&i(o[0])&&""===o[0].text)return void e.appendChild(document.createElement("br"));if(r&&0!==r.length)!function(e,n,s,i){let r=0;for(const o of n){if(t(o)){e.appendChild(Es(o,i)),r+=1;continue}const n=r,a=r+o.text.length;if(0===o.text.length){r=a;continue}const l=/* @__PURE__ */new Set;l.add(n),l.add(a);for(const e of s){const t=Math.max(n,e.from),s=Math.min(a,e.to);t>n&&t<a&&l.add(t),s>n&&s<a&&l.add(s)}const c=[...l].sort((e,t)=>e-t);for(let t=0;t<c.length-1;t++){const r=c[t],a=c[t+1];if(void 0===r||void 0===a||r>=a)continue;const l=r-n,h=a-n,d=o.text.slice(l,h),p=[];for(const e of s)e.from<=r&&e.to>=a&&p.push(e);let u=Ln(document.createTextNode(Ps(d)),o.marks,i);for(const e of p){const t=Ms(e.attrs);t.appendChild(u),u=t}e.appendChild(u)}r=a}}(e,o,r,s);else for(const t of o)i(t)?e.appendChild(Ds(t,s)):e.appendChild(Es(t,s));const a=o[o.length-1];a&&t(a)&&"hard_break"===a.inlineType&&e.appendChild(document.createElement("br"))}function Ds(e,t){return""===e.text?document.createTextNode(""):Ln(document.createTextNode(Ps(e.text)),e.marks,t)}function Os(e,t,n,s){const i=t?.doc.children??[],r=n.doc.children,o=s?.registry,a=s?.nodeViews,l=null!=s?.compositionBlockId,c=/* @__PURE__ */new Map;for(const m 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=m.getAttribute("data-block-id");e&&c.set(te(e),m)}const h=new Set(r.map(e=>e.id));for(const[m,f]of c)if(!h.has(m)){Cs(f),c.delete(m);const e=a?.get(m);e&&(e.destroy?.(),a?.delete(m))}const d=/* @__PURE__ */new Map;for(const m of i)d.set(m.id,m);let p=null;const u=s?.selectedNodeId,g=s?.previousSelectedNodeId;for(const m of r){const t=c.get(m.id),n=d.get(m.id);if(s?.compositionBlockId===m.id&&t){p=t;continue}const i=s?.oldDecorations?.find(m.id),r=s?.decorations?.find(m.id);if(t&&n&&!Ls(n,m,i,r))p=t;else if(t){const n=a?.get(m.id);if(n){if(n.update?.(m)){if(w(m)&&n.contentDOM){n.contentDOM.textContent="";const e=s?.decorations?.findInline(m.id);Ns(n.contentDOM,m,o,e)}p=n.dom;continue}n.destroy?.(),a?.delete(m.id)}const i=Bs(m,o,a,s);xs(t,i,e),p=i}else{const t=Bs(m,o,a,s);Ts(e,p,t),p=t}if(u===m.id){const e=a?.get(m.id);if(e)e.selectNode?.();else{const e=c.get(m.id)??p;e instanceof HTMLElement&&e.classList.add("notectl-node-selected")}}else if(g===m.id){const e=a?.get(m.id);if(e)e.deselectNode?.();else{const e=c.get(m.id)??p;e instanceof HTMLElement&&e.classList.remove("notectl-node-selected")}}}if(g&&g!==u){const e=a?.get(g);e&&!h.has(g)&&e.deselectNode?.()}if(u&&!h.has(u)){const e=a?.get(u);e&&e.selectNode?.()}!l&&o&&function(e,t,n){const s=ks(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(te(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:te(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&&ws(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):bs(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:vs(t.spec))}i||(i=vs(t.spec)),a.add(i),ws(i,t.spec),i.parentNode!==e?l?l.after(i):e.insertBefore(i,e.firstChild):bs(e,i,l),Rs(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,o)}function Ls(e,s,r,o){if(e.type!==s.type)return!0;if(e.children.length!==s.children.length)return!0;const a=e.attrs,l=s.attrs;if(a!==l){if(!a||!l)return!0;const e=Object.keys(a),t=Object.keys(l);if(e.length!==t.length)return!0;for(const n of e)if(a[n]!==l[n])return!0}for(let d=0;d<e.children.length;d++){const r=e.children[d],o=s.children[d];if(!r||!o)return!0;if(i(r)&&i(o)){if(r.text!==o.text)return!0;if(!n(r.marks,o.marks))return!0}else if(t(r)&&t(o)){if(r.inlineType!==o.inlineType)return!0;if(!Hs(r.attrs,o.attrs))return!0}else{if(i(r)||i(o)||t(r)||t(o))return!0;if(Ls(r,o))return!0}}const c=r??[],h=o??[];return c!==h&&!Oe(c,h)}function Hs(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=_e.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 Wt({maxDepth:t.maxHistoryDepth??100}),t.onStateChange&&this.stateChangeCallbacks.push(t.onStateChange),this.cursorWrapper=new zn(e,this.schemaRegistry),this.navigation=new Ss({contentElement:e,getState:()=>this.state,dispatch:e=>this.dispatch(e),keymapRegistry:t.keymapRegistry}),this.events=new ys({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)??_e.empty,Os(e,null,this.state,{...this.reconcileOptions(),decorations:this.decorations}),tt(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||Ut(t))&&this.history.push(t);const i=this.getDecorations?.(e,t)??_e.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()&&!qt(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:Pe.empty,forwardStepMaps:[],metadata:{origin:"api",timestamp:Date.now()}},i=this.getDecorations?.(n,s)??_e.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,Os(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||tt(this.contentElement,t.selection)}reconcileOptions(e){const t=T(this.state.selection)?this.state.selection.nodeId:void 0,n=e&&T(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()}},_s={ariaLabel:"Rich text editor",ariaDescription:"Press Escape to exit the editor",defaultPlaceholder:"Start typing..."},Fs=/* #__PURE__ */Object.assign({"./locales/ar.ts":()=>import("./ar-BTShmP2E.mjs"),"./locales/de.ts":()=>import("./de-C--bRmjW.mjs"),"./locales/es.ts":()=>import("./es-DFUVd7eO.mjs"),"./locales/fr.ts":()=>import("./fr-BaXKyPmX.mjs"),"./locales/hi.ts":()=>import("./hi-aH9HZG23.mjs"),"./locales/pt.ts":()=>import("./pt-Hy-0Xnnc.mjs"),"./locales/ru.ts":()=>import("./ru-BFpEOrVp.mjs"),"./locales/zh.ts":()=>import("./zh-BjoyjClN.mjs")}),Ks=["\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"),$s=null,js=class{themeStyleSheet=new CSSStyleSheet;systemThemeQuery=null;systemThemeHandler=null;pluginSheets=[];runtimeSheets=[];shadow;constructor(e){this.shadow=e}apply(e){if(this.cleanupSystemThemeListener(),e===bt.System){this.setupSystemThemeListener();const e=kt(this.getSystemTheme());this.setThemeStyleSheet(e)}else this.setThemeStyleSheet(kt(e))}setPluginStyleSheets(e){this.pluginSheets=e,this.refreshAdoptedStyleSheets()}setRuntimeStyleSheets(e){this.runtimeSheets=e,this.refreshAdoptedStyleSheets()}destroy(){this.cleanupSystemThemeListener()}setThemeStyleSheet(e){this.themeStyleSheet.replaceSync(vt(e)),this.refreshAdoptedStyleSheets()}refreshAdoptedStyleSheets(){this.shadow.adoptedStyleSheets=[this.themeStyleSheet,($s||($s=new CSSStyleSheet).replaceSync(Ks),$s),...this.pluginSheets,...this.runtimeSheets]}setupSystemThemeListener(){this.systemThemeQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.systemThemeHandler=e=>{const t=kt(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?bt.Dark:bt.Light}},Vs=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=It(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&&(gt(this.surface,"width",`${this.currentPaperWidthPx}px`),gt(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,gt(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 gt(this.surface,"marginBottom","");const t=this.surface.scrollHeight,n=t*e-t;gt(this.surface,"marginBottom",`${n}px`)}};function Us(e){return!Array.isArray(e)}function qs(e){if(Array.isArray(e))return{plugins:e,label:void 0};const t=e;return{plugins:t.plugins,label:t.label}}var Ws=class{deps;cfg;themeController=null;domElements=null;paperLayout=null;pluginManager=null;inputManager=null;view=null;cleanedUp=!1;constructor(e){this.deps=e,this.cfg=e.config}async run(){try{if(this.setupTheme(),this.isCancelled())return this.abort();const e=await async function(e){const t=new Et(e.locale??"browser").getLocale();return"en"===t?_s:await async function(e){return Mt(Fs,e,_s)}(t)}(this.cfg);if(this.isCancelled())return this.abort();if(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,release:()=>{this.view=null}}}catch(e){throw await this.cleanup(),e}}setupTheme(){this.themeController=new js(this.deps.shadow),this.deps.styleCoordinator.setup(this.deps.shadow,this.cfg.styleNonce,this.themeController),this.themeController.apply(this.cfg.theme??bt.Light)}setupDOM(e){this.domElements=function(e){const t=e.locale??_s,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 Vs(this.domElements.wrapper,this.domElements.content),this.paperLayout.apply(this.cfg.paperSize))}setupPlugins(){if(this.domElements){this.pluginManager=new es({logger:this.cfg.logger}),this.pluginManager.registerService(Pt,new Et(this.cfg.locale??"browser")),Ot(this.pluginManager.schemaRegistry),function(e,t){if(!t)return;const n=Us(t)?t.groups:t,s=Us(t)?t.overflow:void 0,i=[];for(const o of n){const{plugins:t,label:n}=qs(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 St(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 Bt(n))}(e,t),function(e){void 0===e.get("caret-navigation")&&e.register(new qe)}(e),function(e){void 0===e.get("gap-cursor")&&e.register(new At)}(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:t=>{e.announcer&&(e.announcer.textContent=t)},hasAnnouncement:()=>!!e.announcer?.textContent,getCompositionState:()=>{const e=this.inputManager?.compositionTracker;return e||Gs},onBeforeReady:()=>this.createInputAndView(e,t,n)})}createInputAndView(e,t,n){if(this.isCancelled()||!this.pluginManager||!this.themeController)return;const s=Q(t.schemaRegistry),i=zt.create({schema:s});this.inputManager=new Pn(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,getPasteInterceptors:()=>t.getPasteInterceptors(),getTextInputInterceptors:()=>t.getTextInputInterceptors(),getTextDirection:Ye,navigateFromGapCursor:$e}),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)??_e.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),Qs(s.content,t.doc),r.emit("stateChange",{oldState:e,newState:t,transaction:n}),C(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 is(s.nodeType,s.attrs);for(const s of t.schema.markTypes){const n=Z(s),i=K(e,n),r=K(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}),Qs(e.content,this.view.getState().doc);const r=t.getPluginStyleSheets();r.length>0&&n.setPluginStyleSheets(r)}finalizeSetup(e,t){if(this.cfg.readonly&&e.setReadOnly(!0),e.onEvent(Ct,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}},Gs={isComposing:!1,activeBlockId:null};function Qs(e,t){e.classList.toggle("notectl-content--empty",gs(t))}var Js=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}},Xs=class{runtimeStyleSheet=null;setup(e,t,n){pt(e),this.runtimeStyleSheet=ut(),n?.setRuntimeStyleSheets(this.runtimeStyleSheet?[this.runtimeStyleSheet]:[]),dt(e,{nonce:t,sheet:this.runtimeStyleSheet})}teardown(e,t){e&&pt(e),this.runtimeStyleSheet=null,t?.setRuntimeStyleSheets([])}},Ys=class extends HTMLElement{view=null;inputManager=null;pluginManager=null;domElements=null;configController=new ms;events=new fs;lifecycle=new Js;styleCoordinator=new Xs;themeController=null;paperLayout=null;pendingInitPromise=null;cancelPendingInit=null;autoInitToken=0;autoInitQueued=!1;initVersion=0;releaseInit=null;constructor(){super(),this.attachShadow({mode:"open"})}static get observedAttributes(){return["placeholder","readonly","theme","paper-size","dir"]}connectedCallback(){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(this.cancelAutoInit(),!this.lifecycle.markInitialized())return;e&&this.configController.setConfig(e);const t=this.shadowRoot;if(!t){const e=/* @__PURE__ */new Error("Editor shadow root not available.");throw this.lifecycle.failReady(e),e}const n=++this.initVersion;let s=!1;this.cancelPendingInit=()=>{s=!0};const i=this.lifecycle.consumePreInitPlugins(),r=async function(e){return new Ws(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.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(),hs(e,this.pluginManager?.schemaRegistry,e=>this.replaceState(e))}async getContentHTML(e){if(!this.view)throw new Error("Editor not initialized");return function(e,t,n){const s=e.doc;if("classes"===n?.cssMode){const e=it(s,t,n);return n.pretty?{html:re(e.html),css:e.css,styleMap:e.styleMap}:e}const i=at(s,t,n);return n?.pretty?re(i):i}(this.view.getState(),this.pluginManager?.schemaRegistry,e)}async setContentHTML(e,t){return this.assertInitialized(),function(e,t,n,s){hs(ct(e,t,s),t,n)}(e,this.pluginManager?.schemaRegistry,e=>this.replaceState(e),t)}getText(){if(!this.view)throw new Error("Editor not initialized");return ps(this.view.getState())}setText(e){this.assertInitialized(),this.view&&function(e,t,n,s){if(e===ps(t))return;const i=e.split("\n"),r=t.doc.children.map(e=>e.id),a=i.map((e,t)=>d(Y("paragraph"),[o(e)],r[t])),l=n?Q(n):void 0;s(zt.create({doc:{children:a},schema:l}))}(e,this.view.getState(),this.pluginManager?.schemaRegistry,e=>this.replaceState(e))}isEmpty(){return!this.view||gs(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=j(this.view.getState());this.dispatch(e)}};can(){const e=this.view?.getState().schema,t=this.configController.isReadOnly;return{toggleBold:()=>!t&&!!e&&D(e,"bold"),toggleItalic:()=>!t&&!!e&&D(e,"italic"),toggleUnderline:()=>!t&&!!e&&D(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 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.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(()=>{})}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 Vs(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 Zs(e){const t=document.createElement("notectl-editor");return await t.init(e),t}"undefined"==typeof customElements||customElements.get("notectl-editor")||customElements.define("notectl-editor",Ys);export{Ot as A,Wt as C,Vt as D,jt as E,zt as O,tn as S,Ut as T,An as _,cs as a,on as b,ns as c,_n as d,Kn as f,Bn as g,Dn as h,rs as i,Dt as j,Lt as k,es as l,zn as m,Zs as n,os as o,Fn as p,ls as r,is as s,Ys as t,$n as u,Mn as v,qt as w,rn as x,Pn as y};
2
- //# sourceMappingURL=src-C5Lblp2i.mjs.map
1
+ import{A as e,C as t,E as n,S as s,T as i,a as r,c as o,d as a,f as l,g as c,h,i as d,j as p,l as u,m as g,o as m,p as f,s as y,u as S,v as k,w,x as v}from"./Document-r7vLOAGA.mjs";import{a as b,c as R,d as I,f as C,i as x,l as T,n as E,o as P,r as M,t as A,u as B}from"./Selection-HYoVFpAx.mjs";import{C as N,S as D,b as O,c as L,d as H,f as z,i as _,l as F,m as K,n as $,o as j,p as V,r as U,s as q,t as W,u as G,w as Q,x as J,y as X}from"./Commands-BIIpx_Zd.mjs";import{a as Y,i as Z,r as ee,t as te}from"./TypeBrands-Ch9856Gb.mjs";import{n as ne,t as se}from"./DomUtils-Bf7JLFlx.mjs";import{a as ie,i as re,t as oe}from"./HTMLUtils-C6B4UT00.mjs";import{n as ae,o as le,r as ce,s as he}from"./NodeResolver-ChgLF_IP.mjs";import{C as de,S as pe,a as ue,d as ge,f as me,g as fe,h as ye,i as Se,m as ke,n as we,p as ve,r as be,t as Re,u as Ie,w as Ce,x as xe,y as Te}from"./BlockInsertion-6rR9tIGP.mjs";import{C as Ee,_ as Pe,c as Me,d as Ae,f as Be,h as Ne,m as De,n as Oe,o as Le,p as He,s as ze,t as _e,u as Fe,y as Ke}from"./Decoration-ZeyVfwJB.mjs";import{t as $e}from"./GapCursorNavigation-ycNzuQVH.mjs";import{C as je,S as Ve,b as Ue,t as qe,v as We,x as Ge,y as Qe}from"./CaretNavigationPlugin-Bb7W_FMg.mjs";import{i as Je,t as Xe}from"./NodeSelectionCommands-Dj4VxLdD.mjs";import{t as Ye}from"./Platform-ByobkiCc.mjs";import{a as Ze,n as et,o as tt,r as nt,t as st}from"./SelectionSync-BSHIw1EE.mjs";import{a as it,c as rt,n as ot,o as at,s as lt,t as ct}from"./DocumentParser-CcTSeT1B.mjs";import{c as ht,i as dt,l as pt,n as ut,s as gt,t as mt}from"./StyleRuntime-BAutwDZT.mjs";import{t as ft}from"./BlockTypePickerRegistry-BTET9jM-.mjs";import{o as yt,t as St}from"./ToolbarPlugin-B5UUc6dY.mjs";import{_ as kt,a as wt,f as vt,h as bt,i as Rt,l as It,n as Ct,o as xt,u as Tt}from"./PrintTypes-WdtgSj74.mjs";import{c as Et,l as Pt,s as Mt}from"./PluginHelpers-D4quRJ5a.mjs";import{t as At}from"./GapCursorPlugin-B29ieXel.mjs";import{t as Bt}from"./TextFormattingPlugin-CpyZgtLi.mjs";import Nt from"dompurify";var Dt=class{_nodeSpecs=/* @__PURE__ */new Map;_markSpecs=/* @__PURE__ */new Map;_inlineNodeSpecs=/* @__PURE__ */new Map;registerNodeSpec(e){if(this._nodeSpecs.has(e.type))throw new Error(`NodeSpec for type "${e.type}" is already registered.`);this._nodeSpecs.set(e.type,e)}getNodeSpec(e){return this._nodeSpecs.get(e)}removeNodeSpec(e){this._nodeSpecs.delete(e)}getNodeTypes(){return[...this._nodeSpecs.keys()]}registerMarkSpec(e){if(this._markSpecs.has(e.type))throw new Error(`MarkSpec for type "${e.type}" is already registered.`);this._markSpecs.set(e.type,e)}getMarkSpec(e){return this._markSpecs.get(e)}removeMarkSpec(e){this._markSpecs.delete(e)}getMarkTypes(){return[...this._markSpecs.keys()]}registerInlineNodeSpec(e){if(this._inlineNodeSpecs.has(e.type))throw new Error(`InlineNodeSpec for type "${e.type}" is already registered.`);this._inlineNodeSpecs.set(e.type,e)}getInlineNodeSpec(e){return this._inlineNodeSpecs.get(e)}removeInlineNodeSpec(e){this._inlineNodeSpecs.delete(e)}getInlineNodeTypes(){return[...this._inlineNodeSpecs.keys()]}getBlockParseRules(){return this.collectParseRules(this._nodeSpecs)}getInlineParseRules(){return this.collectParseRules(this._inlineNodeSpecs)}getMarkParseRules(){return this.collectParseRules(this._markSpecs)}getAllowedTags(){return[...this.collectSanitizeValues(new Set(["p","br","div","span"]),e=>e.sanitize?.tags)]}getAllowedAttrs(){return[...this.collectSanitizeValues(new Set(["style","dir"]),e=>e.sanitize?.attrs)]}collectParseRules(e){const t=[];for(const[n,s]of e)if(s.parseHTML)for(const e of s.parseHTML)t.push({rule:e,type:n});return t.sort((e,t)=>(t.rule.priority??50)-(e.rule.priority??50))}collectSanitizeValues(e,t){const n=[this._nodeSpecs,this._inlineNodeSpecs,this._markSpecs];for(const s of n)for(const n of s.values()){const s=t(n);if(s)for(const t of s)e.add(t)}return e}clear(){this._nodeSpecs.clear(),this._markSpecs.clear(),this._inlineNodeSpecs.clear()}};function Ot(e){e.registerNodeSpec({type:"paragraph",group:"block",content:{allow:["text"]},toDOM:e=>ne("p",e.id),toHTML:(e,t)=>`<p>${t||"<br>"}</p>`,parseHTML:[{tag:"p"},{tag:"div",priority:10}],sanitize:{tags:["p"]}})}var Lt=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=ae(this.workingDoc,e);o=r?l(r,t,n):[p(s,[...i])]}else o=[p(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=h(i).slice(t,n),o=g(i,t),a=l(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){const r={type:"mergeBlocks",targetBlockId:e,sourceBlockId:t,targetLengthBefore:n,...void 0!==s?{sourceType:s}:{},...i?{sourceAttrs:i}:{}};return this.steps.push(r),this.advanceDoc(r),this}mergeBlocksAt(e,t){const n=this.requireDoc("mergeBlocksAt"),s=this.requireBlock(n,e),i=this.requireBlock(n,t),r=f(s);return this.mergeBlocks(e,t,r,i.type,i.attrs)}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=De(k(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=Ne(k(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=le(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}setNodeAttr(e,t){const n=he(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,n,s){const i=this.requireDoc("setInlineNodeAttr"),r=k(this.requireBlock(i,e));let o=0;for(const a of r){if(t(a)&&o===n){const t={type:"setInlineNodeAttr",blockId:e,offset:n,attrs:s,previousAttrs:a.attrs};return this.steps.push(t),this.advanceDoc(t),this}o+=t(a)?1:a.text.length}throw new Error(`No InlineNode at offset ${n} in block "${e}".`)}readonlyAllowed(){return this._readonlyAllowed=!0,this}setSelection(e){return this.selection=e,this}setNodeSelection(e,t){return this.selection=M(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:Pe.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=ae(e,t);if(!n)throw new Error(`Block "${t}" not found in working document.`);return n}tryGetBlock(e){return this.workingDoc?ae(this.workingDoc,e)??null:null}advanceDoc(e){const t=this.workingDoc??Ht;this.stepMaps.push(ze(t,e)),this.workingDoc&&(this.workingDoc=Le(this.workingDoc,e))}},Ht={children:[]},zt=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??J(),s=t?.doc??r(),i=$t(s.children);return new e(s,t?.selection??A(i?i.id:te(""),0),null,n)}transaction(e="api"){return new Lt(this.selection,this.storedMarks,e,this.doc)}apply(t){let n=this.doc;for(const e of t.steps)n=Le(n,e);const s=Ft(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 i of n)s(i)&&(t.set(i.id,i),e(i.children))}(e.children),t}(this.doc),this._blockMap.get(e)}getBlockOrder(){return this._blockOrder??=function(e){const t=[];return function e(n){for(const i of n)s(i)&&(w(i)?t.push(i.id):e(i.children))}(e.children),t}(this.doc),this._blockOrder}getNodePath(e){return ce(this.doc,e)}getParent(e){const t=ce(this.doc,e);if(!t||t.length<=1)return;const n=t[t.length-2];return n?ae(this.doc,n):void 0}withSelection(t){const n=Ft(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??J())}};function _t(e,t){const n=ae(e,t.blockId);if(n){const e=f(n);return t.offset>e?x(t.blockId,e,t.path):t}const s=e.children[0];return s?x(s.id,0):t}function Ft(e,t){if(T(t))return ae(e,t.nodeId)?t:Kt(e,t);if(R(t))return ae(e,t.blockId)?t:Kt(e,t);const n=_t(e,t.anchor),s=_t(e,t.head);return n===t.anchor&&s===t.head?t:b(n,s)}function Kt(e,t){const n=$t(e.children);return n?A(n.id,0):t}function $t(e){for(const t of e){if(!s(t))continue;if(w(t))return t;const e=$t(t.children);if(e)return e}return null}function jt(e,t){return t.isEmpty?e:T(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:M(e.nodeId,e.path)}(e,t):R(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:E(e.blockId,e.side,e.path)}(e,t):Vt(e,t)}function Vt(e,t){if(P(e)){const n=t.map(e.anchor,-1);return n===e.anchor?e:A(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:b(n,s)}function Ut(e){for(const t of e.steps)if("setStoredMarks"!==t.type)return!1;return!0}function qt(e){return!!e.metadata.readonlyAllowed||Ut(e)}var Wt=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:Pe.empty}),this.lastOrigin=e.metadata.origin,this.redoStack=[];this.undoStack.length>this.maxDepth;)this.undoStack.shift()}recordIntervening(e){e.isEmpty||(Jt(this.undoStack,e),Jt(this.redoStack,e))}undo(e){const t=this.undoStack.pop();if(!t)return null;const n=Gt(t,e,"undo");return null===n?(this.lastOrigin=null,null):(this.redoStack.push({transactions:[n.transaction],timestamp:Date.now(),interveningMapping:Pe.empty}),this.lastOrigin=null,{state:n.newState,transaction:n.transaction})}redo(e){const t=this.redoStack.pop();if(!t)return null;const n=Gt(t,e,"redo");return null===n?(this.lastOrigin=null,null):(this.undoStack.push({transactions:[n.transaction],timestamp:Date.now(),interveningMapping:Pe.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 Gt(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=Fe(Me(n),s,i);if(null===l)return null;const c=ze(i,l);r.push(l),o.push(c),i=Le(i,l),s=Qt(a,s,c)}}const a=function(e){const t=e.transactions[0];return t?Ae(t):null}(e),l={steps:r,selectionBefore:t.selection,selectionAfter:t.selection,storedMarksAfter:a,mapping:Pe.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=jt(h.selectionBefore,s);null!==e&&(c=c.withSelection(e))}return{newState:c,transaction:{...l,selectionAfter:c.selection}}}function Qt(e,t,n){return t.isEmpty&&Ee(Ke(e),n)?t:Pe.from([e]).appendMapping(t).appendMap(n)}function Jt(e,t){for(let n=0;n<e.length;n++){const s=e[n];s&&(e[n]={...s,interveningMapping:s.interveningMapping.appendMapping(t)})}}var Xt={Period:".",Comma:",",Slash:"/",Semicolon:";",Quote:"'",BracketLeft:"[",BracketRight:"]",Backslash:"\\",Minus:"-",Equal:"=",Backquote:"`"},Yt={1:"!",2:"@",3:"#",4:"$",5:"%",6:"^",7:"&",8:"*",9:"(",0:")","`":"~","-":"_","=":"+","[":"{","]":"}","\\":"|",";":":","'":'"',",":"<",".":">","/":"?"},Zt=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(Xt))e.set(t,n);return e}();function en(e){const t=[];return(e.metaKey||e.ctrlKey)&&t.push("Mod"),e.shiftKey&&t.push("Shift"),e.altKey&&t.push("Alt"),t}function tn(e){const t=en(e);let n=e.key;return" "===n?n="Space":1===n.length&&(n=n.toUpperCase()),t.push(n),t.join("-")}function nn(e){return e.ctrlKey||e.metaKey?e.ctrlKey&&e.altKey&&!e.metaKey?null:Zt.get(e.code)??null:null}function sn(t,n){if(w(t))return n.selectedLeafIds.has(t.id)?function(t,n){const s=f(t),i=t.id===n.firstBlockId?n.firstOffset:0,r=t.id===n.lastBlockId?n.lastOffset:s;if(0===i&&r===s)return t;const o=e(l(t,i,r));return{...t,children:o}}(t,n):null;const s=a(t),i=[];let r=s.length!==t.children.length;for(const e of s){const t=sn(e,n);t?(i.push(t),t!==e&&(r=!0)):r=!0}return 0===i.length?null:r?{...t,children:i}:t}var rn=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){this.syncSelection?.();const t=this.getState(),n=t.selection;if(R(n))return;if(B(n)&&P(n))return;e.preventDefault();const s=e.clipboardData;s&&(T(n)?this.writeNodeSelectionToClipboard(s,t):this.writeTextSelectionToClipboard(s,t))}onCut(e){if(this.isReadOnly())return;this.syncSelection?.();const t=this.getState(),n=t.selection;if(R(n))return;if(B(n)&&P(n))return;e.preventDefault();const s=e.clipboardData;if(s)if(T(n)){this.writeNodeSelectionToClipboard(s,t);const e=Xe(t,n);e&&this.dispatch(e)}else{this.writeTextSelectionToClipboard(s,t);const e=$(t);e&&this.dispatch(e)}}writeNodeSelectionToClipboard(e,t){const n=t.selection;if(!T(n))return;const s=t.getBlock(n.nodeId);if(!s)return;const i={type:s.type,...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",r.toHTML(s,""));const o=s.attrs,a="string"==typeof o?.alt?o.alt:"";e.setData("text/plain",a)}writeTextSelectionToClipboard(e,t){const n=t.selection;if(T(n))return;if(R(n))return;if(P(n))return;if(this.selectionRequiresDocumentSerializer(t))return void this.writeCompositeSelectionToClipboard(e,t);const s=t.getBlockOrder(),i=I(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=f(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,...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=lt(this.schemaRegistry),a=r!==o,h=l.some(e=>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||P(t))return!1;const n=I(t,e.getBlockOrder()),s=ce(e.doc,n.from.blockId),i=ce(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||w(t))}const r=e.doc.children.findIndex(e=>e.id===s[0]),o=e.doc.children.findIndex(e=>e.id===i[0]);for(let a=r;a<=o;a++){const t=e.doc.children[a];if(t){if(!w(t))return!0;if((this.schemaRegistry?.getNodeSpec(t.type))?.isVoid)return!0}}return!1}getTextSelection(e){const t=e.selection;if(B(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=I(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:f(n);a.push(this.extractPlainTextForRange(n,c,h))}if(e.setData("text/plain",a.join("\n")),this.schemaRegistry){const s=function(e,t){const n=e.getBlockOrder(),s=I(t,n),i=n.indexOf(s.from.blockId),r=n.indexOf(s.to.blockId);if(-1===i||-1===r||i>r)return{children:[]};const o=e.getNodePath(s.from.blockId),a=e.getNodePath(s.to.blockId),l=o?.[0],c=a?.[0];if(!l||!c)return{children:[]};const h=e.doc.children.findIndex(e=>e.id===l),d=e.doc.children.findIndex(e=>e.id===c);if(-1===h||-1===d||h>d)return{children:[]};const p={firstBlockId:s.from.blockId,firstOffset:s.from.offset,lastBlockId:s.to.blockId,lastOffset:s.to.offset,selectedLeafIds:new Set(n.slice(i,r+1))},u=[];for(let g=h;g<=d;g++){const t=e.doc.children[g];if(!t)continue;const n=sn(t,p);n&&u.push(n)}return{children:u}}(t,n);if(s.children.length>0){const t=at(s,this.schemaRegistry);e.setData("text/html",t)}}}serializeBlockRangeToHTML(e,t,n,s){const i=[];return u(e,t,n,{onText:(e,t)=>{this.schemaRegistry&&i.push(rt(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 u(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=this.serializeBlockRangeToHTML(e,n,a,t),h=this.schemaRegistry?.getNodeSpec(e.type);if(h?.wrapper){const t=h.wrapper(e).tag;i!==t&&(o(),i=t),h.toHTML?r.push(h.toHTML(e,c)):r.push(`<li>${c}</li>`)}else o(),h?.toHTML?s.push(h.toHTML(e,c)):s.push(`<p>${c}</p>`)}o();const a=JSON.stringify(n).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;");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)}},on=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}},an=class{element;getState;dispatch;syncSelection;inputRuleRegistry;isReadOnly;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.compositionTracker=t.compositionTracker??new on,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(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)??_(t,e.data,"input"));break;case"insertFromComposition":e.data&&(this.compositionCommitHandled=!0,n=this.runTextInputInterceptors(e.data,t)??_(t,e.data,"input"));break;case"insertParagraph":n=q(t);break;case"insertLineBreak":n=U(t);break;case"deleteContentBackward":n=L(t);break;case"deleteContentForward":n=F(t);break;case"deleteWordBackward":n=z(t);break;case"deleteWordForward":n=V(t);break;case"deleteSoftLineBackward":n=G(t);break;case"deleteSoftLineForward":n=H(t)}n&&(this.dispatch(n),"insertText"!==e.inputType&&"insertReplacementText"!==e.inputType||this.checkInputRules())}onCompositionStart(e){const t=this.getState();B(t.selection)&&(this.compositionCommitHandled=!1,this.compositionTracker.start(t.selection.anchor.blockId))}onCompositionEnd(e){if(this.compositionTracker.end(),this.isReadOnly())return;if(this.compositionCommitHandled)return void(this.compositionCommitHandled=!1);const t=e.data;if(!t)return;const n=_(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.inputRuleRegistry)return;const e=this.inputRuleRegistry.getInputRules();if(0===e.length)return;const t=this.getState();if(!B(t.selection))return;const{anchor:n}=t.selection,s=t.getBlock(n.blockId);if(!s)return;const i=h(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)}},ln={ArrowLeft:"left",ArrowRight:"right",ArrowUp:"up",ArrowDown:"down"},cn=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(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=nn(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=j(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,tn(e)))return!0;for(const n of function(e){const t=nn(e);if(null===t)return[];const n=en(e),s=[[...n,t].join("-")];if(e.shiftKey){const e=Yt[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(!T(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=ln[s];if(!i)return!1;const r=Je(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=Xe(t,n);return s&&this.dispatch(s),!0}if("Enter"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const n=q(t);return n&&this.dispatch(n),!0}if("Escape"===s){e.preventDefault();const n=Je(t,"right");return n&&this.dispatch(n),!0}return!1}handleGapCursorKeys(e){const t=this.getState(),n=t.selection;if(!R(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=q(t);return n&&this.dispatch(n),!0}if("Backspace"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const s=X(t,n);return s&&this.dispatch(s),!0}if("Delete"===s){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const s=O(t,n);return s&&this.dispatch(s),!0}if(1===s.length){if(this.isReadOnly())return e.preventDefault(),!0;e.preventDefault();const n=_(t,s);return this.dispatch(n),!0}return!1}handleGapCursorArrowFallback(e){const t=this.getState(),n=t.selection;if(!R(n))return!1;const s=e.key;if("ArrowLeft"!==s&&"ArrowRight"!==s&&"ArrowUp"!==s&&"ArrowDown"!==s)return!1;const i=ln[s];if(!i)return!1;if(!this.navigateFromGapCursorFn)return!1;const r=this.navigateFromGapCursorFn(t,i,this.element);return!(!r||C(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=_(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)}};function hn(t,n){if(0===n.blocks.length)return t.transaction("paste").setSelection(t.selection).build();const s=n.blocks[0];return s?1===n.blocks.length&&s.type===Y("paragraph")?function(e,t){const n=e.selection;if(T(n))return e.transaction("paste").setSelection(n).build();if(R(n))return function(e,t,n){const s=un(e,t);if(!s)return e.transaction("paste").setSelection(t).build();const i=S(),r=e.transaction("paste");r.insertNode(s.parentPath,s.insertIndex,d(Y("paragraph"),[o("")],i));const a=pn(r,i,0,n);return r.setSelection(A(i,a)),r.build()}(e,n,t);const{builder:s,insertBlockId:i,insertOffset:r}=dn(e,n),a=pn(s,i,r,t);return s.setSelection(A(i,a)),s.build()}(t,s.segments):1===n.blocks.length?function(e,t){const n=e.selection;if(T(n))return e.transaction("paste").setSelection(n).build();if(R(n))return gn(e,n,[t]);const{builder:s,insertBlockId:i,insertOffset:r}=dn(e,n);s.setBlockType(i,t.type,t.attrs);const o=pn(s,i,r,t.segments);return s.setSelection(A(i,o)),s.build()}(t,s):function(t,n){const s=t.selection;if(T(s))return t.transaction("paste").setSelection(s).build();if(R(s))return gn(t,s,n.blocks);const{builder:i,landingId:r,resolved:o,insertBlockId:a,insertOffset:l}=dn(t,s),c=t.getBlockOrder();let h;if(r){const e=ce(t.doc,o.blockId)?.[0];h=e?t.doc.children.findIndex(t=>t.id===e):0}else h=c.indexOf(a);const p=n.blocks[0],u=n.blocks[n.blocks.length-1];if(!p||!u)return i.build();const g=n.blocks.slice(1,-1),m=pn(i,a,l,p.segments),f=S();i.splitBlock(a,m,f),p.type!==Y("paragraph")&&i.setBlockType(a,p.type,p.attrs);let y=h+1;for(const k of g){const t=d(k.type,e(k.segments),S(),k.attrs);i.insertNode([],y,t),y++}return pn(i,f,0,u.segments),u.type!==Y("paragraph")&&i.setBlockType(f,u.type,u.attrs),i.setSelection(A(f,He(u.segments))),i.build()}(t,n):t.transaction("paste").setSelection(t.selection).build()}function dn(e,t){const n=e.transaction("paste");let s;P(t)||(s=W(e,n));const i=Ce(t,e.getBlockOrder());return{builder:n,landingId:s,resolved:i,insertBlockId:s??i.blockId,insertOffset:s?0:i.offset}}function pn(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 un(e,t){const n=ce(e.doc,t.blockId);if(!n)return null;const s=Te(n),i=pe(de(e,s),t.blockId);return i<0?null:{parentPath:s,insertIndex:"before"===t.side?i:i+1}}function gn(t,n,s){const i=un(t,n);if(!i)return t.transaction("paste").setSelection(n).build();const r=t.transaction("paste");let o,a=i.insertIndex,l=0;for(const c of s){const t=S(),n=d(c.type,e(c.segments),t,c.attrs);r.insertNode(i.parentPath,a,n),a++,o=t,l=He(c.segments)}return o&&r.setSelection(A(o,l)),r.build()}var mn=new Set(["P","DIV","H1","H2","H3","H4","H5","H6","BLOCKQUOTE","UL","OL","LI","HR","PRE","TABLE","THEAD","TBODY","TR"]),fn=new Set(["STRONG","B","EM","I","U","S","STRIKE","DEL","A","SPAN","BR","SUB","SUP","CODE"]),yn=/^H([1-6])$/;function Sn(e){const t=e.style.fontWeight,n=Number.parseInt(t,10);return!("normal"===t||!Number.isNaN(n)&&n<700)&&{}}var kn=new Map([["STRONG",{markName:"bold",getAttrs:Sn}],["B",{markName:"bold",getAttrs:Sn}],["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:ie(e.getAttribute("href")??"")}}}]]),wn=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){ot(e);const t=this.parseContainer(e);return 0===t.length?{blocks:[{type:this.resolveBlockType(Y("paragraph")),segments:[p("")]}]}:{blocks:t}}buildBlockTagHandlers(){const e=e=>this.parseBlockWithLineBreaks(e,this.resolveBlockType(Y("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(Y("horizontal_rule")),segments:[]}]],["PRE",e=>[{type:this.resolveBlockType(Y("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(p(e))}return this.flushPendingSegments(t,n),t}parseBlockElement(e){const t=yn.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(Y("heading"));return[{type:n,...n===Y("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(Y("paragraph")),segments:this.ensureSegments(this.parseInlineChildren(e,[]))}]}parseBlockquote(e){const t=this.resolveBlockType(Y("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(Y("list_item")),r=this.hasCheckbox(e),o=r?"checklist":t,a=!!r&&this.isCheckboxChecked(e),l=[],c=[];for(const h of Array.from(e.childNodes))if(h.nodeType===Node.ELEMENT_NODE){const e=h;"UL"===e.tagName||"OL"===e.tagName?c.push(e):"INPUT"===e.tagName&&"checkbox"===e.getAttribute("type")||(this.isBlockElement(e)?l.push(...this.parseInlineChildren(e,[])):l.push(...this.parseInlineNode(h,[])))}else if(h.nodeType===Node.TEXT_NODE){const e=h.textContent??"";e&&l.push(p(e))}s.push({type:i,attrs:{listType:o,indent:n,..."checklist"===o?{checked:a}:{}},segments:this.ensureSegments(this.normalizeSegments(l))});for(const h of c){const e="OL"===h.tagName?"ordered":"bullet";s.push(...this.parseList(h,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?[p(n,this.resolveMarks(t))]:[]}if(e.nodeType!==Node.ELEMENT_NODE)return[];const n=e,s=n.tagName;if("BR"===s)return[p("\n",this.resolveMarks(t))];const i=this.matchInlineNodeRule(n);if(i)return[v(i)];if(this.isBlockElement(n)&&!fn.has(s))return this.parseInlineChildren(n,t);const r=this.mergeMarks(t,this.marksFromElement(n));return this.parseInlineChildren(n,r)}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 y(ee(n.type),t)}return y(ee(n.type))}return null}parsePreContent(e){const t=e.textContent??"";return t?[p(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(Y("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:Z(i.type),...Object.keys(t).length>0?{attrs:t}:{}})}else n.push({type:Z(i.type)});s.add(i.type)}return s.size>0?n:null}fallbackMarksFromElement(e){const t=kn.get(e.tagName);if(!t)return[];if(t.getAttrs){const n=t.getAttrs(e);return!1===n?[]:Object.keys(n).length>0?[{type:Z(t.markName),attrs:n}]:[{type:Z(t.markName)}]}return[{type:Z(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=>D(this.schema,e.type))}resolveBlockType(e){return N(this.schema,e)?e:Y("paragraph")}normalizeSegments(e){if(0===e.length)return[];const t=[];for(const s of e){if("inline"===s.kind){t.push(s);continue}const e=t[t.length-1];e&&"text"===e.kind&&n(e.marks,s.marks)?t[t.length-1]=p(e.text+s.text,e.marks):s.text.length>0&&t.push(s)}return t}ensureSegments(e){return 0===e.length?[p("")]: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:Y(n.type),attrs:t}}return{type:Y(n.type)}}return null}isBlockElement(e){if(mn.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:p(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(p(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(Y("paragraph")),segments:n}))}},vn={1:"x-small",2:"small",3:"medium",4:"large",5:"x-large",6:"xx-large",7:"xxx-large"};function bn(e){return e.toLowerCase().includes("font-size")}function Rn(e,t){for(;e.firstChild;)t.appendChild(e.firstChild)}function In(e){const t=e.parentNode;if(t){for(;e.firstChild;)t.insertBefore(e.firstChild,e);t.removeChild(e)}}var Cn=["script","style","iframe","object","embed","form","noscript"],xn=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");if(s)this.handleHTML(s,n);else if(t){const e=Be(t);this.dispatch(hn(this.getState(),e))}}handleHTML(e,t){const n=Nt.sanitize(e,{FORBID_TAGS:Cn,ADD_TAGS:this.schemaRegistry?this.schemaRegistry.getAllowedTags():[],ADD_ATTR:this.schemaRegistry?this.schemaRegistry.getAllowedAttrs():[],ALLOWED_URI_REGEXP:oe}),s=this.extractRichData(n);if(s&&this.tryRichPasteFromJson(s))return;const i=document.createElement("template");i.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)){In(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&&!bn(i)){const e=vn[s];e&&o.push(`font-size: ${e};`)}ht(r,o.join(" ")),Rn(n,r),n.parentNode?.replaceChild(r,n)}}(i.content);const r=i.innerHTML,o=this.schemaRegistry?this.schemaRegistry.getAllowedTags():["strong","em","u","b","i","p","br","div","span"],a=this.schemaRegistry?this.schemaRegistry.getAllowedAttrs():[],l=Nt.sanitize(r,{ALLOWED_TAGS:o,ALLOWED_ATTR:a,ALLOWED_URI_REGEXP:oe});if(this.schemaRegistry){const e=document.createElement("template");if(e.innerHTML=l,this.requiresDocumentParser(l,e.content))return void this.handleDocumentPaste(l,t);const n=new wn({schema:Q(this.schemaRegistry),schemaRegistry:this.schemaRegistry}).parse(e.content);this.dispatch(hn(t,n))}else{const e=this.extractTextFromHTML(l);e&&this.dispatch(_(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(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&")}requiresDocumentParser(e,t){return!!/<table[\s>]/i.test(e)||!!/<blockquote[\s>]/i.test(e)||this.containsVoidBlockElements(t)}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=ct(e,this.schemaRegistry);if(0===n.children.length)return;const s=t.selection,i=t.transaction("paste");let r;B(s)&&!P(s)&&(r=W(t,i));const o=r??(T(s)?s.nodeId:R(s)?s.blockId:s.anchor.blockId),a=ve(t,o,this.schemaRegistry);if(!a)return;const l=a.parentPath[a.parentPath.length-1],c=l?t.getBlock(l)?.type:void 0,d=Re(this.schemaRegistry,c,n.children)?a:me(t,o);if(!d)return;const p=R(s)&&"before"===s.side?0:1;let u,g,m=d.anchorIndex+p;for(const h of n.children){const e=we(h,S());i.insertNode(d.parentPath,m,e),m++,u=xe(e),g=e}if(d.isAnchorEmpty&&!R(s)&&i.removeNode(d.parentPath,d.anchorIndex),u&&g){const e=Se(g,u),t=e?h(e).length:0;i.setSelection(A(u,t))}this.dispatch(i.build())}extractTextFromHTML(e){const t=document.createElement("template");return t.innerHTML=e,t.content.textContent??""}},Tn=class{getState;dispatch;schemaRegistry;constructor(e,t,n){this.getState=e,this.dispatch=t,this.schemaRegistry=n}handleBlockPaste(e){let t;try{t=JSON.parse(e)}catch{return}const n=t.type;if(!n)return;const s=this.schemaRegistry?.getNodeSpec(n);if(this.schemaRegistry&&!s)return;const i=this.getState(),r=i.selection,o=Ie(r),a=S(),l=ye(t.attrs,s?.attrs),c=d(Y(n),void 0,a,l),h=ue(i,o);if(h){const e=i.getBlock(h);if(this.cellRejects(e,[c])){const e=me(i,o);if(!e)return;return void this.dispatchNodeInsert(i,e.parentPath,e.anchorIndex+1,c)}const t=ge(i,o,h,this.schemaRegistry);if(!t||!e)return;return void this.dispatchNodeInsert(i,t.parentPath,e.children.length,c)}const p=ve(i,o,this.schemaRegistry);if(!p)return;const u=R(r)&&"before"===r.side?0:1;this.dispatchNodeInsert(i,p.parentPath,p.anchorIndex+u,c)}dispatchNodeInsert(e,t,n,s){const i=e.transaction("paste");i.insertNode(t,n,s),i.setSelection(M(s.id,[...t,s.id])),this.dispatch(i.build())}cellRejects(e,t){return!(!e||!this.schemaRegistry||Re(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.type&&"paragraph"!==e.type||e.segments?.some(e=>"inline"===e.kind))&&e.length<=1)return!1;let t=this.getState();const n=t.selection,s=Ie(n),i=t.getBlock(s),r=t.doc.children.some(e=>e.id===s);if(B(n)&&P(n)&&r&&void 0!==i&&f(i)>0)return this.dispatch(hn(t,ke(e,this.schemaRegistry))),!0;if(B(n)&&!P(n)){const n=t.transaction("paste"),s=W(t,n),i=n.build();if(this.dispatch(i),t=t.apply(i),s)return this.resolveAndInsertRichBlocks(e,t,s)}return this.resolveAndInsertRichBlocks(e,t,s)}resolveAndInsertRichBlocks(e,t,n){const s=[];for(const l of e){const e=fe(l,this.schemaRegistry);e&&s.push(be(e))}if(0===s.length)return!1;const i=t.selection,r=ue(t,n);if(r){const e=t.getBlock(r);if(this.cellRejects(e,s)){const e=me(t,n);return!!e&&this.insertNodes(s,t,e,e.anchorIndex+1,!1)}const i=ge(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=ve(t,n,this.schemaRegistry);if(!o)return!1;const a=R(i)&&"before"===i.side?0:1;return this.insertNodes(s,t,o,o.anchorIndex+a,!R(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(A(o.id,f(o))),this.dispatch(r.build()),!0}},En=class{element;getState;dispatch;fileHandlerRegistry;isReadOnly;getPasteInterceptors;handlePaste;htmlHandler;richBlockHandler;constructor(e,t){this.element=e,this.getState=t.getState,this.dispatch=t.dispatch,this.fileHandlerRegistry=t.fileHandlerRegistry,this.isReadOnly=t.isReadOnly??(()=>!1),this.getPasteInterceptors=t.getPasteInterceptors??(()=>[]),this.richBlockHandler=new Tn(t.getState,t.dispatch,t.schemaRegistry),this.htmlHandler=new xn(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(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)||this.htmlHandler.handleHTMLOrTextPaste(t,s)}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)}},Pn=class{compositionTracker;inputHandler;keyboardHandler;pasteHandler;clipboardHandler;constructor(e,t){this.compositionTracker=new on,this.inputHandler=new an(e,{getState:t.getState,dispatch:t.dispatch,syncSelection:t.syncSelection,inputRuleRegistry:t.inputRuleRegistry,isReadOnly:t.isReadOnly,compositionTracker:this.compositionTracker,getTextInputInterceptors:t.getTextInputInterceptors}),this.keyboardHandler=new cn(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 En(e,{getState:t.getState,dispatch:t.dispatch,schemaRegistry:t.schemaRegistry,fileHandlerRegistry:t.fileHandlerRegistry,isReadOnly:t.isReadOnly,getPasteInterceptors:t.getPasteInterceptors}),this.clipboardHandler=new rn(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()}},Mn=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}}},An=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}},Bn=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)Nn(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 Nn(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 Dn=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()}};function On(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 Ln(e,t,n){if(0===t.length)return e;const s=[...t].sort((e,t)=>On(e,n)-On(t,n));let i=e;for(let r=s.length-1;r>=0;r--){const e=s[r];if(!e)continue;const t=Hn(e,n);t.appendChild(i),i=t}return i}function Hn(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 zn=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(!B(n))return;if(!P(n))return;const s=document.createElement("span");s.setAttribute("data-cursor-wrapper","");const i=document.createTextNode("​"),r=Ln(i,t,this.registry);s.appendChild(r);const o=et();if(!o||0===o.rangeCount)return;let a;const l=nt(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)}},_n={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)}},Fn={error(){},warn(){},info(){},debug(){}};function Kn(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 $n=class{listeners=/* @__PURE__ */new Map;log;constructor(e=_n){this.log=Kn(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()}},jn=class{commands=/* @__PURE__ */new Map;readonlyBypassActive=!1;log;constructor(e=_n){this.log=Kn(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}},Vn=class{middlewares=[];middlewareSorted=null;pasteInterceptors=[];pasteInterceptorsSorted=null;textInputInterceptors=[];textInputInterceptorsSorted=null;log;constructor(e=_n){this.log=Kn(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 Un(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 qn(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 Wn(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 Gn(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 Qn(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)},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 Jn(e){return{getSchemaRegistry:()=>e.schemaRegistry,getKeymapRegistry:()=>e.keymapRegistry,getInputRuleRegistry:()=>e.inputRuleRegistry,getFileHandlerRegistry:()=>e.fileHandlerRegistry,getNodeViewRegistry:()=>e.nodeViewRegistry,getToolbarRegistry:()=>e.toolbarRegistry,getBlockTypePickerRegistry:()=>e.blockTypePickerRegistry}}var Xn=class{tracker;plugins=/* @__PURE__ */new Map;initOrder=[];startedInitOrder=[];initialized=!1;initializing=!1;readOnly=!1;log;constructor(e,t=_n){this.tracker=e,this.log=Kn(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=_e.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}},Yn=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}},Zn=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}},es=class{schemaRegistry=new Dt;keymapRegistry=new Mn;inputRuleRegistry=new An;fileHandlerRegistry=new Bn;nodeViewRegistry=new Dn;toolbarRegistry=new yt;blockTypePickerRegistry=new ft;logger;commandRegistry;serviceRegistry=new Zn;middlewareChain;eventBus;registrationTracker;lifecycle;constructor(e={}){this.logger=e.logger??_n,this.commandRegistry=new jn(this.logger),this.middlewareChain=new Vn(this.logger),this.eventBus=new $n(this.logger),this.registrationTracker=new Yn({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 Xn(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.fileHandlerRegistry.clear(),this.nodeViewRegistry.clear(),this.toolbarRegistry.clear(),this.blockTypePickerRegistry.clear()}createContext(e,t){const n=t.getCompositionState??(()=>ts),{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,...Un(e.pluginId,e.commands,t,e.executeCommand),...qn(e.services,t),...Wn(e,t),...Gn(e.schemaRegistry,t),...Qn(e.pluginId,e,t),...Jn(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,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}},ts={isComposing:!1,activeBlockId:null},ns={EN:"en",DE:"de",ES:"es",FR:"fr",ZH:"zh",RU:"ru",AR:"ar",HI:"hi",PT:"pt",BROWSER:"browser"},ss={paragraph:"Paragraph",heading:"Heading",code_block:"Code Block",blockquote:"Block Quote",list_item:"List Item",horizontal_rule:"Horizontal Rule",image:"Image",table:"Table"};function is(e,t){return"heading"===e&&t?.level?`Heading ${t.level}`:ss[e]??e}function rs(e,t){const n=t?.document??globalThis.document,s=t?.container??n.head;if(t?.id){const s=n.getElementById(t.id);if(s instanceof HTMLStyleElement)return s.textContent=e,t.nonce&&s.setAttribute("nonce",t.nonce),s}const i=n.createElement("style");return i.textContent=e,t?.id&&(i.id=t.id),t?.nonce&&i.setAttribute("nonce",t.nonce),s.appendChild(i),i}function os(e,t){const n=(t??globalThis.document).getElementById(e);n&&n.remove()}var as=/* @__PURE__ */new WeakSet;function ls(e,t){const n=t?.target??globalThis.document,s=new CSSStyleSheet;return s.replaceSync(e),as.add(s),t?.replace&&(n.adoptedStyleSheets=n.adoptedStyleSheets.filter(e=>!as.has(e))),n.adoptedStyleSheets=[...n.adoptedStyleSheets,s],s}function cs(e,t){const n=t??globalThis.document;n.adoptedStyleSheets=n.adoptedStyleSheets.filter(t=>t!==e)}function hs(e,t,n){const s=t?function(e,t){return{children:e.children.map(e=>ds(e,t))}}(e,t):e,i=t?Q(t):void 0;n(zt.create({doc:s,schema:i}))}function ds(e,n){const s=n.getNodeSpec(e.type);if(!s?.content||!((r=s.content).allow.length>0)||r.allow.includes("text"))return e;var r;if(w(e)){const t=e.children.length>0?e.children:void 0,n=d(Y("paragraph"),t);return d(e.type,[n],e.id,e.attrs)}const o=e.children.map(e=>i(e)||t(e)?e:ds(e,n));return d(e.type,o,e.id,e.attrs)}function ps(e){return e.doc.children.map(us).join("\n")}function us(e){return w(e)?h(e):a(e).map(us).join("\n")}function gs(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===f(t)}var ms=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??bt.Light)}"paper-size"===e&&(null===t?(n.applyPaperSize(void 0),this.config={...this.config,paperSize:void 0}):Tt(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??bt.Light}get isReadOnly(){return this.config.readonly??!1}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")))}},fs=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()}},ys=class{deps;handleSelectionChange;handleMousedown;handleDragover;handleDrop;handleCompositionStart;handleCompositionEnd;pendingNodeSelectionClear=!1;pendingGapCursorClear=!1;constructor(e){this.deps=e,this.handleCompositionStart=()=>{e.cursorWrapper.onCompositionStart(e.getState())},this.handleCompositionEnd=()=>{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(T(e.selection)&&!this.pendingNodeSelectionClear)return;if(R(e.selection)&&!this.pendingGapCursorClear)return;this.pendingNodeSelectionClear=!1,this.pendingGapCursorClear=!1;const t=Ze(this.deps.contentElement);if(!t)return;if(C(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)&&this.syncSelectionFromDOM()}onMousedown(e){if(this.deps.isUpdating())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=M(te(n.getAttribute("data-block-id")??""),se(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===f(o)){const n=t.transaction("input").setSelection(A(s,0)).build();return this.deps.dispatch(n),void e.preventDefault()}e.preventDefault(),this.deps.contentElement.focus();const a=S(),l=t.transaction("input").insertNode([],t.doc.children.length,m(a)).setSelection(A(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=je(this.deps.contentElement.getRootNode(),e,t);return n&&this.deps.contentElement.contains(n.node)?st(this.deps.contentElement,n.node,n.offset):null}markPendingSelectionClear(){const e=this.deps.getState();T(e.selection)&&(this.pendingNodeSelectionClear=!0),R(e.selection)&&(this.pendingGapCursorClear=!0)}},Ss=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!T(t.selection)&&!R(t.selection)&&!!P(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=Ve(t,n);if(s)return this.deps.dispatch(s),this.validateSelectionAfterInlineSkip(),!0;if(!We(this.deps.contentElement,t,e))return!1;const i=Ue(t,n);return!!i&&(this.deps.dispatch(i),!0)}resolveLogicalDirection(e,t){const n=e.selection;if(!B(n))return t;const s=this.deps.contentElement.querySelector(`[data-block-id="${n.anchor.blockId}"]`);return s instanceof HTMLElement&&"rtl"===Ye(s)?"left"===t?"right":"left":t}handleVerticalArrow(e){const t=this.deps.getState(),n=this.deps.contentElement.ownerDocument.getSelection?.()??null,s=n?Qe(n,this.deps.contentElement):null;if(!We(this.deps.contentElement,t,e,s))return!1;null===this.goalColumn&&s&&(this.goalColumn=s.left),this.preserveGoalColumn=!0;const i=Ge(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=Ze(this.deps.contentElement);t&&C(t,e.selection)||tt(this.deps.contentElement,e.selection)}};function ks(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 ws(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 vs(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 bs(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 Rs(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 Is(e,t,n){if(!n)return;const s=ks(t,n);for(const i of s){const t=e.querySelector(`[data-block-id="${i.blockIds[0]}"]`);if(!t)continue;const n=vs(i.spec);t.before(n);for(const s of i.blockIds){const t=e.querySelector(`[data-block-id="${s}"]`);t&&n.appendChild(t)}}}function Cs(e){e.parentElement?.removeChild(e)}function xs(e,t,n){const s=e.parentElement;s?s.replaceChild(t,e):n.replaceChild(t,e)}function Ts(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 Es(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 Ps(e){let t=e.replace(/ {2}/g,"  ");return t.endsWith(" ")&&(t=`${t.slice(0,-1)} `),t.startsWith(" ")&&(t=` ${t.slice(1)}`),t}function Ms(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&&ht(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 As(e,t,n){const s=n?.decorations?.findNode(t);if(s&&0!==s.length)for(const i of s){if(i.attrs.class)for(const t of i.attrs.class.split(" "))t&&e.classList.add(t);i.attrs.style&&mt(e,i.attrs.style)}}function Bs(e,t,n,s){const i=s?.decorations?.findInline(e.id),r=s?.nodeViewRegistry;if(r&&t&&n&&s?.getState&&s?.dispatch){const o=r.getNodeViewFactory(e.type);if(o){const r=o(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"),w(e)&&r.contentDOM)Ns(r.contentDOM,e,t,i);else{const i=a(e),o=/* @__PURE__ */new Map;for(const e of i){const i=r.getContentDOM?.(e.id)??r.contentDOM;if(i){const r=Bs(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)Is(e,n,t)}return r.dom.setAttribute("data-block-type",e.type),As(r.dom,e.id,s),r.dom}}if(t){const r=t.getNodeSpec(e.type);if(r){const o=r.toDOM(e);if(r.isVoid&&o.setAttribute("data-void","true"),r.selectable&&o.setAttribute("data-selectable","true"),!r.isVoid)if(w(e))Ns(o,e,t,i);else{const i=a(e);for(const e of i){const i=Bs(e,t,n,s);o.appendChild(i)}Is(o,i,t)}return o.setAttribute("data-block-type",e.type),As(o,e.id,s),o}}return function(e,t,n){const s=ne("p",e.id);return s.setAttribute("data-block-type",e.type),Ns(s,e,t,n),s}(e,t,i)}function Ns(e,n,s,r){for(const t of e.querySelectorAll("[data-cursor-wrapper]"))t.remove();const o=k(n);if(1===o.length&&i(o[0])&&""===o[0].text)return void e.appendChild(document.createElement("br"));if(r&&0!==r.length)!function(e,n,s,i){let r=0;for(const o of n){if(t(o)){e.appendChild(Es(o,i)),r+=1;continue}const n=r,a=r+o.text.length;if(0===o.text.length){r=a;continue}const l=/* @__PURE__ */new Set;l.add(n),l.add(a);for(const e of s){const t=Math.max(n,e.from),s=Math.min(a,e.to);t>n&&t<a&&l.add(t),s>n&&s<a&&l.add(s)}const c=[...l].sort((e,t)=>e-t);for(let t=0;t<c.length-1;t++){const r=c[t],a=c[t+1];if(void 0===r||void 0===a||r>=a)continue;const l=r-n,h=a-n,d=o.text.slice(l,h),p=[];for(const e of s)e.from<=r&&e.to>=a&&p.push(e);let u=Ln(document.createTextNode(Ps(d)),o.marks,i);for(const e of p){const t=Ms(e.attrs);t.appendChild(u),u=t}e.appendChild(u)}r=a}}(e,o,r,s);else for(const t of o)i(t)?e.appendChild(Ds(t,s)):e.appendChild(Es(t,s));const a=o[o.length-1];a&&t(a)&&"hard_break"===a.inlineType&&e.appendChild(document.createElement("br"))}function Ds(e,t){return""===e.text?document.createTextNode(""):Ln(document.createTextNode(Ps(e.text)),e.marks,t)}function Os(e,t,n,s){const i=t?.doc.children??[],r=n.doc.children,o=s?.registry,a=s?.nodeViews,l=null!=s?.compositionBlockId,c=/* @__PURE__ */new Map;for(const m 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=m.getAttribute("data-block-id");e&&c.set(te(e),m)}const h=new Set(r.map(e=>e.id));for(const[m,f]of c)if(!h.has(m)){Cs(f),c.delete(m);const e=a?.get(m);e&&(e.destroy?.(),a?.delete(m))}const d=/* @__PURE__ */new Map;for(const m of i)d.set(m.id,m);let p=null;const u=s?.selectedNodeId,g=s?.previousSelectedNodeId;for(const m of r){const t=c.get(m.id),n=d.get(m.id);if(s?.compositionBlockId===m.id&&t){p=t;continue}const i=s?.oldDecorations?.find(m.id),r=s?.decorations?.find(m.id);if(t&&n&&!Ls(n,m,i,r))p=t;else if(t){const n=a?.get(m.id);if(n){if(n.update?.(m)){if(w(m)&&n.contentDOM){n.contentDOM.textContent="";const e=s?.decorations?.findInline(m.id);Ns(n.contentDOM,m,o,e)}p=n.dom;continue}n.destroy?.(),a?.delete(m.id)}const i=Bs(m,o,a,s);xs(t,i,e),p=i}else{const t=Bs(m,o,a,s);Ts(e,p,t),p=t}if(u===m.id){const e=a?.get(m.id);if(e)e.selectNode?.();else{const e=c.get(m.id)??p;e instanceof HTMLElement&&e.classList.add("notectl-node-selected")}}else if(g===m.id){const e=a?.get(m.id);if(e)e.deselectNode?.();else{const e=c.get(m.id)??p;e instanceof HTMLElement&&e.classList.remove("notectl-node-selected")}}}if(g&&g!==u){const e=a?.get(g);e&&!h.has(g)&&e.deselectNode?.()}if(u&&!h.has(u)){const e=a?.get(u);e&&e.selectNode?.()}!l&&o&&function(e,t,n){const s=ks(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(te(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:te(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&&ws(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):bs(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:vs(t.spec))}i||(i=vs(t.spec)),a.add(i),ws(i,t.spec),i.parentNode!==e?l?l.after(i):e.insertBefore(i,e.firstChild):bs(e,i,l),Rs(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,o)}function Ls(e,s,r,o){if(e.type!==s.type)return!0;if(e.children.length!==s.children.length)return!0;const a=e.attrs,l=s.attrs;if(a!==l){if(!a||!l)return!0;const e=Object.keys(a),t=Object.keys(l);if(e.length!==t.length)return!0;for(const n of e)if(a[n]!==l[n])return!0}for(let d=0;d<e.children.length;d++){const r=e.children[d],o=s.children[d];if(!r||!o)return!0;if(i(r)&&i(o)){if(r.text!==o.text)return!0;if(!n(r.marks,o.marks))return!0}else if(t(r)&&t(o)){if(r.inlineType!==o.inlineType)return!0;if(!Hs(r.attrs,o.attrs))return!0}else{if(i(r)||i(o)||t(r)||t(o))return!0;if(Ls(r,o))return!0}}const c=r??[],h=o??[];return c!==h&&!Oe(c,h)}function Hs(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=_e.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 Wt({maxDepth:t.maxHistoryDepth??100}),t.onStateChange&&this.stateChangeCallbacks.push(t.onStateChange),this.cursorWrapper=new zn(e,this.schemaRegistry),this.navigation=new Ss({contentElement:e,getState:()=>this.state,dispatch:e=>this.dispatch(e),keymapRegistry:t.keymapRegistry}),this.events=new ys({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)??_e.empty,Os(e,null,this.state,{...this.reconcileOptions(),decorations:this.decorations}),tt(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||Ut(t))&&this.history.push(t);const i=this.getDecorations?.(e,t)??_e.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()&&!qt(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:Pe.empty,forwardStepMaps:[],metadata:{origin:"api",timestamp:Date.now()}},i=this.getDecorations?.(n,s)??_e.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,Os(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||tt(this.contentElement,t.selection)}reconcileOptions(e){const t=T(this.state.selection)?this.state.selection.nodeId:void 0,n=e&&T(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()}},_s={ariaLabel:"Rich text editor",ariaDescription:"Press Escape to exit the editor",defaultPlaceholder:"Start typing..."},Fs=/* #__PURE__ */Object.assign({"./locales/ar.ts":()=>import("./ar-BTShmP2E.mjs"),"./locales/de.ts":()=>import("./de-C--bRmjW.mjs"),"./locales/es.ts":()=>import("./es-DFUVd7eO.mjs"),"./locales/fr.ts":()=>import("./fr-BaXKyPmX.mjs"),"./locales/hi.ts":()=>import("./hi-aH9HZG23.mjs"),"./locales/pt.ts":()=>import("./pt-Hy-0Xnnc.mjs"),"./locales/ru.ts":()=>import("./ru-BFpEOrVp.mjs"),"./locales/zh.ts":()=>import("./zh-BjoyjClN.mjs")}),Ks=["\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"),$s=null,js=class{themeStyleSheet=new CSSStyleSheet;systemThemeQuery=null;systemThemeHandler=null;pluginSheets=[];runtimeSheets=[];shadow;constructor(e){this.shadow=e}apply(e){if(this.cleanupSystemThemeListener(),e===bt.System){this.setupSystemThemeListener();const e=kt(this.getSystemTheme());this.setThemeStyleSheet(e)}else this.setThemeStyleSheet(kt(e))}setPluginStyleSheets(e){this.pluginSheets=e,this.refreshAdoptedStyleSheets()}setRuntimeStyleSheets(e){this.runtimeSheets=e,this.refreshAdoptedStyleSheets()}destroy(){this.cleanupSystemThemeListener()}setThemeStyleSheet(e){this.themeStyleSheet.replaceSync(vt(e)),this.refreshAdoptedStyleSheets()}refreshAdoptedStyleSheets(){this.shadow.adoptedStyleSheets=[this.themeStyleSheet,($s||($s=new CSSStyleSheet).replaceSync(Ks),$s),...this.pluginSheets,...this.runtimeSheets]}setupSystemThemeListener(){this.systemThemeQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.systemThemeHandler=e=>{const t=kt(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?bt.Dark:bt.Light}},Vs=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=It(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&&(gt(this.surface,"width",`${this.currentPaperWidthPx}px`),gt(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,gt(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 gt(this.surface,"marginBottom","");const t=this.surface.scrollHeight,n=t*e-t;gt(this.surface,"marginBottom",`${n}px`)}};function Us(e){return!Array.isArray(e)}function qs(e){if(Array.isArray(e))return{plugins:e,label:void 0};const t=e;return{plugins:t.plugins,label:t.label}}var Ws=class{deps;cfg;themeController=null;domElements=null;paperLayout=null;pluginManager=null;inputManager=null;view=null;cleanedUp=!1;constructor(e){this.deps=e,this.cfg=e.config}async run(){try{if(this.setupTheme(),this.isCancelled())return this.abort();const e=await async function(e){const t=new Et(e.locale??"browser").getLocale();return"en"===t?_s:await async function(e){return Mt(Fs,e,_s)}(t)}(this.cfg);if(this.isCancelled())return this.abort();if(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,release:()=>{this.view=null}}}catch(e){throw await this.cleanup(),e}}setupTheme(){this.themeController=new js(this.deps.shadow),this.deps.styleCoordinator.setup(this.deps.shadow,this.cfg.styleNonce,this.themeController),this.themeController.apply(this.cfg.theme??bt.Light)}setupDOM(e){this.domElements=function(e){const t=e.locale??_s,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 Vs(this.domElements.wrapper,this.domElements.content),this.paperLayout.apply(this.cfg.paperSize))}setupPlugins(){if(this.domElements){this.pluginManager=new es({logger:this.cfg.logger}),this.pluginManager.registerService(Pt,new Et(this.cfg.locale??"browser")),Ot(this.pluginManager.schemaRegistry),function(e,t){if(!t)return;const n=Us(t)?t.groups:t,s=Us(t)?t.overflow:void 0,i=[];for(const o of n){const{plugins:t,label:n}=qs(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 St(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 Bt(n))}(e,t),function(e){void 0===e.get("caret-navigation")&&e.register(new qe)}(e),function(e){void 0===e.get("gap-cursor")&&e.register(new At)}(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:t=>{e.announcer&&(e.announcer.textContent=t)},hasAnnouncement:()=>!!e.announcer?.textContent,getCompositionState:()=>{const e=this.inputManager?.compositionTracker;return e||Gs},onBeforeReady:()=>this.createInputAndView(e,t,n)})}createInputAndView(e,t,n){if(this.isCancelled()||!this.pluginManager||!this.themeController)return;const s=Q(t.schemaRegistry),i=zt.create({schema:s});this.inputManager=new Pn(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,getPasteInterceptors:()=>t.getPasteInterceptors(),getTextInputInterceptors:()=>t.getTextInputInterceptors(),getTextDirection:Ye,navigateFromGapCursor:$e}),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)??_e.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),Qs(s.content,t.doc),r.emit("stateChange",{oldState:e,newState:t,transaction:n}),C(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 is(s.nodeType,s.attrs);for(const s of t.schema.markTypes){const n=Z(s),i=K(e,n),r=K(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}),Qs(e.content,this.view.getState().doc);const r=t.getPluginStyleSheets();r.length>0&&n.setPluginStyleSheets(r)}finalizeSetup(e,t){if(this.cfg.readonly&&e.setReadOnly(!0),e.onEvent(Ct,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}},Gs={isComposing:!1,activeBlockId:null};function Qs(e,t){e.classList.toggle("notectl-content--empty",gs(t))}var Js=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}},Xs=class{runtimeStyleSheet=null;setup(e,t,n){pt(e),this.runtimeStyleSheet=ut(),n?.setRuntimeStyleSheets(this.runtimeStyleSheet?[this.runtimeStyleSheet]:[]),dt(e,{nonce:t,sheet:this.runtimeStyleSheet})}teardown(e,t){e&&pt(e),this.runtimeStyleSheet=null,t?.setRuntimeStyleSheets([])}},Ys=class extends HTMLElement{view=null;inputManager=null;pluginManager=null;domElements=null;configController=new ms;events=new fs;lifecycle=new Js;styleCoordinator=new Xs;themeController=null;paperLayout=null;pendingInitPromise=null;cancelPendingInit=null;autoInitToken=0;autoInitQueued=!1;initVersion=0;releaseInit=null;constructor(){super(),this.attachShadow({mode:"open"})}static get observedAttributes(){return["placeholder","readonly","theme","paper-size","dir"]}connectedCallback(){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(this.cancelAutoInit(),!this.lifecycle.markInitialized())return;e&&this.configController.setConfig(e);const t=this.shadowRoot;if(!t){const e=/* @__PURE__ */new Error("Editor shadow root not available.");throw this.lifecycle.failReady(e),e}const n=++this.initVersion;let s=!1;this.cancelPendingInit=()=>{s=!0};const i=this.lifecycle.consumePreInitPlugins(),r=async function(e){return new Ws(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.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(),hs(e,this.pluginManager?.schemaRegistry,e=>this.replaceState(e))}async getContentHTML(e){if(!this.view)throw new Error("Editor not initialized");return function(e,t,n){const s=e.doc;if("classes"===n?.cssMode){const e=it(s,t,n);return n.pretty?{html:re(e.html),css:e.css,styleMap:e.styleMap}:e}const i=at(s,t,n);return n?.pretty?re(i):i}(this.view.getState(),this.pluginManager?.schemaRegistry,e)}async setContentHTML(e,t){return this.assertInitialized(),function(e,t,n,s){hs(ct(e,t,s),t,n)}(e,this.pluginManager?.schemaRegistry,e=>this.replaceState(e),t)}getText(){if(!this.view)throw new Error("Editor not initialized");return ps(this.view.getState())}setText(e){this.assertInitialized(),this.view&&function(e,t,n,s){if(e===ps(t))return;const i=e.split("\n"),r=t.doc.children.map(e=>e.id),a=i.map((e,t)=>d(Y("paragraph"),[o(e)],r[t])),l=n?Q(n):void 0;s(zt.create({doc:{children:a},schema:l}))}(e,this.view.getState(),this.pluginManager?.schemaRegistry,e=>this.replaceState(e))}isEmpty(){return!this.view||gs(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=j(this.view.getState());this.dispatch(e)}};can(){const e=this.view?.getState().schema,t=this.configController.isReadOnly;return{toggleBold:()=>!t&&!!e&&D(e,"bold"),toggleItalic:()=>!t&&!!e&&D(e,"italic"),toggleUnderline:()=>!t&&!!e&&D(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 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.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(()=>{})}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 Vs(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 Zs(e){const t=document.createElement("notectl-editor");return await t.init(e),t}"undefined"==typeof customElements||customElements.get("notectl-editor")||customElements.define("notectl-editor",Ys);export{Ot as A,Wt as C,Vt as D,jt as E,zt as O,tn as S,Ut as T,An as _,cs as a,on as b,ns as c,_n as d,Kn as f,Bn as g,Dn as h,rs as i,Dt as j,Lt as k,es as l,zn as m,Zs as n,os as o,Fn as p,ls as r,is as s,Ys as t,$n as u,Mn as v,qt as w,rn as x,Pn as y};
2
+ //# sourceMappingURL=src-gVRDR_79.mjs.map