@blocknote/core
Version:
A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.
4 lines • 79.7 kB
JavaScript
"use strict";var Pe=Object.defineProperty;var Ie=(o,e,t)=>e in o?Pe(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var b=(o,e,t)=>Ie(o,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("prosemirror-model"),F=require("prosemirror-transform"),u=require("./blockToNode-CumVjgem.cjs"),d=require("./defaultBlocks-CSB5GiAu.cjs"),B=require("./TrailingNode-DHOdUVUO.cjs"),I=require("./BlockNoteSchema-CwhtPpVC.cjs"),S=require("@tiptap/core"),z=require("./EventEmitter-CLwfmbqG.cjs"),w=require("@tiptap/pm/model"),Me=require("./en-Cl87Uuyf.cjs"),Y=require("@handlewithcare/prosemirror-inputrules"),we=require("@tiptap/pm/keymap"),H=require("./BlockNoteExtension-BWw0r8Gy.cjs"),ve=require("@tiptap/extensions/gap-cursor"),Ae=require("@tiptap/extension-link"),Ne=require("@tiptap/extension-text"),T=require("prosemirror-state"),D=require("prosemirror-tables"),Le=require("./ShowSelection-BxnbRvy4.cjs"),_e=require("remark-gfm"),De=require("remark-parse"),R=require("remark-rehype"),Fe=require("rehype-stringify"),Oe=require("unified"),He=require("@tiptap/pm/state"),$=o=>o&&typeof o=="object"&&"default"in o?o:{default:o},$e=$(_e),Re=$(De),Ve=$(R),Ue=$(Fe);function ne(o,e){const t=[{tag:`[data-inline-content-type="${o.type}"]`,contentElement:n=>{const r=n;return r.matches("[data-editable]")?r:r.querySelector("[data-editable]")||r}}];return e&&t.push({tag:"*",getAttrs(n){if(typeof n=="string")return!1;const r=e==null?void 0:e(n);return r===void 0?!1:r}}),t}function ze(o,e){var n;const t=S.Node.create({name:o.type,inline:!0,group:"inline",draggable:(n=e.meta)==null?void 0:n.draggable,selectable:o.content==="styled",atom:o.content==="none",content:o.content==="styled"?"inline*":"",addAttributes(){return d.propsToAttributes(o.propSchema)},addKeyboardShortcuts(){return d.addInlineContentKeyboardShortcuts(o)},parseHTML(){return ne(o,e.parse)},renderHTML({node:r}){const s=this.options.editor,i=e.render.call({renderType:"dom",props:void 0},u.nodeToCustomInlineContent(r,s.schema.inlineContentSchema,s.schema.styleSchema),()=>{},s);return d.addInlineContentAttributes(i,o.type,r.attrs,o.propSchema)},addNodeView(){return r=>{const{node:s,getPos:i}=r,a=this.options.editor,c=e.render.call({renderType:"nodeView",props:r},u.nodeToCustomInlineContent(s,a.schema.inlineContentSchema,a.schema.styleSchema),l=>{const p=u.inlineContentToNodes([l],a.pmSchema),f=i();f&&a.transact(h=>h.replaceWith(f,f+s.nodeSize,p))},a);return d.addInlineContentAttributes(c,o.type,s.attrs,o.propSchema)}}});return d.createInlineContentSpecFromTipTapNode(t,o.propSchema,{...e,toExternalHTML:e.toExternalHTML,render(r,s,i){const a=e.render(r,s,i);return d.addInlineContentAttributes(a,o.type,r.props,o.propSchema)}})}function re(o,e,t,n="before"){const r=typeof t=="string"?t:t.id,s=u.getPmSchema(o),i=e.map(p=>u.blockToNode(p,s)),a=d.getNodeById(r,o.doc);if(!a)throw new Error(`Block with ID ${r} not found`);let c=a.posBeforeNode;return n==="after"&&(c+=a.node.nodeSize),o.step(new F.ReplaceStep(c,c,new E.Slice(E.Fragment.from(i),0,0))),i.map(p=>u.nodeToBlock(p,s))}function O(o){if(!o||o.type.name!=="column")throw new Error("Invalid columnPos: does not point to column node.");const e=o.firstChild;if(!e)throw new Error("Invalid column: does not have child node.");const t=e.firstChild;if(!t)throw new Error("Invalid blockContainer: does not have child node.");return o.childCount===1&&e.childCount===1&&t.type.name==="paragraph"&&t.content.content.length===0}function se(o,e){const t=o.doc.resolve(e),n=t.nodeAfter;if(!n||n.type.name!=="columnList")throw new Error("Invalid columnListPos: does not point to columnList node.");for(let r=n.childCount-1;r>=0;r--){const s=o.doc.resolve(t.pos+1).posAtIndex(r),a=o.doc.resolve(s).nodeAfter;if(!a||a.type.name!=="column")throw new Error("Invalid columnPos: does not point to column node.");O(a)&&o.delete(s,s+a.nodeSize)}}function _(o,e){se(o,e);const n=o.doc.resolve(e).nodeAfter;if(!n||n.type.name!=="columnList")throw new Error("Invalid columnListPos: does not point to columnList node.");if(n.childCount>2)return;if(n.childCount<2)throw new Error("Invalid columnList: contains fewer than two children.");const r=e+1,i=o.doc.resolve(r).nodeAfter,a=e+n.nodeSize-1,l=o.doc.resolve(a).nodeBefore;if(!i||!l)throw new Error("Invalid columnList: does not contain children.");const p=O(i),f=O(l);if(p&&f){o.delete(e,e+n.nodeSize);return}if(p){o.step(new F.ReplaceAroundStep(e,e+n.nodeSize,a-l.nodeSize+1,a-1,E.Slice.empty,0,!1));return}if(f){o.step(new F.ReplaceAroundStep(e,e+n.nodeSize,r+1,r+i.nodeSize-1,E.Slice.empty,0,!1));return}}function V(o,e,t){const n=u.getPmSchema(o),r=t.map(f=>u.blockToNode(f,n)),s=new Set(e.map(f=>typeof f=="string"?f:f.id)),i=[],a=new Set,c=typeof e[0]=="string"?e[0]:e[0].id;let l=0;if(o.doc.descendants((f,h)=>{if(s.size===0)return!1;if(!f.type.isInGroup("bnBlock")||!s.has(f.attrs.id))return!0;if(i.push(u.nodeToBlock(f,n)),s.delete(f.attrs.id),t.length>0&&f.attrs.id===c){const C=o.doc.nodeSize;o.insert(h,r);const y=o.doc.nodeSize;l+=C-y}const k=o.doc.nodeSize,m=o.doc.resolve(h-l);m.node().type.name==="column"?a.add(m.before(-1)):m.node().type.name==="columnList"&&a.add(m.before()),m.node().type.name==="blockGroup"&&m.node(m.depth-1).type.name!=="doc"&&m.node().childCount===1?o.delete(m.before(),m.after()):o.delete(h-l,h-l+f.nodeSize);const g=o.doc.nodeSize;return l+=k-g,!1}),s.size>0){const f=[...s].join(`
`);throw Error("Blocks with the following IDs could not be found in the editor: "+f)}return a.forEach(f=>_(o,f)),{insertedBlocks:r.map(f=>u.nodeToBlock(f,n)),removedBlocks:i}}function Ge(o,e,t,n,r){let s;if(e)if(typeof e=="string")s=u.inlineContentToNodes([e],o.pmSchema,n);else if(Array.isArray(e))s=u.inlineContentToNodes(e,o.pmSchema,n);else if(e.type==="tableContent")s=u.tableContentToNodes(e,o.pmSchema);else throw new u.UnreachableCaseError(e.type);else throw new Error("blockContent is required");const a=((r==null?void 0:r.document)??document).createDocumentFragment();for(const c of s)if(c.type.name!=="text"&&o.schema.inlineContentSchema[c.type.name]){const l=o.schema.inlineContentSpecs[c.type.name].implementation;if(l){const p=u.nodeToCustomInlineContent(c,o.schema.inlineContentSchema,o.schema.styleSchema),f=l.render.call({renderType:"dom",props:void 0},p,()=>{},o);if(f){if(a.appendChild(f.dom),f.contentDOM){const h=t.serializeFragment(c.content,r);f.contentDOM.dataset.editable="",f.contentDOM.appendChild(h)}continue}}}else if(c.type.name==="text"){let l=document.createTextNode(c.textContent);for(const p of c.marks.toReversed())if(p.type.name in o.schema.styleSpecs){const f=o.schema.styleSpecs[p.type.name].implementation.render(p.attrs.stringValue,o);f.contentDOM.appendChild(l),l=f.dom}else{const f=p.type.spec.toDOM(p,!0),h=E.DOMSerializer.renderSpec(document,f);h.contentDOM.appendChild(l),l=h.dom}a.appendChild(l)}else{const l=t.serializeFragment(E.Fragment.from([c]),r);a.appendChild(l)}return a}function qe(o,e,t,n){var f,h,k,m,g;const r=o.pmSchema.nodes.blockContainer,s=e.props||{};for(const[C,y]of Object.entries(o.schema.blockSchema[e.type].propSchema))!(C in s)&&y.default!==void 0&&(s[C]=y.default);const i=e.children||[],c=o.blockImplementations[e.type].implementation.render.call({renderType:"dom",props:void 0},{...e,props:s,children:i},o);if(c.contentDOM&&e.content){const C=Ge(o,e.content,t,e.type,n);c.contentDOM.appendChild(C)}if(o.pmSchema.nodes[e.type].isInGroup("bnBlock")){if(e.children&&e.children.length>0){const C=ie(o,e.children,t,n);(f=c.contentDOM)==null||f.append(C)}return c.dom}const p=(k=(h=r.spec)==null?void 0:h.toDOM)==null?void 0:k.call(h,r.create({id:e.id,...s}));return(m=p.contentDOM)==null||m.appendChild(c.dom),e.children&&e.children.length>0&&((g=p.contentDOM)==null||g.appendChild(ce(o,e.children,t,n))),p.dom}function ie(o,e,t,n){const s=((n==null?void 0:n.document)??document).createDocumentFragment();for(const i of e){const a=qe(o,i,t,n);s.appendChild(a)}return s}const ce=(o,e,t,n)=>{var a;const r=o.pmSchema.nodes.blockGroup,s=r.spec.toDOM(r.create({})),i=ie(o,e,t,n);return(a=s.contentDOM)==null||a.appendChild(i),s.dom},We=o=>(o.querySelectorAll('[data-content-type="numberedListItem"]').forEach(t=>{var r,s;const n=(s=(r=t.closest(".bn-block-outer"))==null?void 0:r.previousElementSibling)==null?void 0:s.querySelector('[data-content-type="numberedListItem"]');if(!n)t.setAttribute("data-index",t.getAttribute("data-start")||"1");else{const i=n.getAttribute("data-index");t.setAttribute("data-index",(parseInt(i||"0")+1).toString())}}),o),je=o=>(o.querySelectorAll('[data-content-type="checkListItem"] input').forEach(t=>{t.disabled=!0}),o),Ke=o=>(o.querySelectorAll('.bn-toggle-wrapper[data-show-children="false"]').forEach(t=>{t.setAttribute("data-show-children","true")}),o),Ye=o=>(o.querySelectorAll('[data-content-type="table"] table').forEach(t=>{t.setAttribute("style",`--default-cell-min-width: ${d.EMPTY_CELL_WIDTH}px;`),t.setAttribute("data-show-children","true")}),o),Je=o=>(o.querySelectorAll('[data-content-type="table"] table').forEach(t=>{var s;const n=document.createElement("div");n.className="tableWrapper";const r=document.createElement("div");r.className="tableWrapper-inner",n.appendChild(r),(s=t.parentElement)==null||s.appendChild(n),n.appendChild(t)}),o),Qe=o=>(o.querySelectorAll(".bn-inline-content:empty").forEach(t=>{const n=document.createElement("span");n.className="ProseMirror-trailingBreak",n.setAttribute("style","display: inline-block;"),t.appendChild(n)}),o),le=(o,e)=>{const t=E.DOMSerializer.fromSchema(o),n=[We,je,Ke,Ye,Je,Qe];return{serializeBlocks:(r,s)=>{let i=ce(e,r,t,s);for(const a of n)i=a(i);return i.outerHTML}}};function Xe(o){return o.transact(e=>{const t=u.getNearestBlockPos(e.doc,e.selection.anchor);if(e.selection instanceof D.CellSelection)return{type:"cell",anchorBlockId:t.node.attrs.id,anchorCellOffset:e.selection.$anchorCell.pos-t.posBeforeNode,headCellOffset:e.selection.$headCell.pos-t.posBeforeNode};if(e.selection instanceof T.NodeSelection)return{type:"node",anchorBlockId:t.node.attrs.id};{const n=u.getNearestBlockPos(e.doc,e.selection.head);return{type:"text",anchorBlockId:t.node.attrs.id,headBlockId:n.node.attrs.id,anchorOffset:e.selection.anchor-t.posBeforeNode,headOffset:e.selection.head-n.posBeforeNode}}})}function Ze(o,e){var r,s;const t=(r=d.getNodeById(e.anchorBlockId,o.doc))==null?void 0:r.posBeforeNode;if(t===void 0)throw new Error(`Could not find block with ID ${e.anchorBlockId} to update selection`);let n;if(e.type==="cell")n=D.CellSelection.create(o.doc,t+e.anchorCellOffset,t+e.headCellOffset);else if(e.type==="node")n=T.NodeSelection.create(o.doc,t+1);else{const i=(s=d.getNodeById(e.headBlockId,o.doc))==null?void 0:s.posBeforeNode;if(i===void 0)throw new Error(`Could not find block with ID ${e.headBlockId} to update selection`);n=T.TextSelection.create(o.doc,t+e.anchorOffset,i+e.headOffset)}o.setSelection(n)}function U(o){return o.map(e=>e.type==="columnList"?e.children.map(t=>U(t.children)).flat():{...e,children:U(e.children)}).flat()}function ae(o,e,t){o.transact(n=>{var i;const r=((i=o.getSelection())==null?void 0:i.blocks)||[o.getTextCursorPosition().block],s=Xe(o);o.removeBlocks(r),o.insertBlocks(U(r),e,t),Ze(n,s)})}function de(o){return!o||o.type!=="columnList"}function ue(o,e,t){let n,r;if(e?e.children.length>0?(n=e.children[e.children.length-1],r="after"):(n=e,r="before"):t&&(n=t,r="before"),!n||!r)return;const s=o.getParentBlock(n);return de(s)?{referenceBlock:n,placement:r}:ue(o,r==="after"?n:o.getPrevBlock(n),s)}function pe(o,e,t){let n,r;if(e?e.children.length>0?(n=e.children[0],r="before"):(n=e,r="after"):t&&(n=t,r="after"),!n||!r)return;const s=o.getParentBlock(n);return de(s)?{referenceBlock:n,placement:r}:pe(o,r==="before"?n:o.getNextBlock(n),s)}function et(o){o.transact(()=>{const e=o.getSelection(),t=(e==null?void 0:e.blocks[0])||o.getTextCursorPosition().block,n=ue(o,o.getPrevBlock(t),o.getParentBlock(t));n&&ae(o,n.referenceBlock,n.placement)})}function tt(o){o.transact(()=>{const e=o.getSelection(),t=(e==null?void 0:e.blocks[(e==null?void 0:e.blocks.length)-1])||o.getTextCursorPosition().block,n=pe(o,o.getNextBlock(t),o.getParentBlock(t));n&&ae(o,n.referenceBlock,n.placement)})}function ot(o,e,t){const{$from:n,$to:r}=o.selection,s=n.blockRange(r,m=>m.childCount>0&&(m.type.name==="blockGroup"||m.type.name==="column"));if(!s)return!1;const i=s.startIndex;if(i===0)return!1;const c=s.parent.child(i-1);if(c.type!==e)return!1;const l=c.lastChild&&c.lastChild.type===t,p=E.Fragment.from(l?e.create():null),f=new E.Slice(E.Fragment.from(e.create(null,E.Fragment.from(t.create(null,p)))),l?3:1,0),h=s.start,k=s.end;return o.step(new F.ReplaceAroundStep(h-(l?3:1),k,h,k,f,1,!0)).scrollIntoView(),!0}function fe(o){return o.transact(e=>ot(e,o.pmSchema.nodes.blockContainer,o.pmSchema.nodes.blockGroup))}function nt(o){o._tiptapEditor.commands.liftListItem("blockContainer")}function rt(o){return o.transact(e=>{const{bnBlock:t}=u.getBlockInfoFromTransaction(e);return e.doc.resolve(t.beforePos).nodeBefore!==null})}function st(o){return o.transact(e=>{const{bnBlock:t}=u.getBlockInfoFromTransaction(e);return e.doc.resolve(t.beforePos).depth>1})}function he(o,e){const t=typeof e=="string"?e:e.id,n=u.getPmSchema(o),r=d.getNodeById(t,o);if(r)return u.nodeToBlock(r.node,n)}function me(o,e){const t=typeof e=="string"?e:e.id,n=d.getNodeById(t,o),r=u.getPmSchema(o);if(!n)return;const i=o.resolve(n.posBeforeNode).nodeBefore;if(i)return u.nodeToBlock(i,r)}function ke(o,e){const t=typeof e=="string"?e:e.id,n=d.getNodeById(t,o),r=u.getPmSchema(o);if(!n)return;const i=o.resolve(n.posBeforeNode+n.node.nodeSize).nodeAfter;if(i)return u.nodeToBlock(i,r)}function ge(o,e){const t=typeof e=="string"?e:e.id,n=u.getPmSchema(o),r=d.getNodeById(t,o);if(!r)return;const s=o.resolve(r.posBeforeNode),i=s.node(),a=s.node(-1),c=a.type.name!=="doc"?i.type.name==="blockGroup"?a:i:void 0;if(c)return u.nodeToBlock(c,n)}class it{constructor(e){this.editor=e}get document(){return this.editor.transact(e=>u.docToBlocks(e.doc,this.editor.pmSchema))}getBlock(e){return this.editor.transact(t=>he(t.doc,e))}getPrevBlock(e){return this.editor.transact(t=>me(t.doc,e))}getNextBlock(e){return this.editor.transact(t=>ke(t.doc,e))}getParentBlock(e){return this.editor.transact(t=>ge(t.doc,e))}forEachBlock(e,t=!1){const n=this.document.slice();t&&n.reverse();function r(s){for(const i of s){if(e(i)===!1)return!1;const a=t?i.children.slice().reverse():i.children;if(!r(a))return!1}return!0}r(n)}insertBlocks(e,t,n="before"){return this.editor.transact(r=>re(r,e,t,n))}updateBlock(e,t){return this.editor.transact(n=>d.updateBlock(n,e,t))}removeBlocks(e){return this.editor.transact(t=>V(t,e,[]).removedBlocks)}replaceBlocks(e,t){return this.editor.transact(n=>V(n,e,t))}canNestBlock(){return rt(this.editor)}nestBlock(){fe(this.editor)}canUnnestBlock(){return st(this.editor)}unnestBlock(){nt(this.editor)}moveBlocksUp(){return et(this.editor)}moveBlocksDown(){return tt(this.editor)}}class ct extends z.EventEmitter{constructor(e){super(),this.editor=e,e.on("create",()=>{e._tiptapEditor.on("update",({transaction:t,appendedTransactions:n})=>{this.emit("onChange",{editor:e,transaction:t,appendedTransactions:n})}),e._tiptapEditor.on("selectionUpdate",({transaction:t})=>{this.emit("onSelectionChange",{editor:e,transaction:t})}),e._tiptapEditor.on("mount",()=>{this.emit("onMount",{editor:e})}),e._tiptapEditor.on("unmount",()=>{this.emit("onUnmount",{editor:e})})})}onChange(e,t=!0){const n=({transaction:r,appendedTransactions:s})=>{!t&&J(r)||e(this.editor,{getChanges(){return B.getBlocksChangedByTransaction(r,s)}})};return this.on("onChange",n),()=>{this.off("onChange",n)}}onSelectionChange(e,t=!1){const n=r=>{!t&&J(r.transaction)||e(this.editor)};return this.on("onSelectionChange",n),()=>{this.off("onSelectionChange",n)}}onMount(e){return this.on("onMount",e),()=>{this.off("onMount",e)}}onUnmount(e){return this.on("onUnmount",e),()=>{this.off("onUnmount",e)}}}function J(o){return!!o.getMeta("y-sync$")}function lt(o){return Array.prototype.indexOf.call(o.parentElement.childNodes,o)}function at(o){return o.nodeType===3&&!/\S/.test(o.nodeValue||"")}function dt(o){o.querySelectorAll("li > ul, li > ol").forEach(e=>{const t=lt(e),n=e.parentElement,r=Array.from(n.childNodes).slice(t+1);e.remove(),r.forEach(s=>{s.remove()}),n.insertAdjacentElement("afterend",e),r.reverse().forEach(s=>{if(at(s))return;const i=document.createElement("li");i.append(s),e.insertAdjacentElement("afterend",i)}),n.childNodes.length===0&&n.remove()})}function ut(o){o.querySelectorAll("li + ul, li + ol").forEach(e=>{var s,i;const t=e.previousElementSibling,n=document.createElement("div");t.insertAdjacentElement("afterend",n),n.append(t);const r=document.createElement("div");for(r.setAttribute("data-node-type","blockGroup"),n.append(r);((s=n.nextElementSibling)==null?void 0:s.nodeName)==="UL"||((i=n.nextElementSibling)==null?void 0:i.nodeName)==="OL";)r.append(n.nextElementSibling)})}let Q=null;function pt(){return Q||(Q=document.implementation.createHTMLDocument("title"))}function ft(o){if(typeof o=="string"){const e=pt().createElement("div");e.innerHTML=o,o=e}return dt(o),ut(o),o}function G(o,e){const t=ft(o),r=E.DOMParser.fromSchema(e).parse(t,{topNode:e.nodes.blockGroup.create()}),s=[];for(let i=0;i<r.childCount;i++)s.push(u.nodeToBlock(r.child(i),e));return s}function ht(o,e){const t=e.value?e.value:"",n={};e.lang&&(n["data-language"]=e.lang);let r={type:"element",tagName:"code",properties:n,children:[{type:"text",value:t}]};return e.meta&&(r.data={meta:e.meta}),o.patch(e,r),r=o.applyData(e,r),r={type:"element",tagName:"pre",properties:{},children:[r]},o.patch(e,r),r}function mt(o,e){var s;const t=String((e==null?void 0:e.url)||""),n=e!=null&&e.title?String(e.title):void 0;let r={type:"element",tagName:"video",properties:{src:t,"data-name":n,"data-url":t,controls:!0},children:[]};return(s=o.patch)==null||s.call(o,e,r),r=o.applyData?o.applyData(e,r):r,r}function q(o){return Oe.unified().use(Re.default).use($e.default).use(Ve.default,{handlers:{...R.defaultHandlers,image:(t,n)=>{const r=String((n==null?void 0:n.url)||"");return d.isVideoUrl(r)?mt(t,n):R.defaultHandlers.image(t,n)},code:ht,blockquote:(t,n)=>{const r={type:"element",tagName:"blockquote",properties:{},children:t.wrap(t.all(n),!1)};return t.patch(n,r),t.applyData(n,r)}}}).use(Ue.default).processSync(o).value}function be(o,e){const t=q(o);return G(t,e)}class kt{constructor(e){this.editor=e}blocksToHTMLLossy(e=this.editor.document){return B.createExternalHTMLExporter(this.editor.pmSchema,this.editor).exportBlocks(e,{})}blocksToFullHTML(e=this.editor.document){return le(this.editor.pmSchema,this.editor).serializeBlocks(e,{})}tryParseHTMLToBlocks(e){return G(e,this.editor.pmSchema)}blocksToMarkdownLossy(e=this.editor.document){return B.blocksToMarkdown(e,this.editor.pmSchema,this.editor,{})}tryParseMarkdownToBlocks(e){return be(e,this.editor.pmSchema)}pasteHTML(e,t=!1){var r;let n=e;if(!t){const s=this.tryParseHTMLToBlocks(e);n=this.blocksToFullHTML(s)}n&&((r=this.editor.prosemirrorView)==null||r.pasteHTML(n))}pasteText(e){var t;return(t=this.editor.prosemirrorView)==null?void 0:t.pasteText(e)}pasteMarkdown(e){const t=q(e);return this.pasteHTML(t)}}const W=["vscode-editor-data","blocknote/html","text/markdown","text/html","text/plain","Files"];function gt(o,e){if(!o.startsWith(".")||!e.startsWith("."))throw new Error("The strings provided are not valid file extensions.");return o===e}function bt(o,e){const t=o.split("/"),n=e.split("/");if(t.length!==2)throw new Error(`The string ${o} is not a valid MIME type.`);if(n.length!==2)throw new Error(`The string ${e} is not a valid MIME type.`);return t[1]==="*"||n[1]==="*"?t[0]===n[0]:(t[0]==="*"||n[0]==="*"||t[0]===n[0])&&t[1]===n[1]}function X(o,e,t,n="after"){let r;return Array.isArray(e.content)&&e.content.length===0?r=o.updateBlock(e,t).id:r=o.insertBlocks([t],e,n)[0].id,r}async function Be(o,e){var s;if(!e.uploadFile){console.warn("Attempted ot insert file, but uploadFile is not set in the BlockNote editor options");return}const t="dataTransfer"in o?o.dataTransfer:o.clipboardData;if(t===null)return;let n=null;for(const i of W)if(t.types.includes(i)){n=i;break}if(n!=="Files")return;const r=t.items;if(r){o.preventDefault();for(let i=0;i<r.length;i++){let a="file";for(const l of Object.values(e.schema.blockSpecs))for(const p of((s=l.implementation.meta)==null?void 0:s.fileBlockAccept)||[]){const f=p.startsWith("."),h=r[i].getAsFile();if(h&&(!f&&h.type&&bt(r[i].type,p)||f&>("."+h.name.split(".").pop(),p))){a=l.config.type;break}}const c=r[i].getAsFile();if(c){const l={type:a,props:{name:c.name}};let p;if(o.type==="paste"){const k=e.getTextCursorPosition().block;p=X(e,k,l)}else if(o.type==="drop"){const k={left:o.clientX,top:o.clientY},m=e.prosemirrorView.posAtCoords(k);if(!m)return;p=e.transact(g=>{var x;const C=u.getNearestBlockPos(g.doc,m.pos),y=(x=e.domElement)==null?void 0:x.querySelector(`[data-id="${C.node.attrs.id}"]`),P=y==null?void 0:y.getBoundingClientRect();return X(e,e.getBlock(C.node.attrs.id),l,P&&(P.top+P.bottom)/2>k.top?"before":"after")})}else return;const f=await e.uploadFile(c,p),h=typeof f=="string"?{props:{url:f}}:{...f};e.updateBlock(p,h)}}}}const Bt=o=>S.Extension.create({name:"dropFile",addProseMirrorPlugins(){return[new T.Plugin({props:{handleDOMEvents:{drop(e,t){if(!o.isEditable)return;let n=null;for(const r of W)if(t.dataTransfer.types.includes(r)){n=r;break}return n===null?!0:n==="Files"?(Be(t,o),!0):!1}}}})]}}),St=/(^|\n) {0,3}#{1,6} {1,8}[^\n]{1,64}\r?\n\r?\n\s{0,32}\S/,Ct=/(_|__|\*|\*\*|~~|==|\+\+)(?!\s)(?:[^\s](?:.{0,62}[^\s])?|\S)(?=\1)/,yt=/\[[^\]]{1,128}\]\(https?:\/\/\S{1,999}\)/,Tt=/(?:\s|^)`(?!\s)(?:[^\s`](?:[^`]{0,46}[^\s`])?|[^\s`])`([^\w]|$)/,xt=/(?:^|\n)\s{0,5}-\s{1}[^\n]+\n\s{0,15}-\s/,Et=/(?:^|\n)\s{0,5}\d+\.\s{1}[^\n]+\n\s{0,15}\d+\.\s/,Pt=/\n{2} {0,3}-{2,48}\n{2}/,It=/(?:\n|^)(```|~~~|\$\$)(?!`|~)[^\s]{0,64} {0,64}[^\n]{0,64}\n[\s\S]{0,9999}?\s*\1 {0,64}(?:\n+|$)/,Mt=/(?:\n|^)(?!\s)\w[^\n]{0,64}\r?\n(-|=)\1{0,64}\n\n\s{0,64}(\w|$)/,wt=/(?:^|(\r?\n\r?\n))( {0,3}>[^\n]{1,333}\n){1,999}($|(\r?\n))/,vt=/^\s*\|(.+\|)+\s*$/m,At=/^\s*\|(\s*[-:]+[-:]\s*\|)+\s*$/m,Nt=/^\s*\|(.+\|)+\s*$/m,Lt=o=>St.test(o)||Ct.test(o)||yt.test(o)||Tt.test(o)||xt.test(o)||Et.test(o)||Pt.test(o)||It.test(o)||Mt.test(o)||wt.test(o)||vt.test(o)||At.test(o)||Nt.test(o);async function _t(o,e){const{schema:t}=e.state;if(!o.clipboardData)return!1;const n=o.clipboardData.getData("text/plain");if(!n)return!1;if(!t.nodes.codeBlock)return e.pasteText(n),!0;const r=o.clipboardData.getData("vscode-editor-data"),s=r?JSON.parse(r):void 0,i=s==null?void 0:s.mode;return i?(e.pasteHTML(`<pre><code class="language-${i}">${n.replace(/\r\n?/g,`
`)}</code></pre>`),!0):!1}function Dt({event:o,editor:e,prioritizeMarkdownOverHTML:t,plainTextAsMarkdown:n}){var a;if(e.transact(c=>c.selection.$from.parent.type.spec.code&&c.selection.$to.parent.type.spec.code)){const c=(a=o.clipboardData)==null?void 0:a.getData("text/plain");if(c)return e.pasteText(c),!0}let s;for(const c of W)if(o.clipboardData.types.includes(c)){s=c;break}if(!s)return!0;if(s==="vscode-editor-data")return _t(o,e.prosemirrorView),!0;if(s==="Files")return Be(o,e),!0;const i=o.clipboardData.getData(s);if(s==="blocknote/html")return e.pasteHTML(i,!0),!0;if(s==="text/markdown")return e.pasteMarkdown(i),!0;if(t){const c=o.clipboardData.getData("text/plain");if(Lt(c))return e.pasteMarkdown(c),!0}return s==="text/html"?(e.pasteHTML(i),!0):n?(e.pasteMarkdown(i),!0):(e.pasteText(i),!0)}const Ft=(o,e)=>S.Extension.create({name:"pasteFromClipboard",addProseMirrorPlugins(){return[new T.Plugin({props:{handleDOMEvents:{paste(t,n){if(n.preventDefault(),!!o.isEditable)return e({event:n,editor:o,defaultPasteHandler:({prioritizeMarkdownOverHTML:r=!0,plainTextAsMarkdown:s=!0}={})=>Dt({event:n,editor:o,prioritizeMarkdownOverHTML:r,plainTextAsMarkdown:s})})}}}})]}});function Ot(o,e,t){var a;let n=!1;const r=o.state.selection instanceof D.CellSelection;if(!r){const c=o.state.doc.slice(o.state.selection.from,o.state.selection.to,!1).content,l=[];for(let p=0;p<c.childCount;p++)l.push(c.child(p));n=l.find(p=>p.type.isInGroup("bnBlock")||p.type.name==="blockGroup"||p.type.spec.group==="blockContent")===void 0,n&&(e=c)}let s;const i=B.createExternalHTMLExporter(o.state.schema,t);if(r){((a=e.firstChild)==null?void 0:a.type.name)==="table"&&(e=e.firstChild.content);const c=u.contentNodeToTableContent(e,t.schema.inlineContentSchema,t.schema.styleSchema);s=`<table>${i.exportInlineContent(c,{})}</table>`}else if(n){const c=u.contentNodeToInlineContent(e,t.schema.inlineContentSchema,t.schema.styleSchema);s=i.exportInlineContent(c,{})}else{const c=B.fragmentToBlocks(e);s=i.exportBlocks(c,{})}return s}function j(o,e){"node"in o.state.selection&&o.state.selection.node.type.spec.group==="blockContent"&&e.transact(i=>i.setSelection(new T.NodeSelection(i.doc.resolve(o.state.selection.from-1))));const t=o.serializeForClipboard(o.state.selection.content()).dom.innerHTML,n=o.state.selection.content().content,r=Ot(o,n,e),s=B.cleanHTMLToMarkdown(r);return{clipboardHTML:t,externalHTML:r,markdown:s}}const Z=()=>{const o=window.getSelection();if(!o||o.isCollapsed)return!0;let e=o.focusNode;for(;e;){if(e instanceof HTMLElement&&e.getAttribute("contenteditable")==="false")return!0;e=e.parentElement}return!1},ee=(o,e,t)=>{t.preventDefault(),t.clipboardData.clearData();const{clipboardHTML:n,externalHTML:r,markdown:s}=j(e,o);t.clipboardData.setData("blocknote/html",n),t.clipboardData.setData("text/html",r),t.clipboardData.setData("text/plain",s)},Ht=o=>S.Extension.create({name:"copyToClipboard",addProseMirrorPlugins(){return[new T.Plugin({props:{handleDOMEvents:{copy(e,t){return Z()||ee(o,e,t),!0},cut(e,t){return Z()||(ee(o,e,t),e.editable&&e.dispatch(e.state.tr.deleteSelection())),!0},dragstart(e,t){if(!("node"in e.state.selection)||e.state.selection.node.type.spec.group!=="blockContent")return;o.transact(i=>i.setSelection(new T.NodeSelection(i.doc.resolve(e.state.selection.from-1)))),t.preventDefault(),t.dataTransfer.clearData();const{clipboardHTML:n,externalHTML:r,markdown:s}=j(e,o);return t.dataTransfer.setData("blocknote/html",n),t.dataTransfer.setData("text/html",r),t.dataTransfer.setData("text/plain",s),!0}}}})]}}),$t=S.Extension.create({name:"blockBackgroundColor",addGlobalAttributes(){return[{types:["tableCell","tableHeader"],attributes:{backgroundColor:d.getBackgroundColorAttribute()}}]}}),Rt=S.Node.create({name:"hardBreak",inline:!0,group:"inline",selectable:!1,linebreakReplacement:!0,priority:10,parseHTML(){return[{tag:"br"}]},renderHTML({HTMLAttributes:o}){return["br",S.mergeAttributes(this.options.HTMLAttributes,o)]},renderText(){return`
`}}),Se=(o,e)=>{var a;const t=o.resolve(e),n=t.depth-1,r=t.before(n),s=o.resolve(r).nodeAfter;return s?(a=s.type.spec.group)!=null&&a.includes("bnBlock")?u.getBlockInfoFromResolvedPos(o.resolve(r)):Se(o,r):void 0},L=(o,e)=>{const t=o.resolve(e),n=t.index();if(n===0)return;const r=t.posAtIndex(n-1);return u.getBlockInfoFromResolvedPos(o.resolve(r))},N=(o,e)=>{const t=o.resolve(e),n=t.index();if(n===t.node().childCount-1)return;const r=t.posAtIndex(n+1);return u.getBlockInfoFromResolvedPos(o.resolve(r))},Ce=(o,e)=>{for(;e.childContainer;){const t=e.childContainer.node,n=o.resolve(e.childContainer.beforePos+1).posAtIndex(t.childCount-1);e=u.getBlockInfoFromResolvedPos(o.resolve(n))}return e},Vt=(o,e)=>o.isBlockContainer&&o.blockContent.node.type.spec.content==="inline*"&&o.blockContent.node.childCount>0&&e.isBlockContainer&&e.blockContent.node.type.spec.content==="inline*",Ut=(o,e,t,n)=>{if(!n.isBlockContainer)throw new Error(`Attempted to merge block at position ${n.bnBlock.beforePos} into previous block at position ${t.bnBlock.beforePos}, but next block is not a block container`);if(n.childContainer){const r=o.doc.resolve(n.childContainer.beforePos+1),s=o.doc.resolve(n.childContainer.afterPos-1),i=r.blockRange(s);if(e){const a=o.doc.resolve(n.bnBlock.beforePos);o.tr.lift(i,a.depth)}}if(e){if(!t.isBlockContainer)throw new Error(`Attempted to merge block at position ${n.bnBlock.beforePos} into previous block at position ${t.bnBlock.beforePos}, but previous block is not a block container`);e(o.tr.delete(t.blockContent.afterPos-1,n.blockContent.beforePos+1))}return!0},te=o=>({state:e,dispatch:t})=>{const n=e.doc.resolve(o),r=u.getBlockInfoFromResolvedPos(n),s=L(e.doc,r.bnBlock.beforePos);if(!s)return!1;const i=Ce(e.doc,s);return Vt(i,r)?Ut(e,t,i,r):!1},zt=S.Extension.create({priority:50,addKeyboardShortcuts(){const o=()=>this.editor.commands.first(({chain:n,commands:r})=>[()=>r.deleteSelection(),()=>r.undoInputRule(),()=>r.command(({state:s})=>{const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;const a=s.selection.from===i.blockContent.beforePos+1,c=i.blockContent.node.type.name==="paragraph";return a&&!c?r.command(d.updateBlockCommand(i.bnBlock.beforePos,{type:"paragraph",props:{}})):!1}),()=>r.command(({state:s})=>{const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;const{blockContent:a}=i;return s.selection.from===a.beforePos+1?r.liftListItem("blockContainer"):!1}),()=>r.command(({state:s})=>{const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;const{bnBlock:a,blockContent:c}=i,l=L(s.doc,i.bnBlock.beforePos);if(!l||!l.isBlockContainer||l.blockContent.node.type.spec.content!=="inline*")return!1;const p=s.selection.from===c.beforePos+1,f=s.selection.empty,h=a.beforePos;return p&&f?n().command(te(h)).scrollIntoView().run():!1}),()=>r.command(({state:s,tr:i,dispatch:a})=>{const c=u.getBlockInfoFromSelection(s);if(!c.isBlockContainer)return!1;const l=L(s.doc,c.bnBlock.beforePos);if(!l||l.isBlockContainer)return!1;if(a){const p=l.bnBlock.afterPos-1,f=i.doc.resolve(p-1);return i.delete(c.bnBlock.beforePos,c.bnBlock.afterPos),i.insert(f.pos,c.bnBlock.node),i.setSelection(T.TextSelection.near(i.doc.resolve(f.pos+1))),!0}return!1}),()=>r.command(({state:s,tr:i,dispatch:a})=>{const c=u.getBlockInfoFromSelection(s);if(!c.isBlockContainer||!(i.selection.from===c.blockContent.beforePos+1))return!1;const p=i.doc.resolve(c.bnBlock.beforePos);if(p.nodeBefore||p.node().type.name!=="column")return!1;const k=i.doc.resolve(c.bnBlock.beforePos),m=i.doc.resolve(k.before()),g=m.before();return a&&(i.delete(c.bnBlock.beforePos,c.bnBlock.afterPos),_(i,g),m.pos===g+1?(i.insert(g,c.bnBlock.node),i.setSelection(T.TextSelection.near(i.doc.resolve(g)))):(i.insert(m.pos-1,c.bnBlock.node),i.setSelection(T.TextSelection.near(i.doc.resolve(m.pos))))),!0}),()=>r.command(({state:s})=>{var c;const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;if(i.blockContent.node.childCount===0&&i.blockContent.node.type.spec.content==="inline*"){const l=L(s.doc,i.bnBlock.beforePos);if(!l||!l.isBlockContainer)return!1;let p=n();if(i.childContainer&&p.insertContentAt(i.bnBlock.afterPos,(c=i.childContainer)==null?void 0:c.node.content),l.blockContent.node.type.spec.content==="tableRow+"){const g=i.bnBlock.beforePos-1-1-1-1-1;p=p.setTextSelection(g)}else if(l.blockContent.node.type.spec.content==="")p=p.setNodeSelection(l.blockContent.beforePos);else{const f=l.blockContent.afterPos-1;p=p.setTextSelection(f)}return p.deleteRange({from:i.bnBlock.beforePos,to:i.bnBlock.afterPos}).scrollIntoView().run()}return!1}),()=>r.command(({state:s})=>{const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;const a=s.selection.from===i.blockContent.beforePos+1,c=s.selection.empty,l=L(s.doc,i.bnBlock.beforePos);if(l&&a&&c){const p=Ce(s.doc,l);if(!p.isBlockContainer)return!1;if(p.blockContent.node.type.spec.content===""||p.blockContent.node.type.spec.content==="inline*"&&p.blockContent.node.childCount===0)return n().cut({from:i.bnBlock.beforePos,to:i.bnBlock.afterPos},p.bnBlock.afterPos).deleteRange({from:p.bnBlock.beforePos,to:p.bnBlock.afterPos}).run()}return!1})]),e=()=>this.editor.commands.first(({chain:n,commands:r})=>[()=>r.deleteSelection(),()=>r.command(({state:s})=>{var h;const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer||!i.childContainer)return!1;const{blockContent:a,childContainer:c}=i,l=s.selection.from===a.afterPos-1,p=s.selection.empty,f=u.getBlockInfoFromResolvedPos(s.doc.resolve(c.beforePos+1));if(!f.isBlockContainer)return!1;if(l&&p){const k=f.blockContent.node,m=k.type.spec.content==="inline*",g=a.node.type.spec.content==="inline*";return n().insertContentAt(f.bnBlock.afterPos,((h=f.childContainer)==null?void 0:h.node.content)||E.Fragment.empty).deleteRange(c.node.childCount===1?{from:c.beforePos,to:c.afterPos}:{from:f.bnBlock.beforePos,to:f.bnBlock.afterPos}).insertContentAt(s.selection.from,m&&g?k.content:null).setTextSelection(s.selection.from).scrollIntoView().run()}return!1}),()=>r.command(({state:s})=>{const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;const{bnBlock:a,blockContent:c}=i,l=N(s.doc,i.bnBlock.beforePos);if(!l||!l.isBlockContainer)return!1;const p=s.selection.from===c.afterPos-1,f=s.selection.empty,h=a.afterPos;return p&&f?n().command(te(h)).scrollIntoView().run():!1}),()=>r.command(({state:s,tr:i,dispatch:a})=>{const c=u.getBlockInfoFromSelection(s);if(!c.isBlockContainer)return!1;const l=N(s.doc,c.bnBlock.beforePos);if(!l||l.isBlockContainer)return!1;if(a){const p=l.bnBlock.beforePos+1,f=i.doc.resolve(p+1);return i.delete(f.pos,f.pos+f.nodeAfter.nodeSize),_(i,l.bnBlock.beforePos),i.insert(c.bnBlock.afterPos,f.nodeAfter),i.setSelection(T.TextSelection.near(i.doc.resolve(f.pos))),!0}return!1}),()=>r.command(({state:s,tr:i,dispatch:a})=>{const c=u.getBlockInfoFromSelection(s);if(!c.isBlockContainer||!(i.selection.from===c.blockContent.afterPos-1))return!1;const p=i.doc.resolve(c.bnBlock.afterPos);if(p.nodeAfter||p.node().type.name!=="column")return!1;const k=i.doc.resolve(c.bnBlock.afterPos),m=i.doc.resolve(k.after()),g=m.after();if(a){const C=m.pos===g-1?g:m.pos+1,y=u.getBlockInfoFromResolvedPos(i.doc.resolve(C));i.delete(y.bnBlock.beforePos,y.bnBlock.afterPos),_(i,g-m.node().nodeSize),i.insert(k.pos,y.bnBlock.node),i.setSelection(T.TextSelection.near(i.doc.resolve(C)))}return!0}),()=>r.command(({state:s})=>{var p;const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;const{blockContent:a}=i,c=s.selection.from===a.afterPos-1,l=s.selection.empty;if(c&&l){const f=(C,y)=>{const P=N(C,y);if(P)return P;const x=Se(C,y);if(x)return f(C,x.bnBlock.beforePos)},h=f(s.doc,i.bnBlock.beforePos);if(!h||!h.isBlockContainer)return!1;const k=h.blockContent.node,m=k.type.spec.content==="inline*",g=a.node.type.spec.content==="inline*";return n().insertContentAt(h.bnBlock.afterPos,((p=h.childContainer)==null?void 0:p.node.content)||E.Fragment.empty).deleteRange({from:h.bnBlock.beforePos,to:h.bnBlock.afterPos}).insertContentAt(s.selection.from,m&&g?k.content:null).setTextSelection(s.selection.from).scrollIntoView().run()}return!1}),()=>r.command(({state:s})=>{const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;if(i.blockContent.node.childCount===0&&i.blockContent.node.type.spec.content==="inline*"){const c=N(s.doc,i.bnBlock.beforePos);if(!c||!c.isBlockContainer)return!1;let l=n();if(c.blockContent.node.type.spec.content==="tableRow+"){const m=i.bnBlock.afterPos+1+1+1+1+1;l=l.setTextSelection(m)}else c.blockContent.node.type.spec.content===""?l=l.setNodeSelection(c.blockContent.beforePos):l=l.setTextSelection(c.blockContent.beforePos+1);return l.deleteRange({from:i.bnBlock.beforePos,to:i.bnBlock.afterPos}).scrollIntoView().run()}return!1}),()=>r.command(({state:s})=>{const i=u.getBlockInfoFromSelection(s);if(!i.isBlockContainer)return!1;const a=s.selection.from===i.blockContent.afterPos-1,c=s.selection.empty,l=N(s.doc,i.bnBlock.beforePos);if(!l||!l.isBlockContainer)return!1;if(l&&a&&c&&(l.blockContent.node.type.spec.content===""||l.blockContent.node.type.spec.content==="inline*"&&l.blockContent.node.childCount===0)){const f=l.bnBlock.node.lastChild.content;return n().deleteRange({from:l.bnBlock.beforePos,to:l.bnBlock.afterPos}).insertContentAt(i.bnBlock.afterPos,l.bnBlock.node.childCount===2?f:null).run()}return!1})]),t=(n=!1)=>this.editor.commands.first(({commands:r,tr:s})=>[()=>r.command(({state:i})=>{const a=u.getBlockInfoFromSelection(i);if(!a.isBlockContainer)return!1;const{bnBlock:c,blockContent:l}=a,{depth:p}=i.doc.resolve(c.beforePos),f=i.selection.$anchor.parentOffset===0,h=i.selection.anchor===i.selection.head,k=l.node.childCount===0,m=p>1;return f&&h&&k&&m?r.liftListItem("blockContainer"):!1}),()=>r.command(({state:i})=>{var l;const a=u.getBlockInfoFromSelection(i),c=((l=this.options.editor.schema.blockSchema[a.blockNoteType].meta)==null?void 0:l.hardBreakShortcut)??"shift+enter";if(c==="none")return!1;if(c==="shift+enter"&&n||c==="enter"){const p=s.storedMarks||s.selection.$head.marks().filter(f=>this.editor.extensionManager.splittableMarks.includes(f.type.name));return s.insert(s.selection.head,s.doc.type.schema.nodes.hardBreak.create()).ensureMarks(p),!0}return!1}),()=>r.command(({state:i,dispatch:a,tr:c})=>{var g;const l=u.getBlockInfoFromSelection(i);if(!l.isBlockContainer)return!1;const{bnBlock:p,blockContent:f}=l,h=i.selection.$anchor.parentOffset===0,k=i.selection.anchor===i.selection.head,m=f.node.childCount===0;if(h&&k&&m){const C=p.afterPos,y=C+2;if(a){const P=i.schema.nodes.blockContainer.createAndFill(void 0,[i.schema.nodes.paragraph.createAndFill()||void 0,(g=l.childContainer)==null?void 0:g.node].filter(x=>x!==void 0));c.insert(C,P).setSelection(new T.TextSelection(c.doc.resolve(y))).scrollIntoView(),l.childContainer&&c.delete(l.childContainer.beforePos,l.childContainer.afterPos)}return!0}return!1}),()=>r.command(({state:i,chain:a})=>{const c=u.getBlockInfoFromSelection(i);if(!c.isBlockContainer)return!1;const{blockContent:l}=c,p=i.selection.$anchor.parentOffset===0;return l.node.childCount===0?!1:(a().deleteSelection().command(d.splitBlockCommand(i.selection.from,p,p)).run(),!0)})]);return{Backspace:o,Delete:e,Enter:()=>t(),"Shift-Enter":()=>t(!0),Tab:()=>{var n,r;return this.options.tabBehavior!=="prefer-indent"&&((n=this.options.editor.getExtension(B.FormattingToolbarExtension))!=null&&n.store.state||((r=this.options.editor.getExtension(d.FilePanelExtension))==null?void 0:r.store.state)!==void 0)?!1:fe(this.options.editor)},"Shift-Tab":()=>{var n,r;return this.options.tabBehavior!=="prefer-indent"&&((n=this.options.editor.getExtension(B.FormattingToolbarExtension))!=null&&n.store.state||((r=this.options.editor.getExtension(d.FilePanelExtension))==null?void 0:r.store.state)!==void 0)?!1:this.editor.commands.liftListItem("blockContainer")},"Shift-Mod-ArrowUp":()=>(this.options.editor.moveBlocksUp(),!0),"Shift-Mod-ArrowDown":()=>(this.options.editor.moveBlocksDown(),!0),"Mod-z":()=>this.options.editor.undo(),"Mod-y":()=>this.options.editor.redo(),"Shift-Mod-z":()=>this.options.editor.redo()}}}),Gt=S.Mark.create({name:"insertion",inclusive:!1,excludes:"deletion modification insertion",addAttributes(){return{id:{default:null,validate:"number"}}},extendMarkSchema(o){return o.name!=="insertion"?{}:{blocknoteIgnore:!0,inclusive:!1,toDOM(e,t){return["ins",{"data-id":String(e.attrs.id),"data-inline":String(t),...!t&&{style:"display: contents"}},0]},parseDOM:[{tag:"ins",getAttrs(e){return e.dataset.id?{id:parseInt(e.dataset.id,10)}:!1}}]}}}),qt=S.Mark.create({name:"deletion",inclusive:!1,excludes:"insertion modification deletion",addAttributes(){return{id:{default:null,validate:"number"}}},extendMarkSchema(o){return o.name!=="deletion"?{}:{blocknoteIgnore:!0,inclusive:!1,toDOM(e,t){return["del",{"data-id":String(e.attrs.id),"data-inline":String(t),...!t&&{style:"display: contents"}},0]},parseDOM:[{tag:"del",getAttrs(e){return e.dataset.id?{id:parseInt(e.dataset.id,10)}:!1}}]}}}),Wt=S.Mark.create({name:"modification",inclusive:!1,excludes:"deletion insertion",addAttributes(){return{id:{default:null,validate:"number"},type:{validate:"string"},attrName:{default:null,validate:"string|null"},previousValue:{default:null},newValue:{default:null}}},extendMarkSchema(o){return o.name!=="modification"?{}:{blocknoteIgnore:!0,inclusive:!1,toDOM(e,t){return[t?"span":"div",{"data-type":"modification","data-id":String(e.attrs.id),"data-mod-type":e.attrs.type,"data-mod-prev-val":JSON.stringify(e.attrs.previousValue),"data-mod-new-val":JSON.stringify(e.attrs.newValue)},0]},parseDOM:[{tag:"span[data-type='modification']",getAttrs(e){return e.dataset.id?{id:parseInt(e.dataset.id,10),type:e.dataset.modType,previousValue:e.dataset.modPrevVal,newValue:e.dataset.modNewVal}:!1}},{tag:"div[data-type='modification']",getAttrs(e){return e.dataset.id?{id:parseInt(e.dataset.id,10),type:e.dataset.modType,previousValue:e.dataset.modPrevVal}:!1}}]}}}),jt=S.Extension.create({name:"textAlignment",addGlobalAttributes(){return[{types:["tableCell","tableHeader"],attributes:{textAlignment:{default:"left",parseHTML:o=>o.getAttribute("data-text-alignment"),renderHTML:o=>o.textAlignment==="left"?{}:{"data-text-alignment":o.textAlignment}}}}]}}),Kt=S.Extension.create({name:"blockTextColor",addGlobalAttributes(){return[{types:["table","tableCell","tableHeader"],attributes:{textColor:d.getTextColorAttribute()}}]}}),Yt={blockColor:"data-block-color",blockStyle:"data-block-style",id:"data-id",depth:"data-depth",depthChange:"data-depth-change"},Jt=S.Node.create({name:"blockContainer",group:"blockGroupChild bnBlock",content:"blockContent blockGroup?",priority:50,defining:!0,marks:"insertion modification deletion",parseHTML(){return[{tag:"div[data-node-type="+this.name+"]",getAttrs:o=>{if(typeof o=="string")return!1;const e={};for(const[t,n]of Object.entries(Yt))o.getAttribute(n)&&(e[t]=o.getAttribute(n));return e}},{tag:'div[data-node-type="blockOuter"]',skip:!0}]},renderHTML({HTMLAttributes:o}){var r;const e=document.createElement("div");e.className="bn-block-outer",e.setAttribute("data-node-type","blockOuter");for(const[s,i]of Object.entries(o))s!=="class"&&e.setAttribute(s,i);const t={...((r=this.options.domAttributes)==null?void 0:r.block)||{},...o},n=document.createElement("div");n.className=d.mergeCSSClasses("bn-block",t.class),n.setAttribute("data-node-type",this.name);for(const[s,i]of Object.entries(t))s!=="class"&&n.setAttribute(s,i);return e.appendChild(n),{dom:e,contentDOM:n}}}),Qt=S.Node.create({name:"blockGroup",group:"childContainer",content:"blockGroupChild+",marks:"deletion insertion modification",parseHTML(){return[{tag:"div",getAttrs:o=>typeof o=="string"?!1:o.getAttribute("data-node-type")==="blockGroup"?null:!1}]},renderHTML({HTMLAttributes:o}){var n;const e={...((n=this.options.domAttributes)==null?void 0:n.blockGroup)||{},...o},t=document.createElement("div");t.className=d.mergeCSSClasses("bn-block-group",e.class),t.setAttribute("data-node-type","blockGroup");for(const[r,s]of Object.entries(e))r!=="class"&&t.setAttribute(r,s);return{dom:t,contentDOM:t}}}),Xt=S.Node.create({name:"doc",topNode:!0,content:"blockGroup",marks:"insertion modification deletion"}),Zt=H.createExtension(({options:o})=>({key:"collaboration",blockNoteExtensions:[B.ForkYDocExtension(o),B.YCursorExtension(o),B.YSyncExtension(o),B.YUndoExtension(),B.SchemaMigration(o)]}));let oe=!1;function eo(o,e){const t=[S.extensions.ClipboardTextSerializer,S.extensions.Commands,S.extensions.Editable,S.extensions.FocusEvents,S.extensions.Tabindex,ve.Gapcursor,u.UniqueID.configure({types:["blockContainer","columnList","column"],setIdAttribute:e.setIdAttribute}),Rt,Ne.Text,Gt,qt,Wt,Ae.Link.extend({inclusive:!1}).configure({defaultProtocol:B.DEFAULT_LINK_PROTOCOL,protocols:oe?[]:B.VALID_LINK_PROTOCOLS}),...Object.values(o.schema.styleSpecs).map(n=>n.implementation.mark.configure({editor:o})),Kt,$t,jt,S.Extension.create({name:"OverrideEscape",addKeyboardShortcuts:()=>({Escape:()=>{var n;return(n=o.getExtension(d.SuggestionMenu))!=null&&n.shown()?!1:(o.blur(),!0)}})}),Xt,Jt.configure({editor:o,domAttributes:e.domAttributes}),zt.configure({editor:o,tabBehavior:e.tabBehavior}),Qt.configure({domAttributes:e.domAttributes}),...Object.values(o.schema.inlineContentSpecs).filter(n=>n.config!=="link"&&n.config!=="text").map(n=>n.implementation.node.configure({editor:o})),...Object.values(o.schema.blockSpecs).flatMap(n=>[..."node"in n.implementation?[n.implementation.node.configure({editor:o,domAttributes:e.domAttributes})]:[]]),Ht(o),Ft(o,e.pasteHandler||(n=>n.defaultPasteHandler())),Bt(o)];return oe=!0,t}function to(o,e){const t=[B.BlockChangeExtension(),B.DropCursorExtension(e),d.FilePanelExtension(e),B.FormattingToolbarExtension(e),B.LinkToolbarExtension(e),B.NodeSelectionKeyboardExtension(),B.PlaceholderExtension(e),Le.ShowSelectionExtension(e),B.SideMenuExtension(e),d.SuggestionMenu(e),...e.trailingBlock!==!1?[B.TrailingNodeExtension()]:[]];return e.collaboration?t.push(Zt(e.collaboration)):t.push(B.HistoryExtension()),"table"in o.schema.blockSpecs&&t.push(B.TableHandlesExtension(e)),e.animations!==!1&&t.push(B.PreviousBlockTypeExtension()),t}class oo{constructor(e,t){b(this,"disabledExtensions",new Set);b(this,"extensions",[]);b(this,"abortMap",new Map);b(this,"extensionFactories",new Map);b(this,"extensionPlugins",new Map);this.editor=e,this.options=t,e.onMount(()=>{for(const n of this.extensions)if(n.mount){const r=new window.AbortController,s=n.mount({dom:e.prosemirrorView.dom,root:e.prosemirrorView.root,signal:r.signal});s&&r.signal.addEventListener("abort",()=>{s()}),this.abortMap.set(n,r)}}),e.onUnmount(()=>{for(const[n,r]of this.abortMap.entries())this.abortMap.delete(n),r.abort()}),this.disabledExtensions=new Set(t.disableExtensions||[]);for(const n of to(this.editor,this.options))this.addExtension(n);for(const n of this.options.extensions??[])this.addExtension(n);for(const n of Object.values(this.editor.schema.blockSpecs))for(const r of n.extensions??[])this.addExtension(r)}registerExtension(e){var s;const t=[].concat(e).filter(Boolean);if(!t.length){console.warn("No extensions found to register",e);return}const n=t.map(i=>this.addExtension(i)).filter(Boolean),r=new Set;for(const i of n)i!=null&&i.tiptapExtensions&&console.warn(`Extension ${i.key} has tiptap extensions, but these cannot be changed after initializing the editor. Please separate the extension into multiple extensions if you want to add them, or re-initialize the editor.`,i),(s=i==null?void 0:i.inputRules)!=null&&s.length&&console.warn(`Extension ${i.key} has input rules, but these cannot be changed after initializing the editor. Please separate the extension into multiple extensions if you want to add them, or re-initialize the editor.`,i),this.getProsemirrorPluginsFromExtension(i).plugins.forEach(a=>{r.add(a)});this.updatePlugins(i=>[...i,...r])}addExtension(e){let t;if(typeof e=="function"?t=e({editor:this.editor}):t=e,!(!t||this.disabledExtensions.has(t.key))){if(typeof e=="function"){const n=t[H.originalFactorySymbol];typeof n=="function"&&this.extensionFactories.set(n,t)}if(this.extensions.push(t),t.blockNoteExtensions)for(const n of t.blockNoteExtensions)this.addExtension(n);return t}}resolveExtensions(e){const t=[];if(typeof e=="function"){const n=this.extensionFactories.get(e);n&&t.push(n)}else if(Array.isArray(e))for(const n of e)t.push(...this.resolveExtensions(n));else if(typeof e=="object"&&"key"in e)t.push(e);else if(typeof e=="string"){const n=this.extensions.find(r=>r.key===e);n&&t.push(n)}return t}unregisterExtension(e){var s;const t=this.resolveExtensions(e);if(!t.length){console.warn("No extensions found to unregister",e);return}let n=!1;const r=new Set;for(const i of t){this.extensions=this.extensions.filter(c=>c!==i),this.extensionFactories.forEach((c,l)=>{c===i&&this.extensionFactories.delete(l)}),(s=this.abortMap.get(i))==null||s.abort(),this.abortMap.delete(i);const a=this.extensionPlugins.get(i);a==null||a.forEach(c=>{r.add(c)}),this.extensionPlugins.delete(i),i.tiptapExtensions&&!n&&(n=!0,console.warn(`Extension ${i.key} has tiptap extensions, but they will not be removed. Please separate the extension into multiple extensions if you want to remove them, or re-initialize the editor.`,e))}this.updatePlugins(i=>i.filter(a=>!r.has(a)))}updatePlugins(e){const t=this.editor.prosemirrorState,n=t.reconfigure({plugins:e(t.plugins.slice())});this.editor.prosemirrorView.updateState(n)}getTiptapExtensions(){var r;const e=eo(this.editor,this.options).filter(s=>!this.disabledExtensions.has(s.name)),t=I.sortByDependencies(this.extensions),n=new Map;for(const s of this.extensions){s.tiptapExtensions&&e.push(...s.tiptapExtensions);const i=t(s.key),{plugins:a,inputRules:c}=this.getProsemirrorPluginsFromExtension(s);a.length&&e.push(S.Extension.create({name:s.key,priority:i,addProseMirrorPlugins:()=>a})),c.length&&(n.has(i)||n.set(i,[]),n.get(i).push(...c))}e.push(S.Extension.create({name:"blocknote-input-rules",addProseMirrorPlugins(){const s=[];return Array.from(n.keys()).sort().reverse().forEach(i=>{s.push(...n.get(i))}),[Y.inputRules({rules:s})]}}));for(const s of((r=this.options._tiptapOptions)==null?void 0:r.extensions)??[])e.push(s);return e}getProsemirrorPluginsFromExtension(e){var r,s,i;const t=[...e.prosemirrorPlugins??[]],n=[];return!((r=e.prosemirrorPlugins)!=null&&r.length)&&!Object.keys(e.keyboardShortcuts||{}).length&&!((s=e.inputRules)!=null&&s.length)?{plugins:t,inputRules:n}:(this.extensionPlugins.set(e,t),(i=e.inputRules)!=null&&i.length&&n.push(...e.inputRules.map(a=>new Y.InputRule(a.find,(c,l,p,f)=>{const h=a.replace({match:l,range:{from:p,to:f},editor:this.editor});if(h){const k=this.editor.getTextCursorPosition();if(this.editor.schema.blockSchema[k.block.type].content!=="inline")return null;const m=u.getBlockInfoFromTransaction(c.tr),g=c.tr.deleteRange(p,f);return d.updateBlockTr(g,m.bnBlock.beforePos,h),g}return null}))),Object.keys(e.keyboardShortcuts||{}).length&&t.push(we.keymap(Object.fromEntries(Object.entries(e.keyboardShortcuts).map(([a,c])=>[a,()=>c({editor:this.editor})])))),{plugins:t,inputRules:n})}getExtensi