UNPKG

@blocknote/core

Version:

A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.

3,226 lines 113 kB
import { $n as e, $t as t, Cn as n, Dt as r, En as i, Et as a, Fn as o, Gt as s, In as c, Jn as l, Kn as u, Mt as d, Nt as f, O as p, Ot as m, Qn as h, W as g, Xn as _, Yn as v, _n as ee, bn as te, dn as ne, en as re, f as ie, gn as ae, gt as y, hn as oe, jt as b, kt as x, m as se, qn as S, t as ce, tn as le, vn as ue, xn as de, xt as fe, yn as C, yt as pe } from "./blocks-CiuUGa1E.js";
import { r as me, t as he } from "./BlockNoteExtension-B_IEJHS8.js";
import { A as ge, D as _e, O as ve, T as ye, _ as be, b as xe, c as Se, f as Ce, g as we, h as Te, k as Ee, s as De, v as Oe, w as ke, x as Ae, y as je } from "./extensions-CrUGDOks.js";
import { r as Me } from "./UserStore-QbbPFj0z.js";
import { t as Ne } from "./en-CGKXfWma.js";
import { DOMParser as Pe, DOMSerializer as Fe, Fragment as w, NodeRange as Ie, Slice as T } from "prosemirror-model";
import { ReplaceAroundStep as E, ReplaceStep as Le, canJoin as Re, liftTarget as ze } from "prosemirror-transform";
import { Editor as Be, Extension as D, Mark as Ve, Node as O, combineTransactionSteps as He, createDocument as Ue, extensions as k, findChildrenInRange as We, findParentNodeClosestToPos as Ge, getAttributes as Ke, getChangedRanges as qe, getMarkRange as Je, getMarksBetween as Ye, getSchema as Xe, isNodeSelection as Ze, markPasteRule as Qe, mergeAttributes as $e, posToDOMRect as et, selectionToInsertionEnd as tt } from "@tiptap/core";
import { NodeSelection as A, Plugin as j, TextSelection as M } from "prosemirror-state";
import { Fragment as N, Slice as P } from "@tiptap/pm/model";
import { CellSelection as F, TableMap as nt } from "prosemirror-tables";
import { Plugin as rt, PluginKey as it } from "@tiptap/pm/state";
import { digestString as at } from "lib0/hash/fnv1a";
import { InputRule as ot, inputRules as st } from "@handlewithcare/prosemirror-inputrules";
import { keymap as ct } from "@tiptap/pm/keymap";
import { Text as lt } from "@tiptap/extension-text";
import { Gapcursor as ut } from "@tiptap/extensions/gap-cursor";
//#region src/schema/inlineContent/createSpec.ts
function dt(e, t) {
	let n = [{
		tag: `[data-inline-content-type="${e.type}"]`,
		contentElement: (e) => {
			let t = e;
			return t.matches("[data-editable]") ? t : t.querySelector("[data-editable]") || t;
		}
	}];
	return t && n.push({
		tag: "*",
		getAttrs(e) {
			if (typeof e == "string") return !1;
			let n = t?.(e);
			return n === void 0 ? !1 : n;
		}
	}), n;
}
function ft(e, n) {
	return le(O.create({
		name: e.type,
		inline: !0,
		group: "inline",
		draggable: n.meta?.draggable,
		selectable: e.content === "styled",
		atom: e.content === "none",
		content: e.content === "styled" ? "inline*" : "",
		addAttributes() {
			return ne(e.propSchema);
		},
		addKeyboardShortcuts() {
			return re(e);
		},
		parseHTML() {
			return dt(e, n.parse);
		},
		renderHTML({ node: r }) {
			let i = this.options.editor;
			return t(n.render.call({
				renderType: "dom",
				props: void 0
			}, te(r, i.schema.inlineContentSchema, i.schema.styleSchema), () => {}, i), e.type, r.attrs, e.propSchema);
		},
		addNodeView() {
			return (r) => {
				let { node: i, getPos: a } = r, o = this.options.editor;
				return t(n.render.call({
					renderType: "nodeView",
					props: r
				}, te(i, o.schema.inlineContentSchema, o.schema.styleSchema), (e) => {
					let t = d([e], o.pmSchema), n = a();
					n && o.transact((e) => e.replaceWith(n, n + i.nodeSize, t));
				}, o), e.type, i.attrs, e.propSchema);
			};
		}
	}), e.propSchema, {
		...n,
		toExternalHTML: n.toExternalHTML,
		render(r, i, a) {
			return t(n.render(r, i, a), e.type, r.props, e.propSchema);
		}
	});
}
//#endregion
//#region src/api/blockManipulation/commands/insertBlocks/insertBlocks.ts
function pt(e, t, n, r = "before") {
	let a = typeof n == "string" ? n : n.id, o = i(e), s = t.map((e) => {
		let t = b(e, o);
		return t.check(), t;
	}), c = x(a, e.doc);
	if (!c) throw Error(`Block with ID ${a} not found`);
	let l = c.posBeforeNode;
	return r === "after" && (l += c.node.nodeSize), e.step(new Le(l, l, new T(w.from(s), 0, 0))), s.map((t) => C(t, e.doc));
}
//#endregion
//#region src/api/blockManipulation/commands/replaceBlocks/util/fixColumnList.ts
function I(e) {
	if (!e || e.type.name !== "column") throw Error("Invalid columnPos: does not point to column node.");
	let t = e.firstChild;
	if (!t) throw Error("Invalid column: does not have child node.");
	let n = t.firstChild;
	if (!n) throw Error("Invalid blockContainer: does not have child node.");
	return e.childCount === 1 && t.childCount === 1 && n.type.name === "paragraph" && n.content.content.length === 0;
}
function mt(e, t) {
	let n = e.doc.resolve(t), r = n.nodeAfter;
	if (!r || r.type.name !== "columnList") throw Error("Invalid columnListPos: does not point to columnList node.");
	for (let t = r.childCount - 1; t >= 0; t--) {
		let r = e.doc.resolve(n.pos + 1).posAtIndex(t), i = e.doc.resolve(r).nodeAfter;
		if (!i || i.type.name !== "column") throw Error("Invalid columnPos: does not point to column node.");
		I(i) && e.delete(r, r + i.nodeSize);
	}
}
function L(e, t) {
	mt(e, t);
	let n = e.doc.resolve(t).nodeAfter;
	if (!n || n.type.name !== "columnList") throw Error("Invalid columnListPos: does not point to columnList node.");
	if (n.childCount > 2) return;
	if (n.childCount < 2) throw Error("Invalid columnList: contains fewer than two children.");
	let r = t + 1, i = e.doc.resolve(r).nodeAfter, a = t + n.nodeSize - 1, o = e.doc.resolve(a).nodeBefore;
	if (!i || !o) throw Error("Invalid columnList: does not contain children.");
	let s = I(i), c = I(o);
	if (s && c) {
		e.delete(t, t + n.nodeSize);
		return;
	}
	if (s) {
		e.step(new E(t, t + n.nodeSize, a - o.nodeSize + 1, a - 1, T.empty, 0, !1));
		return;
	}
	if (c) {
		e.step(new E(t, t + n.nodeSize, r + 1, r + i.nodeSize - 1, T.empty, 0, !1));
		return;
	}
}
//#endregion
//#region src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts
function R(t, n, r, a = {}) {
	let o = i(t), s = r.map((e) => {
		let t = b(e, o);
		return t.check(), t;
	}), c = new Set(n.map((e) => typeof e == "string" ? e : e.id)), l = [], u = /* @__PURE__ */ new Set(), d = typeof n[0] == "string" ? n[0] : n[0].id, f = 0;
	if (t.doc.descendants((n, i) => {
		if (c.size === 0) return !1;
		if (!n.type.isInGroup("bnBlock")) return !0;
		let a = e(n, t.doc);
		if (!c.has(a)) return !0;
		if (l.push(C(n, t.doc)), c.delete(a), r.length > 0 && a === d) {
			let e = t.doc.nodeSize;
			t.insert(i, s);
			let n = t.doc.nodeSize;
			f += e - n;
		}
		let o = t.doc.nodeSize, p = t.doc.resolve(i - f);
		p.node().type.name === "column" ? u.add(p.before(-1)) : p.node().type.name === "columnList" && u.add(p.before()), p.node().type.name === "blockGroup" && p.node(p.depth - 1).type.name !== "doc" && p.node().childCount === 1 ? t.delete(p.before(), p.after()) : t.delete(i - f, i - f + n.nodeSize);
		let m = t.doc.nodeSize;
		return f += o - m, !1;
	}), c.size > 0) {
		let e = [...c].join("\n");
		throw Error("Blocks with the following IDs could not be found in the editor: " + e);
	}
	return a.fixColumns !== !1 && u.forEach((e) => L(t, e)), {
		insertedBlocks: s.map((e) => C(e, t.doc)),
		removedBlocks: l
	};
}
//#endregion
//#region src/api/exporters/html/util/serializeBlocksInternalHTML.ts
function ht(e, t, n, r, i) {
	let a;
	if (!t) throw Error("blockContent is required");
	if (typeof t == "string") a = d([t], e.pmSchema, r);
	else if (Array.isArray(t)) a = d(t, e.pmSchema, r);
	else if (t.type === "tableContent") a = f(t, e.pmSchema);
	else throw new c(t.type);
	let o = (i?.document ?? document).createDocumentFragment();
	for (let t of a) if (t.type.name !== "text" && e.schema.inlineContentSchema[t.type.name]) {
		let r = e.schema.inlineContentSpecs[t.type.name].implementation;
		if (r) {
			let a = te(t, e.schema.inlineContentSchema, e.schema.styleSchema), s = r.render.call({
				renderType: "dom",
				props: void 0
			}, a, () => {}, e);
			if (s) {
				if (o.appendChild(s.dom), s.contentDOM) {
					let e = n.serializeFragment(t.content, i);
					s.contentDOM.dataset.editable = "", s.contentDOM.appendChild(e);
				}
				continue;
			}
		}
	} else if (t.type.name === "text") {
		let n = document.createTextNode(t.textContent);
		for (let r of t.marks.toReversed()) if (r.type.name in e.schema.styleSpecs) {
			let t = e.schema.styleSpecs[r.type.name].implementation.render(r.attrs.stringValue, e);
			t.contentDOM.appendChild(n), n = t.dom;
		} else {
			let e = r.type.spec.toDOM(r, !0), t = Fe.renderSpec(document, e);
			t.contentDOM.appendChild(n), n = t.dom;
		}
		o.appendChild(n);
	} else {
		let e = n.serializeFragment(w.from([t]), i);
		o.appendChild(e);
	}
	return o;
}
function gt(e, t, n, r) {
	let i = e.pmSchema.nodes.blockContainer, a = t.props || {};
	for (let [n, r] of Object.entries(e.schema.blockSchema[t.type].propSchema)) !(n in a) && r.default !== void 0 && (a[n] = r.default);
	let o = t.children || [], s = e.blockImplementations[t.type].implementation.render.call({
		renderType: "dom",
		props: void 0
	}, {
		...t,
		props: a,
		children: o
	}, e);
	if (s.contentDOM && t.content) {
		let i = ht(e, t.content, n, t.type, r);
		s.contentDOM.appendChild(i);
	}
	if (e.pmSchema.nodes[t.type].isInGroup("bnBlock")) {
		if (t.children && t.children.length > 0) {
			let i = _t(e, t.children, n, r);
			s.contentDOM?.append(i);
		}
		return s.dom;
	}
	let c = i.spec?.toDOM?.(i.create({
		id: t.id,
		...a
	}));
	return c.contentDOM?.appendChild(s.dom), t.children && t.children.length > 0 && c.contentDOM?.appendChild(vt(e, t.children, n, r)), c.dom;
}
function _t(e, t, n, r) {
	let i = (r?.document ?? document).createDocumentFragment();
	for (let a of t) {
		let t = gt(e, a, n, r);
		i.appendChild(t);
	}
	return i;
}
var vt = (e, t, n, r) => {
	let i = e.pmSchema.nodes.blockGroup, a = i.spec.toDOM(i.create({})), o = _t(e, t, n, r);
	return a.contentDOM?.appendChild(o), a.dom;
}, yt = (e) => (e.querySelectorAll("[data-content-type=\"numberedListItem\"]").forEach((e) => {
	let t = e.closest(".bn-block-outer")?.previousElementSibling?.querySelector("[data-content-type=\"numberedListItem\"]");
	if (!t) e.setAttribute("data-index", e.getAttribute("data-start") || "1");
	else {
		let n = t.getAttribute("data-index");
		e.setAttribute("data-index", (parseInt(n || "0") + 1).toString());
	}
}), e), bt = (e) => (e.querySelectorAll("[data-content-type=\"checkListItem\"] input").forEach((e) => {
	e.disabled = !0;
}), e), xt = (e) => (e.querySelectorAll(".bn-toggle-wrapper[data-show-children=\"false\"]").forEach((e) => {
	e.setAttribute("data-show-children", "true");
}), e), St = (e) => (e.querySelectorAll("[data-content-type=\"table\"] table").forEach((e) => {
	e.setAttribute("style", "--default-cell-min-width: 120px;"), e.setAttribute("data-show-children", "true");
}), e), Ct = (e) => (e.querySelectorAll("[data-content-type=\"table\"] table").forEach((e) => {
	let t = document.createElement("div");
	t.className = "tableWrapper";
	let n = document.createElement("div");
	n.className = "tableWrapper-inner", t.appendChild(n), e.parentElement?.appendChild(t), t.appendChild(e);
}), e), wt = (e) => (e.querySelectorAll(".bn-inline-content:empty").forEach((e) => {
	let t = document.createElement("span");
	t.className = "ProseMirror-trailingBreak", t.setAttribute("style", "display: inline-block;"), e.appendChild(t);
}), e), Tt = (e, t) => {
	let n = Fe.fromSchema(e), r = [
		yt,
		bt,
		xt,
		St,
		Ct,
		wt
	];
	return { serializeBlocks: (e, i) => {
		let a = vt(t, e, n, i);
		for (let e of r) a = e(a);
		return a.outerHTML;
	} };
}, Et = (e) => {
	let t = 0;
	for (let n = 0; n < e.length; n++) t = Math.imul(31, t) + e.charCodeAt(n);
	return Math.abs(t);
}, z = [
	{
		light: "#fff0c2",
		dark: "#8a6d1a"
	},
	{
		light: "#fcc9c3",
		dark: "#8a2e24"
	},
	{
		light: "#d4e8eb",
		dark: "#4a7178"
	},
	{
		light: "#c2eeff",
		dark: "#1a6e8a"
	},
	{
		light: "#bef3ff",
		dark: "#0a7a8a"
	}
], Dt = (e) => z[Et(e) % z.length], Ot = (e, t) => {
	if (!t || t.length === 0) return z[0];
	let n = t[0], r = e.getUser(n);
	return r?.color && r.colorLight ? {
		light: r.colorLight,
		dark: r.color
	} : Dt(n);
}, kt = (e) => at(e).toString(16).padStart(8, "0"), At = (e) => {
	let t = kt(e);
	return {
		light: `--user-color-${t}-light`,
		dark: `--user-color-${t}-dark`
	};
}, B = class {
	callbacks = {};
	on(e, t) {
		return this.callbacks[e] || (this.callbacks[e] = []), this.callbacks[e].push(t), () => this.off(e, t);
	}
	emit(e, ...t) {
		let n = this.callbacks[e];
		n && n.forEach((e) => e.apply(this, t));
	}
	off(e, t) {
		let n = this.callbacks[e];
		n && (t ? this.callbacks[e] = n.filter((e) => e !== t) : delete this.callbacks[e]);
	}
	removeAllListeners() {
		this.callbacks = {};
	}
};
//#endregion
//#region src/api/blockManipulation/commands/moveBlocks/moveBlocks.ts
function jt(t) {
	return t.transact((t) => {
		let n = l(t, t.selection.anchor), r = e(n.bnBlock.node, t.doc);
		if (t.selection instanceof F) return {
			type: "cell",
			anchorBlockId: r,
			anchorCellOffset: t.selection.$anchorCell.pos - n.bnBlock.beforePos,
			headCellOffset: t.selection.$headCell.pos - n.bnBlock.beforePos
		};
		if (t.selection instanceof A) return {
			type: "node",
			anchorBlockId: r
		};
		{
			let i = l(t, t.selection.head);
			return {
				type: "text",
				anchorBlockId: r,
				headBlockId: e(i.bnBlock.node, t.doc),
				anchorOffset: t.selection.anchor - n.bnBlock.beforePos,
				headOffset: t.selection.head - i.bnBlock.beforePos
			};
		}
	});
}
function Mt(e, t) {
	let n = x(t.anchorBlockId, e.doc)?.posBeforeNode;
	if (n === void 0) throw Error(`Could not find block with ID ${t.anchorBlockId} to update selection`);
	let r;
	if (t.type === "cell") r = F.create(e.doc, n + t.anchorCellOffset, n + t.headCellOffset);
	else if (t.type === "node") r = A.create(e.doc, n + 1);
	else {
		let i = x(t.headBlockId, e.doc)?.posBeforeNode;
		if (i === void 0) throw Error(`Could not find block with ID ${t.headBlockId} to update selection`);
		r = M.create(e.doc, n + t.anchorOffset, i + t.headOffset);
	}
	e.setSelection(r);
}
function Nt(e) {
	return e.flatMap((e) => e.type === "column" ? e.children : [e]);
}
function V(e, t, n, r) {
	e.transact((e) => {
		R(e, t, [], { fixColumns: !1 }), pt(e, Nt(t), n, r);
	});
}
function Pt(e, t, n) {
	e.transact((r) => {
		let i = e.getSelection()?.blocks || [e.getTextCursorPosition().block], a = jt(e);
		V(e, i, t, n), Mt(r, a);
	});
}
function Ft(e) {
	return !e || e.type !== "columnList";
}
function It(e, t, n) {
	let r, i;
	if (t ? t.children.length > 0 ? (r = t.children[t.children.length - 1], i = "after") : (r = t, i = "before") : n && (r = n, i = "before"), !r || !i) return;
	let a = e.getParentBlock(r);
	return Ft(a) ? {
		referenceBlock: r,
		placement: i
	} : It(e, i === "after" ? r : e.getPrevBlock(r), a);
}
function Lt(e, t, n) {
	let r, i;
	if (t ? t.children.length > 0 ? (r = t.children[0], i = "before") : (r = t, i = "after") : n && (r = n, i = "after"), !r || !i) return;
	let a = e.getParentBlock(r);
	return Ft(a) ? {
		referenceBlock: r,
		placement: i
	} : Lt(e, i === "before" ? r : e.getNextBlock(r), a);
}
function Rt(e, t) {
	e.transact(() => {
		let n;
		if (t) {
			if (n = e.getBlock(t), !n) return;
		} else n = e.getSelection()?.blocks[0] || e.getTextCursorPosition().block;
		let r = It(e, e.getPrevBlock(n), e.getParentBlock(n));
		r && (t ? V(e, [n], r.referenceBlock, r.placement) : Pt(e, r.referenceBlock, r.placement));
	});
}
function zt(e, t) {
	e.transact(() => {
		let n;
		if (t) {
			if (n = e.getBlock(t), !n) return;
		} else {
			let t = e.getSelection();
			n = t?.blocks[t?.blocks.length - 1] || e.getTextCursorPosition().block;
		}
		let r = Lt(e, e.getNextBlock(n), e.getParentBlock(n));
		r && (t ? V(e, [n], r.referenceBlock, r.placement) : Pt(e, r.referenceBlock, r.placement));
	});
}
//#endregion
//#region src/api/blockManipulation/commands/nestBlock/nestBlock.ts
function Bt(e, t, n) {
	let { $from: r, $to: i } = e.selection, a = r.blockRange(i, (e) => e.childCount > 0 && (e.type.name === "blockGroup" || e.type.name === "column"));
	if (!a) return !1;
	let o = a.startIndex;
	if (o === 0) return !1;
	let s = a.parent.child(o - 1);
	if (s.type !== t) return !1;
	let c = s.lastChild && s.lastChild.type === n, l = w.from(c ? t.create() : null), u = new T(w.from(t.create(null, w.from(n.create(null, l)))), c ? 3 : 1, 0), d = a.start, f = a.end;
	return e.step(new E(d - (c ? 3 : 1), f, d, f, u, 1, !0)).scrollIntoView(), !0;
}
function Vt(e) {
	return e.transact((t) => Bt(t, e.pmSchema.nodes.blockContainer, e.pmSchema.nodes.blockGroup));
}
function Ht(e, t, n, r) {
	let i = r.end, a = r.$to.end(r.depth);
	if (i < a) {
		let o = r.parent.child(r.endIndex - 1), s = o.lastChild && o.lastChild.type === n;
		e.step(new E(i - (s ? 2 : 1), a, i, a, new T(w.from(t.create(null, n.create())), s ? 2 : 1, 0), +!s, !0)), r = new Ie(e.doc.resolve(r.$from.pos), e.doc.resolve(a), r.depth);
	}
	let o = ze(r);
	if (o == null) return !1;
	e.lift(r, o);
	let s = e.doc.resolve(e.mapping.map(i, -1) - 1);
	return Re(e.doc, s.pos) && s.nodeBefore.type === s.nodeAfter.type && e.join(s.pos), e.scrollIntoView(), !0;
}
function H(e, t, n) {
	let { $from: r, $to: i } = e.selection, a = r.blockRange(i, (e) => e.childCount > 0 && (e.type.name === "blockGroup" || e.type.name === "column"));
	return a && r.node(a.depth - 1).type === t ? Ht(e, t, n, a) : !1;
}
function Ut(e) {
	return e.transact((t) => H(t, e.pmSchema.nodes.blockContainer, e.pmSchema.nodes.blockGroup));
}
function Wt(e) {
	return e.transact((e) => {
		let { bnBlock: t } = _(e);
		return e.doc.resolve(t.beforePos).nodeBefore !== null;
	});
}
function Gt(e) {
	return e.transact((e) => {
		let { bnBlock: t } = _(e);
		return e.doc.resolve(t.beforePos).depth > 1;
	});
}
//#endregion
//#region src/api/blockManipulation/getBlock/getBlock.ts
function Kt(e, t) {
	let n = x(typeof t == "string" ? t : t.id, e);
	if (n) return C(n.node, e);
}
function qt(e, t) {
	let n = x(typeof t == "string" ? t : t.id, e);
	if (!n) return;
	let r = e.resolve(n.posBeforeNode).nodeBefore;
	if (r) return C(r, e);
}
function Jt(e, t) {
	let n = x(typeof t == "string" ? t : t.id, e);
	if (!n) return;
	let r = e.resolve(n.posBeforeNode + n.node.nodeSize).nodeAfter;
	if (r) return C(r, e);
}
function Yt(e, t) {
	let n = x(typeof t == "string" ? t : t.id, e);
	if (!n) return;
	let r = e.resolve(n.posBeforeNode), i = r.node(), a = r.node(-1), o = a.type.name === "doc" ? void 0 : i.type.name === "blockGroup" ? a : i;
	if (o) return C(o, e);
}
//#endregion
//#region src/editor/managers/BlockManager.ts
var Xt = class {
	editor;
	constructor(e) {
		this.editor = e;
	}
	get document() {
		return this.editor.transact((e) => ue(e.doc));
	}
	getBlock(e) {
		return this.editor.transact((t) => Kt(t.doc, e));
	}
	getPrevBlock(e) {
		return this.editor.transact((t) => qt(t.doc, e));
	}
	getNextBlock(e) {
		return this.editor.transact((t) => Jt(t.doc, e));
	}
	getParentBlock(e) {
		return this.editor.transact((t) => Yt(t.doc, e));
	}
	forEachBlock(e, t = !1) {
		let n = this.document.slice();
		t && n.reverse();
		function r(n) {
			for (let i of n) if (e(i) === !1 || !r(t ? i.children.slice().reverse() : i.children)) return !1;
			return !0;
		}
		r(n);
	}
	insertBlocks(e, t, n = "before") {
		return this.editor.transact((r) => pt(r, e, t, n));
	}
	updateBlock(e, t) {
		return this.editor.transact((n) => a(n, e, t));
	}
	removeBlocks(e) {
		return this.editor.transact((t) => R(t, e, []).removedBlocks);
	}
	replaceBlocks(e, t) {
		return this.editor.transact((n) => R(n, e, t));
	}
	canNestBlock() {
		return Wt(this.editor);
	}
	nestBlock() {
		Vt(this.editor);
	}
	canUnnestBlock() {
		return Gt(this.editor);
	}
	unnestBlock() {
		Ut(this.editor);
	}
	moveBlocksUp(e) {
		return Rt(this.editor, e);
	}
	moveBlocksDown(e) {
		return zt(this.editor, e);
	}
}, Zt = class extends B {
	editor;
	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) {
		let n = ({ transaction: n, appendedTransactions: r }) => {
			!t && Qt(n) || e(this.editor, { getChanges() {
				return Ee(n, r);
			} });
		};
		return this.on("onChange", n), () => {
			this.off("onChange", n);
		};
	}
	onSelectionChange(e, t = !1) {
		let n = (n) => {
			!t && Qt(n.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 Qt(e) {
	return !!e.getMeta("y-sync$");
}
//#endregion
//#region src/api/parsers/html/util/nestedLists.ts
function $t(e) {
	return Array.prototype.indexOf.call(e.parentElement.childNodes, e);
}
function en(e) {
	return e.nodeType === 3 && !/\S/.test(e.nodeValue || "");
}
function tn(e) {
	e.querySelectorAll("li > ul, li > ol").forEach((e) => {
		let t = $t(e), n = e.parentElement, r = Array.from(n.childNodes).slice(t + 1);
		e.remove(), r.forEach((e) => {
			e.remove();
		}), n.insertAdjacentElement("afterend", e), r.reverse().forEach((t) => {
			if (en(t)) return;
			let n = document.createElement("li");
			n.append(t), e.insertAdjacentElement("afterend", n);
		}), n.childNodes.length === 0 && n.remove();
	});
}
function nn(e) {
	e.querySelectorAll("li + ul, li + ol").forEach((e) => {
		let t = e.previousElementSibling, n = document.createElement("div");
		t.insertAdjacentElement("afterend", n), n.append(t);
		let r = document.createElement("div");
		for (r.setAttribute("data-node-type", "blockGroup"), n.append(r); n.nextElementSibling?.nodeName === "UL" || n.nextElementSibling?.nodeName === "OL";) r.append(n.nextElementSibling);
	});
}
var rn = null;
function an() {
	return rn ||= document.implementation.createHTMLDocument("title");
}
function on(e) {
	if (typeof e == "string") {
		let t = an().createElement("div");
		t.innerHTML = e, e = t;
	}
	return tn(e), nn(e), e;
}
//#endregion
//#region src/api/parsers/html/util/normalizeWhitespace.ts
function sn(e) {
	let t = e.ownerDocument.createTreeWalker(e, 128), n;
	for (; n = t.nextNode();) if (/^\s*notionvc:/.test(n.nodeValue || "")) return !0;
	return !1;
}
function cn(e) {
	let t = new Set(["PRE", "CODE"]), n = e.ownerDocument.createTreeWalker(e, 4, { acceptNode(n) {
		let r = n.parentElement;
		for (; r && r !== e;) {
			if (t.has(r.tagName)) return 2;
			r = r.parentElement;
		}
		return 1;
	} }), r = [], i;
	for (; i = n.nextNode();) r.push(i);
	for (let e of r) e.nodeValue && /[\r\n]/.test(e.nodeValue) && (e.nodeValue = e.nodeValue.replace(/[ \t\r\n\f]+/g, " "));
}
function ln(e) {
	sn(e) || cn(e);
}
//#endregion
//#region src/api/parsers/html/parseHTML.ts
function U(e, t) {
	let n = on(e);
	ln(n);
	let r = Pe.fromSchema(t).parse(n, { topNode: t.nodes.blockGroup.create() }), i = [];
	for (let e = 0; e < r.childCount; e++) i.push(C(r.child(e), r));
	return i;
}
//#endregion
//#region src/api/parsers/markdown/markdownToHtml.ts
function W(e) {
	return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
}
function un(e) {
	return e ? /\w/.test(e) : !1;
}
function G(e, t, n) {
	let r = t > 0 ? e[t - 1] : void 0, i = t + n < e.length ? e[t + n] : void 0;
	return un(r) && un(i);
}
function dn(e, t) {
	if (e[t] !== "\\" || t + 1 >= e.length) return null;
	let n = e[t + 1];
	return n === "\n" ? {
		html: "<br>\n",
		end: t + 2
	} : "\\`*_{}[]()#+-.!~|>".includes(n) ? {
		html: W(n),
		end: t + 2
	} : null;
}
function fn(e, t) {
	return e[t] === "`" ? On(e, t) : null;
}
function pn(e, t) {
	return e[t] !== "!" || e[t + 1] !== "[" ? null : kn(e, t);
}
function mn(e, t) {
	return e[t] === "[" ? An(e, t) : null;
}
function hn(e, t) {
	return e[t] !== "~" || e[t + 1] !== "~" ? null : q(e, t, "~~", "<del>", "</del>");
}
function gn(e, t) {
	return e[t] === "*" && e[t + 1] === "*" && e[t + 2] === "*" || e[t] === "_" && e[t + 1] === "_" && e[t + 2] === "_" && !G(e, t, 3) ? q(e, t, e.substring(t, t + 3), "<strong><em>", "</em></strong>") : null;
}
function _n(e, t) {
	return e[t] === "*" && e[t + 1] === "*" || e[t] === "_" && e[t + 1] === "_" && !G(e, t, 2) ? q(e, t, e.substring(t, t + 2), "<strong>", "</strong>") : null;
}
function vn(e, t) {
	return e[t] === "*" || e[t] === "_" && !G(e, t, 1) ? q(e, t, e[t], "<em>", "</em>") : null;
}
function yn(e, t) {
	return e[t] === "\n" ? {
		html: "<br>\n",
		end: t + 1
	} : null;
}
var bn = /^<\/?[a-zA-Z][a-zA-Z0-9-]*(?:\s+[a-zA-Z_:][a-zA-Z0-9_.:-]*(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s"'=<>`]+))?)*\s*\/?>/, xn = /^<!--[\s\S]*?-->/, Sn = /^<!\[CDATA\[[\s\S]*?\]\]>/, Cn = /^<\?[\s\S]*?\?>/, wn = /^<![A-Za-z][\s\S]*?>/;
function Tn(e, t) {
	if (e[t] !== "<") return null;
	let n = e.substring(t);
	for (let e of [
		xn,
		Sn,
		Cn,
		wn,
		bn
	]) {
		let r = n.match(e);
		if (r) return {
			html: r[0],
			end: t + r[0].length
		};
	}
	return null;
}
var En = /* @__PURE__ */ new Set("\\`![~*_\n<"), Dn = [
	dn,
	fn,
	pn,
	mn,
	hn,
	gn,
	_n,
	vn,
	Tn,
	yn
];
function K(e) {
	let t = "", n = 0;
	for (; n < e.length;) {
		if (e[n] === "\n" && n >= 2 && e[n - 1] === " " && e[n - 2] === " ") {
			t = t.replace(/ +$/, ""), t += "<br>\n", n++;
			continue;
		}
		let r = !1;
		if (En.has(e[n])) for (let i of Dn) {
			let a = i(e, n);
			if (a) {
				t += a.html, n = a.end, r = !0;
				break;
			}
		}
		if (!r) {
			let r = n;
			for (n++; n < e.length && !En.has(e[n]);) n++;
			t += W(e.substring(r, n));
		}
	}
	return t;
}
function On(e, t) {
	let n = 0, r = t;
	for (; r < e.length && e[r] === "`";) n++, r++;
	let i = r;
	for (; i < e.length;) if (e[i] === "`") {
		let t = 0, a = i;
		for (; i < e.length && e[i] === "`";) t++, i++;
		if (t === n) {
			let t = e.substring(r, a);
			return t = t.replace(/\n/g, " "), t.length >= 2 && t[0] === " " && t[t.length - 1] === " " && /[^ ]/.test(t) && (t = t.substring(1, t.length - 1)), {
				html: `<code>${W(t)}</code>`,
				end: i
			};
		}
	} else i++;
	return null;
}
function kn(e, t) {
	let n = jn(e, t + 1);
	if (n === -1) return null;
	let r = t + 2;
	if (e[n + 1] !== "(") return null;
	let i = n + 2, a = Mn(e, i - 1);
	if (a === -1) return null;
	let o = e.substring(r, n), { url: s, title: c } = Nn(e.substring(i, a));
	if (oe(s)) {
		let e = o || c;
		return {
			html: `<video src="${W(s)}"${e ? ` data-name="${W(e)}"` : ""} data-url="${W(s)}" controls></video>`,
			end: a + 1
		};
	}
	let l = c === void 0 ? "" : ` title="${W(c)}"`;
	return {
		html: `<img src="${W(s)}" alt="${W(o)}"${l}>`,
		end: a + 1
	};
}
function An(e, t) {
	let n = t + 1, r = jn(e, t);
	if (r === -1 || e[r + 1] !== "(") return null;
	let i = r + 2, a = Mn(e, r + 1);
	if (a === -1) return null;
	let o = e.substring(n, r), { url: s, title: c } = Nn(e.substring(i, a)), l = c === void 0 ? "" : ` title="${W(c)}"`;
	return {
		html: `<a href="${W(s)}"${l}>${K(o)}</a>`,
		end: a + 1
	};
}
function jn(e, t) {
	let n = 0;
	for (let r = t; r < e.length; r++) {
		if (e[r] === "\\" && r + 1 < e.length) {
			r++;
			continue;
		}
		if (e[r] === "[" && n++, e[r] === "]" && (n--, n === 0)) return r;
	}
	return -1;
}
function Mn(e, t) {
	let n = 0;
	for (let r = t; r < e.length; r++) {
		if (e[r] === "\\" && r + 1 < e.length) {
			r++;
			continue;
		}
		if (e[r] === "(" && n++, e[r] === ")" && (n--, n === 0)) return r;
	}
	return -1;
}
function Nn(e) {
	e = e.trim();
	let t, n;
	if (e.startsWith("<")) {
		let r = e.indexOf(">");
		r === -1 ? (t = e.substring(1), n = "") : (t = e.substring(1, r), n = e.substring(r + 1).trim());
	} else {
		let r = e.length;
		for (let t = 0; t < e.length; t++) {
			if (e[t] === "\\" && t + 1 < e.length) {
				t++;
				continue;
			}
			if (e[t] === " " || e[t] === "	" || e[t] === "\n") {
				r = t;
				break;
			}
		}
		t = e.substring(0, r), n = e.substring(r).trim();
	}
	let r;
	if (n.length > 0) {
		let e = n.match(/^"([^"]*)"$|^'([^']*)'$|^\(([^)]*)\)$/);
		e && (r = e[1] ?? e[2] ?? e[3]);
	}
	return {
		url: t,
		title: r
	};
}
function q(e, t, n, r, i) {
	let a = n.length, o = t + a;
	if (o >= e.length || e[o] === " " || e[o] === "	") return null;
	let s = o;
	for (; s < e.length;) {
		if (e[s] === "\\" && s + 1 < e.length) {
			s += 2;
			continue;
		}
		if (e.substring(s, s + a) === n) {
			if (e[s - 1] === " " || e[s - 1] === "	") {
				s++;
				continue;
			}
			if (a === 1 && (s > 0 && e[s - 1] === n[0] && !(s >= 2 && e[s - 2] === "\\") || s + a < e.length && e[s + a] === n[0])) {
				s++;
				continue;
			}
			let t = e.substring(o, s);
			if (t.length === 0) {
				s++;
				continue;
			}
			return {
				html: r + K(t) + i,
				end: s + a
			};
		}
		s++;
	}
	return null;
}
var Pn = new Set(/* @__PURE__ */ "address.article.aside.audio.base.basefont.blockquote.body.caption.center.col.colgroup.dd.details.dialog.dir.div.dl.dt.fieldset.figcaption.figure.footer.form.frame.frameset.h1.h2.h3.h4.h5.h6.head.header.hr.html.iframe.legend.li.link.main.menu.menuitem.nav.noframes.ol.optgroup.option.p.param.section.source.summary.table.tbody.td.tfoot.th.thead.title.tr.track.ul".split("."));
function Fn(e) {
	if (/^ {0,3}<(!--|\?|![A-Za-z]|!\[CDATA\[)/.test(e)) return !0;
	let t = e.match(/^ {0,3}<\/?([a-zA-Z][a-zA-Z0-9-]*)(?:\s|\/?>|$)/);
	return t ? Pn.has(t[1].toLowerCase()) : !1;
}
function J(e) {
	let t = e.split("\n"), n = [], r = 0, i = !0;
	for (; r < t.length;) {
		let e = t[r];
		if (e.trim() === "") {
			i = !0, r++;
			continue;
		}
		let a = e.match(/^ {0,3}(`{3,}|~{3,})(.*)$/);
		if (a) {
			let e = a[1], o = e[0], s = e.length, c = a[2].trim(), l = [];
			for (r++; r < t.length;) {
				if (t[r].match(RegExp(`^ {0,3}${o}{${s},}\\s*$`))) {
					r++;
					break;
				}
				l.push(t[r]), r++;
			}
			n.push({
				type: "codeBlock",
				language: c || "",
				code: l.join("\n")
			}), i = !1;
			continue;
		}
		let o = e.match(/^(#{1,6})\s+(.+?)(?:\s+#+\s*|\s*)$/);
		if (o) {
			n.push({
				type: "heading",
				level: o[1].length,
				content: o[2]
			}), i = !1, r++;
			continue;
		}
		if (/^(\s{0,3})([-*_])\s*(\2\s*){2,}$/.test(e)) {
			let t = n[n.length - 1];
			if (!i && e.trim().match(/^-+$/) && t && t.type === "paragraph") {
				let e = t;
				n[n.length - 1] = {
					type: "heading",
					level: 2,
					content: e.content
				}, i = !1, r++;
				continue;
			}
			n.push({ type: "hr" }), i = !1, r++;
			continue;
		}
		if (r + 1 < t.length) {
			let a = t[r + 1];
			if (/^={1,}\s*$/.test(a) && e.trim().length > 0) {
				n.push({
					type: "heading",
					level: 1,
					content: e.trim()
				}), i = !1, r += 2;
				continue;
			}
		}
		let s = In(t, r);
		if (s) {
			n.push(s.token), r = s.nextLine, i = !1;
			continue;
		}
		if (/^\s{0,3}>/.test(e)) {
			let e = [];
			for (; r < t.length && /^\s{0,3}>/.test(t[r]);) e.push(t[r].replace(/^\s{0,3}>\s?/, "")), r++;
			for (; r < t.length;) {
				let n = t[r];
				if (n.trim() === "" || /^\s{0,3}>/.test(n) || /^(#{1,6})\s/.test(n) || /^(`{3,}|~{3,})/.test(n) || /^(\s{0,3})([-*_])\s*(\2\s*){2,}$/.test(n) || /^\s*([-*+]|\d+[.)])\s+/.test(n) || /^\s*\|(.+\|)+\s*$/.test(n)) break;
				e.push(n), r++;
			}
			n.push({
				type: "blockquote",
				content: e.join("\n")
			}), i = !1;
			continue;
		}
		let c = e.match(/^(\s*)([-*+]|\d+[.)])(\s+)(\[[ xX]\] )?(.*)$/);
		if (c) {
			let e = c[1].length, a = c[2], o = c[3], s = c[4], l = c[5], u, d, f;
			s ? (u = "task", f = s.trim() !== "[ ]") : /^\d+[.)]$/.test(a) ? (u = "ordered", d = parseInt(a, 10)) : u = "bullet";
			let p = e + a.length + o.length + (s ? s.length : 0), m = e + 1, h = (e) => {
				if (e.trim() === "") return !0;
				let t = e.match(/^\s*/)[0].length;
				return !!(t >= p || t >= m && e.match(/^\s*([-*+]|\d+[.)])\s+/));
			};
			r++;
			let g = [];
			for (; r < t.length;) {
				let e = t[r];
				if (e.trim() === "") {
					let e = r + 1;
					for (; e < t.length && t[e].trim() === "";) e++;
					if (e < t.length && h(t[e])) {
						g.push(""), r++;
						continue;
					}
					break;
				}
				if (!h(e)) break;
				e.match(/^\s*/)[0].length >= p ? g.push(e.substring(p)) : g.push(e.substring(m)), r++;
			}
			let _ = g.join("\n").replace(/^\n+|\n+$/g, "");
			n.push({
				type: "listItem",
				listType: u,
				indent: e,
				content: l.trim(),
				start: d,
				checked: f,
				childContent: _ || void 0
			}), i = !1;
			continue;
		}
		if (Fn(e)) {
			let e = [];
			for (; r < t.length && t[r].trim() !== "";) e.push(t[r]), r++;
			n.push({
				type: "rawHtml",
				content: e.join("\n")
			}), i = !1;
			continue;
		}
		let l = [e];
		for (r++; r < t.length;) {
			let e = t[r];
			if (e.trim() === "" || /^(#{1,6})\s/.test(e) || /^(`{3,}|~{3,})/.test(e) || /^\s{0,3}>/.test(e) || /^(\s{0,3})([-*_])\s*(\2\s*){2,}$/.test(e) || /^\s*([-*+]|\d+[.)])\s+/.test(e) || /^\s*\|(.+\|)+\s*$/.test(e) || Fn(e) || r + 1 < t.length && /^[=-]+\s*$/.test(t[r + 1]) && e.trim().length > 0) break;
			l.push(e), r++;
		}
		n.push({
			type: "paragraph",
			content: l.map((e) => e.replace(/^ {1,3}/, "")).join("\n").replace(/[ \t]+$/, "")
		}), i = !1;
	}
	return n;
}
function In(e, t) {
	if (t + 1 >= e.length) return null;
	let n = e[t], r = e[t + 1];
	if (!r.includes("|") || !/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/.test(r) || !n.includes("|")) return null;
	let i = Y(n), a = Ln(r), o = [], s = t + 2;
	for (; s < e.length;) {
		let t = e[s];
		if (!t.includes("|")) break;
		o.push(Y(t)), s++;
	}
	return {
		token: {
			type: "table",
			headers: i,
			rows: o,
			alignments: a
		},
		nextLine: s
	};
}
function Y(e) {
	let t = e.trim(), n = t.startsWith("|") ? t.substring(1) : t, r = n.endsWith("|") ? n.substring(0, n.length - 1) : n, i = [], a = "";
	for (let e = 0; e < r.length; e++) r[e] === "\\" && e + 1 < r.length && r[e + 1] === "|" ? (a += "|", e++) : r[e] === "|" ? (i.push(a.trim()), a = "") : a += r[e];
	return i.push(a.trim()), i;
}
function Ln(e) {
	return Y(e).map((e) => {
		let t = e.trim(), n = t.startsWith(":"), r = t.endsWith(":");
		return n && r ? "center" : r ? "right" : n ? "left" : null;
	});
}
function Rn(e) {
	let t = "", n = 0;
	for (; n < e.length;) {
		let r = e[n];
		switch (r.type) {
			case "heading": {
				let e = r;
				t += `<h${e.level}>${K(e.content)}</h${e.level}>`, n++;
				break;
			}
			case "paragraph":
				t += `<p>${K(r.content)}</p>`, n++;
				break;
			case "codeBlock": {
				let e = r, i = e.language ? ` data-language="${W(e.language)}"` : "";
				t += `<pre><code${i}>${W(e.code)}</code></pre>`, n++;
				break;
			}
			case "blockquote": {
				let e = Rn(J(r.content));
				t += `<blockquote>${e}</blockquote>`, n++;
				break;
			}
			case "hr":
				t += "<hr>", n++;
				break;
			case "listItem": {
				let r = zn(e, n);
				t += r.html, n = r.nextIndex;
				break;
			}
			case "table":
				t += Vn(r), n++;
				break;
			case "rawHtml":
				t += r.content, n++;
				break;
			default: n++;
		}
	}
	return t;
}
function zn(e, t) {
	let n = "", r = t, i = null;
	for (; r < e.length && e[r].type === "listItem";) {
		let t = e[r], a = Bn(t.listType);
		if (i !== null && i !== a && (n += `</${i === "ordered" ? "ol" : "ul"}>`, i = null), i === null) {
			if (a === "ordered") {
				let e = t.start !== void 0 && t.start !== 1 ? ` start="${t.start}"` : "";
				n += `<ol${e}>`;
			} else n += "<ul>";
			i = a;
		}
		if (t.listType === "task") {
			let e = t.checked ? " checked" : "";
			n += `<li><input type="checkbox" disabled${e}><p>${K(t.content)}</p>`;
		} else n += `<li><p>${K(t.content)}</p>`;
		if (t.childContent) {
			let e = J(t.childContent);
			n += Rn(e);
		}
		n += "</li>", r++;
	}
	return i !== null && (n += `</${i === "ordered" ? "ol" : "ul"}>`), {
		html: n,
		nextIndex: r
	};
}
function Bn(e) {
	return e === "ordered" ? "ordered" : "bullet";
}
function Vn(e) {
	let t = "<table>", n = e.headers.every((e) => e.trim() === ""), r = e.headers.length;
	if (!n) {
		t += "<thead><tr>";
		for (let n = 0; n < r; n++) {
			let r = e.alignments[n], i = r ? ` align="${r}"` : "";
			t += `<th${i}>${K(e.headers[n])}</th>`;
		}
		t += "</tr></thead>";
	}
	if (e.rows.length > 0) {
		t += "<tbody>";
		for (let n of e.rows) {
			t += "<tr>";
			for (let i = 0; i < r; i++) {
				let r = i < n.length ? n[i] : "", a = e.alignments[i], o = a ? ` align="${a}"` : "";
				t += `<td${o}>${K(r)}</td>`;
			}
			t += "</tr>";
		}
		t += "</tbody>";
	}
	return t += "</table>", t;
}
function Hn(e) {
	return Rn(J(e));
}
//#endregion
//#region src/api/parsers/markdown/parseMarkdown.ts
function Un(e) {
	return Hn(e);
}
function Wn(e, t) {
	return U(Un(e), t);
}
//#endregion
//#region src/editor/managers/ExportManager.ts
var Gn = class {
	editor;
	constructor(e) {
		this.editor = e;
	}
	blocksToHTMLLossy(e = this.editor.document) {
		return ge(this.editor.pmSchema, this.editor).exportBlocks(e, {});
	}
	blocksToFullHTML(e = this.editor.document) {
		return Tt(this.editor.pmSchema, this.editor).serializeBlocks(e, {});
	}
	tryParseHTMLToBlocks(e) {
		return U(e, this.editor.pmSchema);
	}
	blocksToMarkdownLossy(e = this.editor.document) {
		return we(e, this.editor.pmSchema, this.editor, {});
	}
	tryParseMarkdownToBlocks(e) {
		return Wn(e, this.editor.pmSchema);
	}
	pasteHTML(e, t = !1) {
		let n = e;
		if (!t) {
			let t = this.tryParseHTMLToBlocks(e);
			n = this.blocksToFullHTML(t);
		}
		n && this.editor.prosemirrorView?.pasteHTML(n);
	}
	pasteText(e) {
		return this.editor.prosemirrorView?.pasteText(e);
	}
	pasteMarkdown(e) {
		let t = Un(e);
		return this.pasteHTML(t);
	}
};
//#endregion
//#region src/api/blockManipulation/selections/textCursorPosition.ts
function Kn(e) {
	let { bnBlock: t } = _(e), n = e.doc.resolve(t.beforePos), r = n.nodeBefore, i = e.doc.resolve(t.afterPos).nodeAfter, a;
	return n.depth > 1 && (a = n.node(), a.type.isInGroup("bnBlock") || (a = n.node(n.depth - 1))), {
		block: C(t.node, e.doc),
		prevBlock: r === null ? void 0 : C(r, e.doc),
		nextBlock: i === null ? void 0 : C(i, e.doc),
		parentBlock: a === void 0 ? void 0 : C(a, e.doc)
	};
}
function qn(t, r, a = "start") {
	let o = typeof r == "string" ? r : r.id, s = n(i(t.doc)), l = x(o, t.doc);
	if (!l) throw Error(`Block with ID ${o} not found`);
	let u = S(l), d = s.blockSchema[u.blockNoteType].content;
	if (u.isBlockContainer) {
		let e = u.blockContent;
		if (d === "none") {
			t.setSelection(A.create(t.doc, e.beforePos));
			return;
		}
		if (d === "inline" || d === "plain") a === "start" ? t.setSelection(M.create(t.doc, e.beforePos + 1)) : t.setSelection(M.create(t.doc, e.afterPos - 1));
		else if (d === "table") a === "start" ? t.setSelection(M.create(t.doc, e.beforePos + 4)) : t.setSelection(M.create(t.doc, e.afterPos - 4));
		else throw new c(d);
	} else qn(t, e(a === "start" ? u.childContainer.node.firstChild : u.childContainer.node.lastChild, t.doc), a);
}
//#endregion
//#region src/api/clipboard/fromClipboard/acceptedMIMETypes.ts
var Jn = [
	"vscode-editor-data",
	"blocknote/html",
	"text/markdown",
	"text/html",
	"text/plain",
	"Files"
];
//#endregion
//#region src/api/clipboard/fromClipboard/handleFileInsertion.ts
function Yn(e, t) {
	if (!e.startsWith(".") || !t.startsWith(".")) throw Error("The strings provided are not valid file extensions.");
	return e === t;
}
function Xn(e, t) {
	let n = e.split("/"), r = t.split("/");
	if (n.length !== 2) throw Error(`The string ${e} is not a valid MIME type.`);
	if (r.length !== 2) throw Error(`The string ${t} is not a valid MIME type.`);
	return n[1] === "*" || r[1] === "*" ? n[0] === r[0] : (n[0] === "*" || r[0] === "*" || n[0] === r[0]) && n[1] === r[1];
}
function Zn(e, t, n, r = "after") {
	let i;
	return i = Array.isArray(t.content) && t.content.length === 0 ? e.updateBlock(t, n).id : e.insertBlocks([n], t, r)[0].id, i;
}
async function Qn(t, n) {
	if (!n.uploadFile) {
		console.warn("Attempted ot insert file, but uploadFile is not set in the BlockNote editor options");
		return;
	}
	let r = "dataTransfer" in t ? t.dataTransfer : t.clipboardData;
	if (r === null) return;
	let i = null;
	for (let e of Jn) if (r.types.includes(e)) {
		i = e;
		break;
	}
	if (i !== "Files") return;
	let a = r.items;
	if (a) {
		t.preventDefault();
		for (let r = 0; r < a.length; r++) {
			let i = "file";
			for (let e of Object.values(n.schema.blockSpecs)) for (let t of e.implementation.meta?.fileBlockAccept || []) {
				let n = t.startsWith("."), o = a[r].getAsFile();
				if (o && (!n && o.type && Xn(a[r].type, t) || n && Yn("." + o.name.split(".").pop(), t))) {
					i = e.config.type;
					break;
				}
			}
			let o = a[r].getAsFile();
			if (o) {
				let r = {
					type: i,
					props: { name: o.name }
				}, a;
				if (t.type === "paste") {
					let e = n.getTextCursorPosition().block;
					a = Zn(n, e, r);
				} else if (t.type === "drop") {
					let i = {
						left: t.clientX,
						top: t.clientY
					}, o = n.prosemirrorView.posAtCoords(i);
					if (!o) return;
					a = n.transact((t) => {
						let a = e(l(t, o.pos).bnBlock.node, t.doc), s = (n.domElement?.querySelector(`[data-id="${a}"]`))?.getBoundingClientRect();
						return Zn(n, n.getBlock(a), r, s && (s.top + s.bottom) / 2 > i.top ? "before" : "after");
					});
				} else return;
				let s = await n.uploadFile(o, a), c = typeof s == "string" ? { props: { url: s } } : { ...s };
				n.updateBlock(a, c);
			}
		}
	}
}
//#endregion
//#region src/api/clipboard/fromClipboard/fileDropExtension.ts
var $n = (e) => D.create({
	name: "dropFile",
	addProseMirrorPlugins() {
		return [new j({ props: { handleDOMEvents: { drop(t, n) {
			if (!e.isEditable) return;
			let r = null;
			for (let e of Jn) if (n.dataTransfer.types.includes(e)) {
				r = e;
				break;
			}
			return r === null ? !0 : r === "Files" ? (Qn(n, e), !0) : !1;
		} } } })];
	}
}), er = /(^|\n) {0,3}#{1,6} {1,8}[^\n]{1,64}\r?\n\r?\n\s{0,32}\S/, tr = /(_|__|\*|\*\*|~~|==|\+\+)(?!\s)(?:[^\s](?:.{0,62}[^\s])?|\S)(?=\1)/, nr = /\[[^\]]{1,128}\]\(https?:\/\/\S{1,999}\)/, rr = /(?:\s|^)`(?!\s)(?:[^\s`](?:[^`]{0,46}[^\s`])?|[^\s`])`([^\w]|$)/, ir = /(?:^|\n)\s{0,5}-\s{1}[^\n]+\n\s{0,15}-\s/, ar = /(?:^|\n)\s{0,5}\d+\.\s{1}[^\n]+\n\s{0,15}\d+\.\s/, or = /\n{2} {0,3}-{2,48}\n{2}/, sr = /(?:\n|^)(```|~~~|\$\$)(?!`|~)[^\s]{0,64} {0,64}[^\n]{0,64}\n[\s\S]{0,9999}?\s*\1 {0,64}(?:\n+|$)/, cr = /(?:\n|^)(?!\s)\w[^\n]{0,64}\r?\n(-|=)\1{0,64}\n\n\s{0,64}(\w|$)/, lr = /(?:^|(\r?\n\r?\n))( {0,3}>[^\n]{1,333}\n){1,999}($|(\r?\n))/, ur = /^\s*\|(.+\|)+\s*$/m, dr = /^\s*\|(\s*[-:]+[-:]\s*\|)+\s*$/m, fr = /^\s*\|(.+\|)+\s*$/m, pr = (e) => er.test(e) || tr.test(e) || nr.test(e) || rr.test(e) || ir.test(e) || ar.test(e) || or.test(e) || sr.test(e) || cr.test(e) || lr.test(e) || ur.test(e) || dr.test(e) || fr.test(e);
//#endregion
//#region src/api/clipboard/fromClipboard/handleVSCodePaste.ts
function mr(e, t) {
	let { schema: n } = t.state;
	if (!e.clipboardData) return !1;
	let r = e.clipboardData.getData("text/plain");
	if (!r || !n.nodes.codeBlock) return !1;
	let i = e.clipboardData.getData("vscode-editor-data"), a = (i ? JSON.parse(i) : void 0)?.mode;
	return a ? (t.pasteHTML(`<pre><code class="language-${a}">${r.replace(/\r\n?/g, "\n")}</code></pre>`), !0) : !1;
}
//#endregion
//#region src/api/clipboard/fromClipboard/pasteExtension.ts
function hr({ event: e, editor: t, prioritizeMarkdownOverHTML: n, plainTextAsMarkdown: r }) {
	if (t.transact((e) => e.selection.$from.parent.type.spec.code && e.selection.$to.parent.type.spec.code)) {
		let n = e.clipboardData?.getData("text/plain");
		if (n) return t.pasteText(n), !0;
	}
	let i;
	for (let t of Jn) if (e.clipboardData.types.includes(t)) {
		i = t;
		break;
	}
	if (!i) return !0;
	if (i === "vscode-editor-data") {
		if (mr(e, t.prosemirrorView)) return !0;
		i = "text/plain";
	}
	if (i === "Files") return Qn(e, t), !0;
	let a = e.clipboardData.getData(i);
	if (i === "blocknote/html") return t.pasteHTML(a, !0), !0;
	if (i === "text/markdown") return t.pasteMarkdown(a), !0;
	if (n) {
		let n = e.clipboardData.getData("text/plain");
		if (pr(n)) return t.pasteMarkdown(n), !0;
	}
	return i === "text/html" ? (t.pasteHTML(a), !0) : r ? (t.pasteMarkdown(a), !0) : (t.pasteText(a), !0);
}
var gr = (e, t) => D.create({
	name: "pasteFromClipboard",
	addProseMirrorPlugins() {
		return [new j({ props: { handleDOMEvents: { paste(n, r) {
			if (r.preventDefault(), e.isEditable) return t({
				event: r,
				editor: e,
				defaultPasteHandler: ({ prioritizeMarkdownOverHTML: t = !0, plainTextAsMarkdown: n = !0 } = {}) => hr({
					event: r,
					editor: e,
					prioritizeMarkdownOverHTML: t,
					plainTextAsMarkdown: n
				})
			});
		} } } })];
	}
});
//#endregion
//#region src/api/clipboard/toClipboard/copyExtension.ts
function _r(e, t, n) {
	let r = !1, i = e.state.selection instanceof F;
	if (!i) {
		let n = e.state.doc.slice(e.state.selection.from, e.state.selection.to, !1).content, i = [];
		for (let e = 0; e < n.childCount; e++) i.push(n.child(e));
		r = i.find((e) => e.type.isInGroup("bnBlock") || e.type.name === "blockGroup" || e.type.spec.group === "blockContent") === void 0, r && (t = n);
	}
	let a, o = ge(e.state.schema, n);
	if (i) {
		t.firstChild?.type.name === "table" && (t = t.firstChild.content);
		let e = ee(t, n.schema.inlineContentSchema, n.schema.styleSchema);
		a = `<table>${o.exportInlineContent(e, {})}</table>`;
	} else if (r) {
		let e = ae(t, n.schema.inlineContentSchema, n.schema.styleSchema);
		a = o.exportInlineContent(e, {});
	} else {
		let e = Te(t);
		a = o.exportBlocks(e, {});
	}
	return a;
}
function vr(e, t) {
	"node" in e.state.selection && e.state.selection.node.type.spec.group === "blockContent" && t.transact((t) => t.setSelection(new A(t.doc.resolve(e.state.selection.from - 1))));
	let n = e.serializeForClipboard(e.state.selection.content()).dom.innerHTML, r = e.state.selection.content().content, i = _r(e, r, t), { $from: a, $to: o } = e.state.selection, s = a.parent.type.name, c = t.blockImplementations[s];
	return {
		clipboardHTML: n,
		externalHTML: i,
		markdown: a.sameParent(o) && c?.implementation.meta?.code === !0 ? e.state.doc.textBetween(a.pos, o.pos) : be(i)
	};
}
var yr = (e) => {
	if (e.state.selection.empty) return !0;
	let t = window.getSelection();
	if (t && !t.isCollapsed) {
		let e = t.focusNode;
		for (; e;) {
			if (e instanceof HTMLElement && e.getAttribute("contenteditable") === "false") return !0;
			e = e.parentElement;
		}
	}
	return !1;
}, br = (e, t, n) => {
	n.preventDefault(), n.clipboardData.clearData();
	let { clipboardHTML: r, externalHTML: i, markdown: a } = vr(t, e);
	n.clipboardData.setData("blocknote/html", r), n.clipboardData.setData("text/html", i), n.clipboardData.setData("text/plain", a);
}, xr = (e) => D.create({
	name: "copyToClipboard",
	addProseMirrorPlugins() {
		return [new j({ props: { handleDOMEvents: {
			copy(t, n) {
				return yr(t) || br(e, t, n), !0;
			},
			cut(t, n) {
				return yr(t) ? !0 : (br(e, t, n), t.editable && t.dispatch(t.state.tr.deleteSelection()), !0);
			},
			dragstart(t, n) {
				if (!("node" in t.state.selection) || t.state.selection.node.type.spec.group !== "blockContent") return;
				e.transact((e) => e.setSelection(new A(e.doc.resolve(t.state.selection.from - 1)))), n.preventDefault(), n.dataTransfer.clearData();
				let { clipboardHTML: r, externalHTML: i, markdown: a } = vr(t, e);
				return n.dataTransfer.setData("blocknote/html", r), n.dataTransfer.setData("text/html", i), n.dataTransfer.setData("text/plain", a), !0;
			}
		} } })];
	}
}), Sr = D.create({
	name: "blockBackgroundColor",
	addGlobalAttributes() {
		return [{
			types: ["tableCell", "tableHeader"],
			attributes: { backgroundColor: pe() }
		}];
	}
}), Cr = O.create({
	name: "hardBreak",
	inline: !0,
	group: "inline",
	selectable: !1,
	linebreakReplacement: !0,
	priority: 10,
	parseHTML() {
		return [{ tag: "br" }];
	},
	renderHTML({ HTMLAttributes: e }) {
		return ["br", $e(this.options.HTMLAttributes, e)];
	},
	renderText() {
		return "\n";
	}
}), wr = (e, t) => {
	let n = e.resolve(t), r = n.depth - 1;
	if (r < 1) return;
	let i = n.before(r), a = e.resolve(i).nodeAfter;
	if (a) return a.type.spec.group?.includes("bnBlock") ? v(e.resolve(i)) : wr(e, i);
}, X = (e, t) => {
	let n = e.resolve(t), r = n.index();
	if (r === 0) return;
	let i = n.posAtIndex(r - 1);
	return v(e.resolve(i));
}, Z = (e, t) => {
	let n = e.resolve(t), r = n.index();
	if (r === n.node().childCount - 1) return;
	let i = n.posAtIndex(r + 1);
	return v(e.resolve(i));
}, Tr = (e, t) => {
	for (; t.childContainer;) {
		let n = t.childContainer.node, r = e.resolve(t.childContainer.beforePos + 1).posAtIndex(n.childCount - 1);
		t = v(e.resolve(r));
	}
	return t;
}, Er = (e, t) => e.isBlockContainer && e.blockContent.node.type.spec.content === "inline*" && e.blockContent.node.childCount > 0 && t.isBlockContainer && t.blockContent.node.type.spec.content === "inline*", Dr = (e, t, n, r) => {
	if (!r.isBlockContainer) throw Error(`Attempted to merge block at position ${r.bnBlock.beforePos} into previous block at position ${n.bnBlock.beforePos}, but next block is not a block container`);
	if (r.childContainer) {
		let n = e.doc.resolve(r.childContainer.beforePos + 1), i = e.doc.resolve(r.childContainer.afterPos - 1), a = n.blockRange(i);
		if (t) {
			let t = e.doc.resolve(r.bnBlock.beforePos);
			e.tr.lift(a, t.depth);
		}
	}
	if (t) {
		if (!n.isBlockContainer) throw Error(`Attempted to merge block at position ${r.bnBlock.beforePos} into previous block at position ${n.bnBlock.beforePos}, but previous block is not a block container`);
		t(e.tr.delete(n.blockContent.afterPos - 1, r.blockContent.beforePos + 1));
	}
	return !0;
}, Or = (e) => ({ state: t, dispatch: n }) => {
	let r = v(t.doc.resolve(e)), i = X(t.doc, r.bnBlock.beforePos);
	if (!i) return !1;
	let a = Tr(t.doc, i);
	return Er(a, r) ? Dr(t, n, a, r) : !1;
}, kr = D.create({
	priority: 50,
	addKeyboardShortcuts() {
		let e = () => this.editor.commands.first(({ chain: e, commands: t }) => [
			() => t.deleteSelection(),
			() => t.undoInputRule(),
			() => t.command(({ state: e }) => {
				let n = _(e);
				if (!n.isBlockContainer) return !1;
				let i = e.selection.from === n.blockContent.beforePos + 1, a = n.blockContent.node.type.name === "paragraph";
				return i && !a ? t.command(r(n.bnBlock.beforePos, {
					type: "paragraph",
					props: {}
				})) : !1;
			}),
			() => t.command(({ state: e, tr: t }) => {
				let n = _(e);
				if (!n.isBlockContainer) return !1;
				let { blockContent: r } = n;
				return e.selection.from === r.beforePos + 1 ? H(t, t.doc.type.schema.nodes.blockContainer, t.doc.type.schema.nodes.blockGroup) : !1;
			}),
			() => t.command(({ state: t }) => {
				let n = _(t);
				if (!n.isBlockContainer) return !1;
				let { bnBlock: r, blockContent: i } = n, a = X(t.doc, n.bnBlock.beforePos);
				if (!a || !a.isBlockContainer || a.blockContent.node.type.spec.content !== "inline*") return !1;
				let o = t.selection.from === i.beforePos + 1, s = t.selection.empty, c = r.beforePos;
				return o && s ? e().command(Or(c)).scrollIntoView().run() : !1;
			}),
			() => t.command(({ state: e, tr: t, dispatch: n }) => {
				let r = _(e);
				if (!r.isBlockContainer || e.selection.from !== r.blockContent.beforePos + 1) return !1;
				let i = X(e.doc, r.bnBlock.beforePos);
				if (!i || i.isBlockContainer) return !1;
				if (n) {
					let e = i.bnBlock.afterPos - 1, n = t.doc.resolve(e - 1);
					return t.delete(r.bnBlock.beforePos, r.bnBlock.afterPos), t.insert(n.pos, r.bnBlock.node), t.setSelection(M.near(t.doc.resolve(n.pos + 1))), !0;
				}
				return !1;
			}),
			() => t.command(({ state: e, tr: t, dispatch: n }) => {
				let r = _(e);
				if (!r.isBlockContainer || t.selection.from !== r.blockContent.beforePos + 1) return !1;
				let i = t.doc.resolve(r.bnBlock.beforePos);
				if (i.nodeBefore || i.node().type.name !== "column") return !1;
				let a = t.doc.resolve(r.bnBlock.beforePos), o = t.doc.resolve(a.before()), s = o.before();
				return n && (t.delete(r.bnBlock.beforePos, r.bnBlock.afterPos), L(t, s), o.pos === s + 1 ? (t.insert(s, r.bnBlock.node), t.setSelection(M.near(t.doc.resolve(s)))) : (t.insert(o.pos - 1, r.bnBlock.node), t.setSelection(M.near(t.doc.resolve(o.pos))))), !0;
			}),
			() => t.command(({ state: t }) => {
				let n = _(t);
				if (!n.isBlockContainer) return !1;
				if (n.blockContent.node.childCount === 0 && n.blockContent.node.type.spec.content === "inline*") {
					let r = X(t.doc, n.bnBlock.beforePos);
					if (!r) return !1;
					let i = Tr(t.doc, r);
					if (!i.isBlockContainer || !i || !i.isBlockContainer) return !1;
					let a = e();
					if (n.childContainer && a.insertContentAt(n.bnBlock.afterPos, n.childContainer?.node.content), i.blockContent.node.type.spec.content === "tableRow+") {
						let e = n.bnBlock.beforePos - 1 - 1 - 1 - 1 - 1;
						a = a.setTextSelection(e);
					} else if (i.blockContent.node.type.spec.content === "") a = a.setNodeSelection(i.blockContent.beforePos);
					else {
						let e = i.blockContent.afterPos - 1;
						a = a.setTextSelection(e);
					}
					return a.deleteRange({
						from: n.bnBlock.beforePos,
						to: n.bnBlock.afterPos
					}).scrollIntoView().run();
				}
				return !1;
			}),
			() => t.command(({ state: t }) => {
				let n = _(t);
				if (!n.isBlockContainer) return !1;
				let r = t.selection.from === n.blockContent.beforePos + 1, i = t.selection.empty, a = X(t.doc, n.bnBlock.beforePos);
				if (a && r && i) {
					let r = Tr(t.doc, a);
					if (!r.isBlockContainer) return !1;
					if (r.blockContent.node.type.spec.content === "" || r.blockContent.node.type.spec.content === "inline*" && r.blockContent.node.childCount === 0) return e().cut({
						from: n.bnBlock.beforePos,
						to: n.bnBlock.afterPos
					}, r.bnBlock.afterPos).deleteRange({
						from: r.bnBlock.beforePos,
						to: r.bnBlock.afterPos
					}).run();
				}
				return !1;
			})
		]), t = () => this.editor.commands.first(({ chain: e, commands: t }) => [
			() => t.deleteSelection(),
			() => t.command(({ state: t }) => {
				let n = _(t);
				if (!n.isBlockContainer || !n.childContainer) return !1;
				let { blockContent: r, childContainer: i } = n, a = t.selection.from === r.afterPos - 1, o = t.selection.empty, s = v(t.doc.resolve(i.beforePos + 1));
				if (!s.isBlockContainer) return !1;
				if (a && o) {
					let n = s.blockContent.node, a = n.type.spec.content === "inline*", o = r.node.type.spec.content === "inline*";
					return e().insertContentAt(s.bnBlock.afterPos, s.childContainer?.node.content || w.empty).deleteRange(i.node.childCount === 1 ? {
						from: i.beforePos,
						to: i.afterPos
					} : {
						from: s.bnBlock.beforePos,
						to: s.bnBlock.afterPos
					}).insertContentAt(t.selection.from, a && o ? n.content : null).setTextSelection(t.selection.from).scrollIntoView().run();
				}
				return !1;
			}),
			() => t.command(({ state: t }) => {
				let n = _(t);
				if (!n.isBlockContainer) return !1;
				let { bnBlock: r, blockContent: i } = n, a = Z(t.doc, n.bnBlock.beforePos);
				if (!a || !a.isBlockContainer) return !1;
				let o = t.selection.from === i.afterPos - 1, s = t.selection.empty, c = r.afterPos;
				return o && s ? e().command(Or(c)).scrollIntoView().run() : !1;
			}),
			() => t.command(({ state: e, tr: t, dispatch: n }) => {
				let r = _(e);
				if (!r.isBlockContainer || e.selection.from !== r.blockContent.afterPos - 1) return !1;
				let i = Z(e.doc, r.bnBlock.beforePos);
				if (!i || i.isBlockContainer) return !1;
				if (n) {
					let e = i.bnBlock.beforePos + 1, n = t.doc.resolve(e + 1);
					return t.delete(n.pos, n.pos + n.nodeAfter.nodeSize), L(t, i.bnBlock.beforePos), t.insert(r.bnBlock.afterPos, n.nodeAfter), t.setSelection(M.near(t.doc.resolve(n.pos))), !0;
				}
				return !1;
			}),
			() => t.command(({ state: e, tr: t, dispatch: n }) => {
				let r = _(e);
				if (!r.isBlockContainer || t.selection.from !== r.blockContent.afterPos - 1) return !1;
				let i = t.doc.resolve(r.bnBlock.afterPos);
				if (i.nodeAfter || i.node().type.name !== "column") return !1;
				let a = t.doc.resolve(r.bnBlock.afterPos), o = t.doc.resolve(a.after()), s = o.after();
				if (n) {
					let e = o.pos === s - 1 ? s : o.pos + 1, n = v(t.doc.resolve(e));
					t.delete(n.bnBlock.beforePos, n.bnBlock.afterPos), L(t, s - o.node().nodeSize), t.insert(a.pos, n.bnBlock.node), t.setSelection(M.near(t.doc.resolve(e)));
				}
				return !0;
			}),
			() => t.command(({ state: t }) => {
				let n = _(t);
				if (!n.isBlockContainer) return !1;
				let { blockContent: r } = n, i = t.selection.from === r.afterPos - 1, a = t.selection.empty;
				if (i && a) {
					let i = (e, t) => {
						let n = Z(e, t);
						if (n) return n;
						let r = wr(e, t);
						if (r) return i(e, r.bnBlock.beforePos);
					}, a = i(t.doc, n.bnBlock.beforePos);
					if (!a || !a.isBlockContainer) return !1;
					let o = a.blockContent.node, s = o.type.spec.content === "inline*", c = r.node.type.spec.content === "inline*";
					return e().insertContentAt(a.bnBlock.afterPos, a.childContainer?.node.content || w.empty).deleteRange({
						from: a.bnBlock.beforePos,
						to: a.bnBlock.afterPos
					}).insertContentAt(t.selection.from, s && c ? o.content : null).setTextSelection(t.selection.from).scrollIntoView().run();
				}
				return !1;
			}),
			() => t.command(({ state: t }) => {
				let n = _(t);
				if (!n.isBlockContainer) return !1;
				if (n.blockContent.node.childCount === 0 && n.blockContent.node.type.spec.content === "inline*") {
					let r = Z(t.doc, n.bnBlock.beforePos);
					if (!r || !r.isBlockContainer) return !1;
					let i = e();
					if (r.blockContent.node.type.spec.content === "tableRow+") {
						let e = n.bnBlock.afterPos + 1 + 1 + 1 + 1 + 1;
						i = i.setTextSelection(e);
					} else i = r.blockContent.node.type.spec.content === "" ? i.setNodeSelection(r.blockContent.beforePos) : i.setTextSelection(r.blockContent.beforePos + 1);
					return i.deleteRange({
						from: n.bnBlock.beforePos,
						to: n.bnBlock.afterPos
					}).scrollIntoView().run();
				}
				return !1;
			}),
			() => t.command(({ state: t }) => {
				let n = _(t);
				if (!n.isBlockContainer) return !1;
				let r = t.selection.from === n.blockContent.afterPos - 1, i = t.selection.empty, a = Z(t.doc, n.bnBlock.beforePos);
				if (!a || !a.isBlockContainer) return !1;
				if (a && r && i && (a.blockContent.node.type.spec.content === "" || a.blockContent.node.type.spec.content === "inline*" && a.blockContent.node.childCount === 0)) {
					let t = a.bnBlock.node.lastChild.content;
					return e().deleteRange({
						from: a.bnBlock.beforePos,
						to: a.bnBlock.afterPos
					}).insertContentAt(n.bnBlock.afterPos, a.bnBlock.node.childCount === 2 ? t : null).run();
				}
				return !1;
			})
		]), n = (e = !1) => this.editor.commands.first(({ commands: t, tr: n }) => [
			() => t.command(({ state: e, tr: t }) => {
				let n = _(e);
				if (!n.isBlockContainer) return !1;
				let { bnBlock: r, blockContent: i } = n, { depth: a } = e.doc.resolve(r.beforePos), o = e.selection.$anchor.parentOffset === 0, s = e.selection.anchor === e.selection.head, c = i.node.childCount === 0;
				return o && s && c && a > 1 ? H(t, t.doc.type.schema.nodes.blockContainer, t.doc.type.schema.nodes.blockGroup) : !1;
			}),
			() => t.command(({ state: t }) => {
				let r = _(t), i = this.options.editor.schema.blockSpecs[r.blockNoteType]?.implementation?.meta?.hardBreakShortcut ?? "shift+enter";
				if (i === "none") return !1;
				if (i === "shift+enter" && e || i === "enter") {
					let e = n.storedMarks || n.selection.$head.marks().filter((e) => this.editor.extensionManager.splittableMarks.includes(e.type.name));
					return n.insert(n.selection.head, n.doc.type.schema.nodes.hardBreak.create()).ensureMarks(e), !0;
				}
				return !1;
			}),
			() => t.command(({ state: e, dispatch: t, tr: n }) => {
				let r = _(e);
				if (!r.isBlockContainer) return !1;
				let { bnBlock: i, blockContent: a } = r, o = e.selection.$anchor.parentOffset === 0, s = e.selection.anchor === e.selection.head, c = a.node.childCount === 0;
				if (o && s && c) {
					let a = i.afterPos, o = a + 2;
					if (t) {
						let t = e.schema.nodes.blockContainer.createAndFill(void 0, [e.schema.nodes.paragraph.createAndFill() || void 0, r.childContainer?.node].filter((e) => e !== void 0));
						n.insert(a, t).setSelection(new M(n.doc.resolve(o))).scrollIntoView(), r.childContainer && n.delete(r.childContainer.beforePos, r.childContainer.afterPos);
					}
					return !0;
				}
				return !1;
			}),
			() => t.command(({ state: e, chain: t }) => {
				let n = _(e);
				if (!n.isBlockContainer) return !1;
				let { blockContent: r } = n, i = e.selection.$anchor.parentOffset === 0;
				return r.node.childCount === 0 ? !1 : (t().deleteSelection().command(g(e.selection.from, i, i)).scrollIntoView().run(), !0);
			})
		]);
		return {
			Backspace: e,
			Delete: t,
			Enter: () => n(),
			"Shift-Enter": () => n(!0),
			Tab: () => this.options.tabBehavior !== "prefer-indent" && (this.options.editor.getExtension(se)?.store.state || this.options.editor.getExtension(y)?.store.state !== void 0) ? !1 : Vt(this.options.editor),
			"Shift-Tab": () => this.options.tabBehavior !== "prefer-indent" && (this.options.editor.getExtension(se)?.store.state || this.options.editor.getExtension(y)?.store.state !== void 0) ? !1 : Ut(this.options.editor),
			"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()
		};
	}
}), Ar = D.create({
	name: "textAlignment",
	addGlobalAttributes() {
		return [{
			types: ["tableCell", "tableHeader"],
			attributes: { textAlignment: {
				default: "left",
				parseHTML: (e) => e.getAttribute("data-text-alignment"),
				renderHTML: (e) => e.textAlignment === "left" ? {} : { "data-text-alignment": e.textAlignment }
			} }
		}];
	}
}), jr = D.create({
	name: "blockTextColor",
	addGlobalAttributes() {
		return [{
			types: [
				"table",
				"tableCell",
				"tableHeader"
			],
			attributes: { textColor: fe() }
		}];
	}
}), Mr = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2";
//#endregion
//#region src/extensions/tiptap-extensions/Link/helpers/linkDetector.ts
function Nr(e) {
	let t = [], n = [], r = 0;
	for (; r < e.length;) {
		let i = 0;
		for (; r + i < e.length && e.charCodeAt(r + i) >= 48 && e.charCodeAt(r + i) <= 57;) i++;
		if (i > 0) {
			t.push(n.join(""));
			let a = parseInt(e.substring(r, r + i), 10);
			for (; a-- > 0;) n.pop();
			r += i;
		} else n.push(e[r]), r++;
	}
	return t;
}
var Pr = new Set(Nr(Mr)), Fr = new Set(["localhost"]), Ir = /[.,;:!?"']+$/, Lr = /(?:https?|ftp|ftps):\/\/[^\s]+/g, Rr = /mailto:[^\s]+/g, zr = /[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}/g, Br = /(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?::\d{1,5})?(?:[/?#][^\s]*)?/g;
function Vr(e) {
	let t = e, n = !0;
	for (; n;) {
		n = !1;
		let e = t;
		t = t.replace(Ir, ""), t !== e && (n = !0);
		for (let [e, r] of [["(", ")"], ["[", "]"]]) for (; t.endsWith(r);) {
			let i = Hr(t, e);
			if (Hr(t, r) > i) t = t.slice(0, -1), n = !0;
			else break;
		}
	}
	return t;
}
function Hr(e, t) {
	let n = 0;
	for (let r = 0; r < e.length; r++) e[r] === t && n++;
	return n;
}
function Ur(e) {
	let t = e.split(".");
	return t[t.length - 1].toLowerCase();
}
function Wr(e) {
	let t = Ur(e);
	return Pr.has(t);
}
function Gr(e, t, n) {
	return t === "email" ? "mailto:" + e : /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(e) || /^mailto:/i.test(e) ? e : n + "://" + e;
}
function Kr(e, t) {
	if (!e) return [];
	let n = t?.defaultProtocol || "http", r = [];
	for (let t of e.matchAll(Lr)) r.push({
		type: "url",
		value: t[0],
		start: t.index,
		end: t.index + t[0].length
	});
	for (let t of e.matchAll(Rr)) r.push({
		type: "url",
		value: t[0],
		start: t.index,
		end: t.index + t[0].length
	});
	for (let t of e.matchAll(zr)) r.push({
		type: "email",
		value: t[0],
		start: t.index,
		end: t.index + t[0].length
	});
	for (let t of e.matchAll(Br)) r.push({
		type: "url",
		value: t[0],
		start: t.index,
		end: t.index + t[0].length
	});
	r.sort((e, t) => e.start - t.start || t.end - e.end);
	let i = [], a = -1;
	for (let e of r) e.start >= a && (i.push(e), a = e.end);
	let o = [];
	for (let e of i) {
		let t = Vr(e.value);
		if (!t) continue;
		let r = e.start, i = r + t.length;
		if (e.type === "url" && !/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(t)) {
			let e = new URL("http://" + t).hostname;
			if (!Wr(e)) continue;
		}
		if (e.type === "email") {
			let e = t.split("@")[1];
			if (!Wr(e)) continue;
		}
		let a = Gr(t, e.type, n);
		o.push({
			type: e.type,
			value: t,
			isLink: !0,
			href: a,
			start: r,
			end: i
		});
	}
	return o;
}
function qr(e, t = "http") {
	if (!e) return [$(e, 0, 0)];
	for (let [n, r] of [
		["(", ")"],
		["[", "]"],
		["{", "}"]
	]) if (e.startsWith(n) && e.endsWith(r) && e.length > 2) {
		let i = e.slice(1, -1);
		if (Q(i)) return [
			$(n, 0, 1),
			Jr(i, 1, 1 + i.length, t),
			$(r, 1 + i.length, e.length)
		];
	}
	if (e.endsWith(".") && e.length > 1) {
		let n = e.slice(0, -1);
		if (Q(n)) return [Jr(n, 0, n.length, t), $(".", n.length, e.length)];
	}
	return Q(e) ? [Jr(e, 0, e.length, t)] : [$(e, 0, e.length)];
}
function Q(e) {
	if (/^(?:https?|ftp|ftps):\/\/[^\s]+$/.test(e) || /^mailto:[^\s]+$/.test(e) || Fr.has(e.toLowerCase())) return !0;
	let t = e.match(/^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+([a-zA-Z]{2,})(?::\d{1,5})?(?:[/?#][^\s]*)?$/);
	if (t) {
		let e = t[1].toLowerCase();
		if (Pr.has(e)) return !0;
	}
	return !1;
}
function Jr(e, t, n, r) {
	let i = e.includes("@") && !e.includes("://") && !e.startsWith("mailto:") ? "email" : "url";
	return {
		type: i,
		value: e,
		isLink: !0,
		href: Gr(e, i, r),
		start: t,
		end: n
	};
}
function $(e, t, n) {
	return {
		type: "text",
		value: e,
		isLink: !1,
		href: e,
		start: t,
		end: n
	};
}
//#endregion
//#region src/extensions/tiptap-extensions/Link/helpers/whitespace.ts
var Yr = "[\0- \xA0 ᠎ -\u2029  ]", Xr = new RegExp(Yr), Zr = RegExp(`${Yr}$`), Qr = new RegExp(Yr, "g");
//#endregion
//#region src/extensions/tiptap-extensions/Link/helpers/autolink.ts
function $r(e) {
	return e.length === 1 ? e[0].isLink : e.length === 3 && e[1].isLink ? ["()", "[]"].includes(e[0].value + e[2].value) : !1;
}
function ei(e) {
	return new rt({
		key: new it("autolink"),
		appendTransaction: (t, n, r) => {
			let i = t.some((e) => e.docChanged) && !n.doc.eq(r.doc), a = t.some((e) => e.getMeta("preventAutolink"));
			if (!i || a) return;
			let { tr: o } = r;
			if (qe(He(n.doc, [...t])).forEach(({ newRange: t }) => {
				let n = We(r.doc, t, (e) => e.isTextblock), i, a;
				if (n.length > 1) i = n[0], a = r.doc.textBetween(i.pos, i.pos + i.node.nodeSize, void 0, " ");
				else if (n.length) {
					let e = r.doc.textBetween(t.from, t.to, " ", " ");
					if (!Zr.test(e)) return;
					i = n[0], a = r.doc.textBetween(i.pos, t.to, void 0, " ");
				}
				if (i && a) {
					let t = a.split(Xr).filter(Boolean);
					if (t.length <= 0) return;
					let n = t[t.length - 1], s = i.pos + a.lastIndexOf(n);
					if (!n) return;
					let c = qr(n, e.defaultProtocol);
					if (!$r(c)) return;
					c.filter((e) => e.isLink).map((e) => ({
						...e,
						from: s + e.start + 1,
						to: s + e.end + 1
					})).filter((e) => r.schema.marks.code ? !r.doc.rangeHasMark(e.from, e.to, r.schema.marks.code) : !0).filter((t) => e.validate(t.value)).filter((t) => e.shouldAutoLink(t.value)).forEach((t) => {
						Ye(t.from, t.to, r.doc).some((t) => t.mark.type === e.type) || o.addMark(t.from, t.to, e.type.create({ href: t.href }));
					});
				}
			}), o.steps.length) return o;
		}
	});
}
//#endregion
//#region src/extensions/tiptap-extensions/Link/helpers/clickHandler.ts
function ti(e) {
	return new rt({
		key: new it("handleClickLink"),
		props: { handleClick: (t, n, r) => {
			if (r.button !== 0 || !t.editable) return !1;
			let i = null;
			if (r.target instanceof HTMLAnchorElement && r.target.getAttribute("data-inline-content-type") === "link") i = r.target;
			else {
				let t = r.target;
				if (!t) return !1;
				let n = e.tiptapEditor.view.dom;
				i = t.closest("a[data-inline-content-type=\"link\"]"), i && !n.contains(i) && (i = null);
			}
			if (!i) return !1;
			if (e.onClick) {
				if (!e.editor) throw Error("BlockNoteEditor not found in Link click handler");
				return e.onClick(r, e.editor) ?? !0;
			}
			let a = Ke(t.state, e.type.name), o = i.href ?? a.href, s = i.target ?? a.target;
			return o ? (window.open(o, s), !0) : !1;
		} }
	});
}
//#endregion
//#region src/extensions/tiptap-extensions/Link/helpers/pasteHandler.ts
function ni(e) {
	return new rt({
		key: new it("handlePasteLink"),
		props: { handlePaste: (t, n, r) => {
			let { shouldAutoLink: i, isValidLink: a } = e, { state: o } = t, { selection: s } = o, { empty: c } = s;
			if (c) return !1;
			let l = "";
			r.content.forEach((e) => {
				l += e.textContent;
			});
			let u = Kr(l, { defaultProtocol: e.defaultProtocol }).find((e) => e.isLink && e.value === l);
			return !l || !u || !a(u.value) || i !== void 0 && !i(u.value) ? !1 : e.editor.commands.setMark(e.type, { href: u.href });
		} }
	});
}
//#endregion
//#region src/extensions/tiptap-extensions/Link/link.ts
var ri = "https", ii = /^(?:(?:http|https|ftp|ftps|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z0-9+.\-]+(?:[^a-z+.\-:]|$))/i;
function ai(e) {
	if (!e) return !0;
	let t = e.replace(Qr, "");
	return ii.test(t);
}
function oi(e) {
	let t = /^[a-z][a-z0-9+.-]*:\/\//i.test(e), n = /^[a-z][a-z0-9+.-]*:/i.test(e);
	if (t || n && !e.includes("@")) return !0;
	let r = (e.includes("@") ? e.split("@").pop() : e).split(/[/?#:]/)[0];
	return !(/^\d{1,3}(\.\d{1,3}){3}$/.test(r) || !/\./.test(r));
}
var si = Ve.create({
	name: "link",
	keepOnSplit: !1,
	exitable: !0,
	inclusive: !1,
	addOptions() {
		return {
			HTMLAttributes: {
				target: "_blank",
				rel: "noopener noreferrer nofollow",
				className: "bn-inline-content-section",
				"data-inline-content-type": "link"
			},
			editor: void 0,
			onClick: void 0,
			isValidLink: ai
		};
	},
	addAttributes() {
		return { href: {
			default: null,
			parseHTML(e) {
				return e.getAttribute("href");
			}
		} };
	},
	parseHTML() {
		let e = this.options.isValidLink;
		return [{
			tag: "a[href]",
			getAttrs: (t) => {
				let n = t.getAttribute("href");
				return !n || !e(n) ? !1 : null;
			}
		}];
	},
	renderHTML({ HTMLAttributes: e }) {
		return this.options.isValidLink(e.href) ? [
			"a",
			$e(e, this.options.HTMLAttributes),
			0
		] : [
			"a",
			$e({
				...e,
				href: ""
			}, this.options.HTMLAttributes),
			0
		];
	},
	addPasteRules() {
		let e = this.options.isValidLink;
		return [Qe({
			find: (t) => {
				let n = [];
				if (t) {
					let r = Kr(t, { defaultProtocol: ri }).filter((t) => t.isLink && e(t.value));
					for (let e of r) oi(e.value) && n.push({
						text: e.value,
						data: { href: e.href },
						index: e.start
					});
				}
				return n;
			},
			type: this.type,
			getAttributes: (e) => ({ href: e.data?.href })
		})];
	},
	addProseMirrorPlugins() {
		let e = [];
		return e.push(ei({
			type: this.type,
			defaultProtocol: ri,
			validate: this.options.isValidLink,
			shouldAutoLink: oi
		})), e.push(ti({
			type: this.type,
			tiptapEditor: this.editor,
			editor: this.options.editor,
			onClick: this.options.onClick
		})), e.push(ni({
			editor: this.editor,
			defaultProtocol: ri,
			type: this.type,
			shouldAutoLink: oi,
			isValidLink: this.options.isValidLink
		})), e;
	}
}), ci = he(({ editor: e, options: t }) => ({
	key: "link",
	tiptapExtensions: [si.configure({
		HTMLAttributes: t.HTMLAttributes ?? {},
		editor: e,
		onClick: t.onClick,
		...t.isValidLink ? { isValidLink: t.isValidLink } : {}
	})]
})), li = {
	blockColor: "data-block-color",
	blockStyle: "data-block-style",
	id: "data-id",
	depth: "data-depth",
	depthChange: "data-depth-change"
}, ui = O.create({
	name: "blockContainer",
	group: "blockGroupChild bnBlock",
	content: "blockContent blockGroup?",
	priority: 50,
	defining: !0,
	marks() {
		return p(this.editor);
	},
	parseHTML() {
		return [{
			tag: "div[data-node-type=" + this.name + "]",
			getAttrs: (e) => {
				if (typeof e == "string") return !1;
				let t = {};
				for (let [n, r] of Object.entries(li)) e.getAttribute(r) && (t[n] = e.getAttribute(r));
				return t;
			}
		}, {
			tag: "div[data-node-type=\"blockOuter\"]",
			skip: !0
		}];
	},
	renderHTML({ HTMLAttributes: e }) {
		let t = document.createElement("div");
		t.className = "bn-block-outer", t.setAttribute("data-node-type", "blockOuter");
		for (let [n, r] of Object.entries(e)) n !== "class" && t.setAttribute(n, r);
		let n = {
			...this.options.domAttributes?.block || {},
			...e
		}, r = document.createElement("div");
		r.className = o("bn-block", n.class), r.setAttribute("data-node-type", this.name);
		for (let [e, t] of Object.entries(n)) e !== "class" && r.setAttribute(e, t);
		return t.appendChild(r), {
			dom: t,
			contentDOM: r
		};
	}
}), di = O.create({
	name: "blockGroup",
	group: "childContainer",
	content: "blockGroupChild+",
	marks() {
		return p(this.editor);
	},
	parseHTML() {
		return [{
			tag: "div",
			getAttrs: (e) => typeof e == "string" ? !1 : e.getAttribute("data-node-type") === "blockGroup" ? null : !1
		}];
	},
	renderHTML({ HTMLAttributes: e }) {
		let t = {
			...this.options.domAttributes?.blockGroup || {},
			...e
		}, n = document.createElement("div");
		n.className = o("bn-block-group", t.class), n.setAttribute("data-node-type", "blockGroup");
		for (let [e, r] of Object.entries(t)) e !== "class" && n.setAttribute(e, r);
		return {
			dom: n,
			contentDOM: n
		};
	}
}), fi = O.create({
	name: "doc",
	topNode: !0,
	content: "blockGroup",
	marks() {
		return p(this.editor);
	}
});
//#endregion
//#region src/editor/managers/ExtensionManager/extensions.ts
function pi(e, t) {
	return [
		k.ClipboardTextSerializer,
		k.Commands,
		k.Editable,
		k.FocusEvents,
		k.Tabindex,
		ut,
		u.configure({
			types: [
				"blockContainer",
				"columnList",
				"column"
			],
			setIdAttribute: t.setIdAttribute,
			isWithinEditor: e.isWithinEditor
		}),
		Cr,
		lt,
		...Object.values(e.schema.styleSpecs).map((t) => t.implementation.mark.configure({ editor: e })),
		jr,
		Sr,
		Ar,
		D.create({
			name: "OverrideEscape",
			addKeyboardShortcuts: () => ({ Escape: () => e.getExtension(ie)?.shown() ? !1 : (e.blur(), !0) })
		}),
		fi,
		ui.configure({
			editor: e,
			domAttributes: t.domAttributes
		}),
		kr.configure({
			editor: e,
			tabBehavior: t.tabBehavior
		}),
		di.configure({ domAttributes: t.domAttributes }),
		...Object.values(e.schema.inlineContentSpecs).filter((e) => e.config !== "link" && e.config !== "text").map((t) => t.implementation.node.configure({ editor: e })),
		...Object.values(e.schema.blockSpecs).flatMap((n) => [..."node" in n.implementation ? [n.implementation.node.configure({
			editor: e,
			domAttributes: t.domAttributes
		})] : []]),
		xr(e),
		gr(e, t.pasteHandler || ((e) => e.defaultPasteHandler())),
		$n(e)
	];
}
function mi(e, t) {
	let n = [
		ve(),
		_e(t),
		y(t),
		se(t),
		ci({
			HTMLAttributes: t.links?.HTMLAttributes ?? {},
			onClick: t.links?.onClick,
			...t.links?.isValidLink ? { isValidLink: t.links.isValidLink } : {}
		}),
		ke(t),
		Ae(),
		xe(t),
		Me(t),
		Ce(t),
		ie(t),
		ye(),
		je(),
		...t.trailingBlock === !1 ? [] : [De()]
	];
	return "table" in e.schema.blockSpecs && n.push(Se(t)), t.animations !== !1 && n.push(Oe()), n;
}
//#endregion
//#region src/editor/managers/ExtensionManager/index.ts
var hi = class {
	editor;
	options;
	disabledExtensions = /* @__PURE__ */ new Set();
	extensions = [];
	abortMap = /* @__PURE__ */ new Map();
	extensionFactories = /* @__PURE__ */ new Map();
	extensionPlugins = /* @__PURE__ */ new Map();
	blockNoteExtensionDependents = /* @__PURE__ */ new Map();
	constructor(e, t) {
		this.editor = e, this.options = t, e.onMount(() => {
			for (let t of this.extensions) if (t.mount) {
				let n = new window.AbortController(), r = t.mount({
					dom: e.prosemirrorView.dom,
					root: e.prosemirrorView.root,
					signal: n.signal
				});
				r && n.signal.addEventListener("abort", () => {
					r();
				}), this.abortMap.set(t, n);
			}
		}), e.onUnmount(() => {
			for (let [e, t] of this.abortMap.entries()) this.abortMap.delete(e), t.abort();
		}), this.disabledExtensions = new Set(t.disableExtensions || []);
		for (let e of mi(this.editor, this.options)) this.addExtension(e);
		for (let e of this.options.extensions ?? []) this.addExtension(e);
		for (let e of Object.values(this.editor.schema.blockSpecs)) for (let t of e.extensions ?? []) this.addExtension(t);
	}
	registerExtension(e) {
		this.replaceExtension(void 0, e);
	}
	addExtension(e, t) {
		let n;
		if (n = typeof e == "function" ? e({ editor: this.editor }) : e, !(!n || this.disabledExtensions.has(n.key))) {
			if (t) {
				let e = this.blockNoteExtensionDependents.get(n.key);
				e || (e = /* @__PURE__ */ new Set(), this.blockNoteExtensionDependents.set(n.key, e)), e.add(t);
			}
			if (!this.extensions.some((e) => e.key === n.key)) {
				if (typeof e == "function") {
					let e = n[me];
					typeof e == "function" && this.extensionFactories.set(e, n);
				}
				if (this.extensions.push(n), n.blockNoteExtensions) for (let e of n.blockNoteExtensions) this.addExtension(e, n.key);
				return n;
			}
		}
	}
	resolveExtensions(e) {
		let t = [];
		if (typeof e == "function") {
			let n = this.extensionFactories.get(e);
			n && t.push(n);
		} else if (Array.isArray(e)) for (let n of e) t.push(...this.resolveExtensions(n));
		else if (typeof e == "object" && "key" in e) t.push(e);
		else if (typeof e == "string") {
			let n = this.extensions.find((t) => t.key === e);
			n && t.push(n);
		}
		return t;
	}
	unregisterExtension(e) {
		this.replaceExtension(e, []);
	}
	replaceExtension(e, t) {
		let n = this.resolveExtensions(e);
		e && !n.length && console.warn("No extensions found to unregister", e);
		let r = !1, i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set();
		for (let t of n) this.extensions = this.extensions.filter((e) => e !== t), this.extensionFactories.forEach((e, n) => {
			e === t && this.extensionFactories.delete(n);
		}), this.abortMap.get(t)?.abort(), this.abortMap.delete(t), this.extensionPlugins.get(t)?.forEach((e) => {
			i.add(e);
			let t = e.spec?.key, n = typeof t == "object" && t ? t.key : t;
			typeof n == "string" && a.add(n);
		}), this.extensionPlugins.delete(t), t.tiptapExtensions && !r && (r = !0, console.warn(`Extension ${t.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));
		let o = [].concat(t).filter(Boolean).map((e) => this.addExtension(e)).filter(Boolean), s = [];
		for (let e of o) e?.tiptapExtensions && console.warn(`Extension ${e.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.`, e), e?.inputRules?.length && console.warn(`Extension ${e.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.`, e), this.getProsemirrorPluginsFromExtension(e).plugins.forEach((e) => {
			s.push(e);
		});
		!i.size && !a.size && !s.length || this.updatePlugins((e) => [...e.filter((e) => {
			if (i.has(e)) return !1;
			if (a.size) {
				let t = e.spec?.key, n = typeof t == "object" && t ? t.key : t;
				if (typeof n == "string" && a.has(n)) return !1;
			}
			return !0;
		}), ...s]);
	}
	updatePlugins(e) {
		let t = this.editor.prosemirrorState, n = t.reconfigure({ plugins: e(t.plugins.slice()) });
		this.editor.prosemirrorView.updateState(n);
	}
	getTiptapExtensions() {
		let e = pi(this.editor, this.options).filter((e) => !this.disabledExtensions.has(e.name)), t = s(this.extensions.map((e) => {
			let t = this.blockNoteExtensionDependents.get(e.key);
			return t?.size ? {
				key: e.key,
				runsBefore: [...e.runsBefore ?? [], ...t]
			} : e;
		})), n = /* @__PURE__ */ new Map();
		for (let r of this.extensions) {
			r.tiptapExtensions && e.push(...r.tiptapExtensions);
			let i = t(r.key), { plugins: a, inputRules: o } = this.getProsemirrorPluginsFromExtension(r);
			a.length && e.push(D.create({
				name: r.key,
				priority: i,
				addProseMirrorPlugins: () => a
			})), o.length && (n.has(i) || n.set(i, []), n.get(i).push(...o));
		}
		e.push(D.create({
			name: "blocknote-input-rules",
			addProseMirrorPlugins() {
				let e = [];
				Array.from(n.keys()).sort((e, t) => e - t).reverse().forEach((t) => {
					e.push(...n.get(t));
				});
				let t = st({ rules: e });
				return [t, new j({ props: { handleKeyDown(e, n) {
					if (n.key !== "Enter" || n.shiftKey || n.ctrlKey || n.metaKey || n.altKey) return !1;
					let { $cursor: r } = e.state.selection;
					return r ? !!t.props.handleTextInput?.call(t, e, r.pos, r.pos, "\n", () => e.state.tr.insertText("\n", r.pos, r.pos)) : !1;
				} } })];
			}
		}));
		for (let t of this.options._tiptapOptions?.extensions ?? []) e.push(t);
		return e;
	}
	getProsemirrorPluginsFromExtension(t) {
		let n = [...t.prosemirrorPlugins ?? []], r = [];
		return !t.prosemirrorPlugins?.length && !Object.keys(t.keyboardShortcuts || {}).length && !t.inputRules?.length ? {
			plugins: n,
			inputRules: r
		} : (this.extensionPlugins.set(t, n), t.inputRules?.length && r.push(...t.inputRules.map((t) => new ot(t.find, (n, r, i, a) => {
			let o = t.replace({
				match: r,
				range: {
					from: i,
					to: a
				},
				editor: this.editor
			});
			if (o) {
				let t = n.tr, r = _(t);
				return !r.isBlockContainer || this.editor.schema.blockSchema[r.blockNoteType]?.content !== "inline" ? null : (t.deleteRange(i, a), m(t, r.bnBlock.beforePos, o), qn(t, e(r.bnBlock.node, t.doc), "start"), t);
			}
			return null;
		}, { undoable: !0 }))), Object.keys(t.keyboardShortcuts || {}).length && n.push(ct(Object.fromEntries(Object.entries(t.keyboardShortcuts).map(([e, t]) => [e, () => t({ editor: this.editor })])))), {
			plugins: n,
			inputRules: r
		});
	}
	getExtensions() {
		return new Map(this.extensions.map((e) => [e.key, e]));
	}
	getExtension(e) {
		if (typeof e == "string") return this.extensions.find((t) => t.key === e) || void 0;
		if (typeof e == "function") return this.extensionFactories.get(e) || void 0;
		throw Error(`Invalid extension type: ${typeof e}`);
	}
	hasExtension(e) {
		return typeof e == "string" ? this.extensions.some((t) => t.key === e) : typeof e == "object" && "key" in e ? this.extensions.some((t) => t.key === e.key) : typeof e == "function" ? this.extensionFactories.has(e) : !1;
	}
};
//#endregion
//#region src/util/expandToWords.ts
function gi(e, t) {
	let { $from: n, $to: r } = t;
	if (n.pos > n.start() && n.pos < e.content.size) {
		let t = e.textBetween(n.pos, n.pos + 1);
		if (/^[\w\p{P}]$/u.test(t)) {
			let t = e.textBetween(n.start(), n.pos).match(/[\w\p{P}]+$/u);
			t && (n = e.resolve(n.pos - t[0].length));
		}
	}
	if (r.pos < r.end() && r.pos > 0) {
		let t = e.textBetween(r.pos - 1, r.pos);
		if (/^[\w\p{P}]$/u.test(t)) {
			let t = e.textBetween(r.pos, r.end()).match(/^[\w\p{P}]+/u);
			t && (r = e.resolve(r.pos + t[0].length));
		}
	}
	return {
		$from: n,
		$to: r,
		from: n.pos,
		to: r.pos
	};
}
//#endregion
//#region src/api/blockManipulation/selections/selection.ts
function _i(e) {
	if (e.selection.empty || "node" in e.selection) return;
	let t = e.doc.resolve(h(e.doc, e.selection.from).posBeforeNode), n = e.doc.resolve(h(e.doc, e.selection.to).posBeforeNode), r = (n, r) => {
		let i = t.posAtIndex(n, r), a = e.doc.resolve(i).nodeAfter;
		if (!a) throw Error(`Error getting selection - node not found at position ${i}`);
		return C(a, e.doc);
	}, i = [], a = t.sharedDepth(n.pos), o = t.index(a), s = n.index(a);
	if (t.depth > a) {
		i.push(C(t.nodeAfter, e.doc));
		for (let e = t.depth; e > a; e--) if (t.node(e).type.isInGroup("childContainer")) {
			let n = t.index(e) + 1, a = t.node(e).childCount;
			for (let t = n; t < a; t++) i.push(r(t, e));
		}
	} else i.push(r(o, a));
	for (let e = o + 1; e <= s; e++) i.push(r(e, a));
	if (i.length === 0) throw Error(`Error getting selection - selection doesn't span any blocks (${e.selection})`);
	return { blocks: i };
}
function vi(e, t, r) {
	let a = typeof t == "string" ? t : t.id, o = typeof r == "string" ? r : r.id, s = n(i(e));
	if (a === o) throw Error(`Attempting to set selection with the same anchor and head blocks (id ${a})`);
	let c = x(a, e.doc);
	if (!c) throw Error(`Block with ID ${a} not found`);
	let l = x(o, e.doc);
	if (!l) throw Error(`Block with ID ${o} not found`);
	let u = S(c), d = S(l), f = s.blockSchema[u.blockNoteType], p = s.blockSchema[d.blockNoteType];
	if (!u.isBlockContainer || f.content === "none") throw Error(`Attempting to set selection anchor in block without content (id ${a})`);
	if (!d.isBlockContainer || p.content === "none") throw Error(`Attempting to set selection anchor in block without content (id ${o})`);
	let m, h;
	if (f.content === "table") {
		let e = nt.get(u.blockContent.node);
		m = u.blockContent.beforePos + e.positionAt(0, 0, u.blockContent.node) + 1 + 2;
	} else m = u.blockContent.beforePos + 1;
	if (p.content === "table") {
		let t = nt.get(d.blockContent.node), n = d.blockContent.beforePos + t.positionAt(t.height - 1, t.width - 1, d.blockContent.node) + 1;
		h = n + e.doc.resolve(n).nodeAfter.nodeSize - 2;
	} else h = d.blockContent.afterPos - 1;
	e.setSelection(M.create(e.doc, m, h));
}
function yi(e, t = !1) {
	let n = t ? gi(e.doc, e.selection) : e.selection, r = n.$from, i = n.$to;
	for (; i.parentOffset >= i.parent.nodeSize - 2 && i.depth > 0;) i = e.doc.resolve(i.pos + 1);
	for (; i.parentOffset === 0 && i.depth > 0;) i = e.doc.resolve(i.pos - 1);
	for (; r.parentOffset === 0 && r.depth > 0;) r = e.doc.resolve(r.pos - 1);
	for (; r.parentOffset >= r.parent.nodeSize - 2 && r.depth > 0;) r = e.doc.resolve(r.pos + 1);
	let a = de(e.doc.slice(r.pos, i.pos, !0));
	return {
		_meta: {
			startPos: r.pos,
			endPos: i.pos
		},
		...a
	};
}
//#endregion
//#region src/editor/managers/SelectionManager.ts
var bi = class {
	editor;
	constructor(e) {
		this.editor = e;
	}
	getSelection() {
		return this.editor.transact((e) => _i(e));
	}
	getSelectionCutBlocks(e = !1) {
		return this.editor.transact((t) => yi(t, e));
	}
	setSelection(e, t) {
		return this.editor.transact((n) => vi(n, e, t));
	}
	getTextCursorPosition() {
		return this.editor.transact((e) => Kn(e));
	}
	setTextCursorPosition(e, t = "start") {
		return this.editor.transact((n) => qn(n, e, t));
	}
	getSelectionBoundingBox() {
		if (!this.editor.prosemirrorView) return;
		let { selection: e } = this.editor.prosemirrorState, { ranges: t } = e, n = Math.min(...t.map((e) => e.$from.pos)), r = Math.max(...t.map((e) => e.$to.pos));
		if (Ze(e)) {
			let e = this.editor.prosemirrorView.nodeDOM(n);
			if (e) return e.getBoundingClientRect();
		}
		return et(this.editor.prosemirrorView, n, r).toJSON();
	}
}, xi = class {
	editor;
	constructor(e) {
		this.editor = e;
	}
	activeTransaction = null;
	can(e) {
		try {
			return this.isInCan = !0, e();
		} finally {
			this.isInCan = !1;
		}
	}
	isInCan = !1;
	exec(e) {
		if (this.activeTransaction) throw Error("`exec` should not be called within a `transact` call, move the `exec` call outside of the `transact` call");
		if (this.isInCan) return this.canExec(e);
		let t = this.prosemirrorState, n = this.prosemirrorView;
		return e(t, (e) => this.prosemirrorView.dispatch(e), n);
	}
	canExec(e) {
		if (this.activeTransaction) throw Error("`canExec` should not be called within a `transact` call, move the `canExec` call outside of the `transact` call");
		let t = this.prosemirrorState, n = this.prosemirrorView;
		return e(t, void 0, n);
	}
	transact(e) {
		if (this.activeTransaction) return e(this.activeTransaction);
		try {
			this.activeTransaction = this.editor._tiptapEditor.state.tr;
			let t = e(this.activeTransaction), n = this.activeTransaction;
			return this.activeTransaction = null, n && (n.docChanged || n.selectionSet || n.scrolledIntoView || n.storedMarksSet || !n.isGeneric) && this.prosemirrorView.dispatch(n), t;
		} finally {
			this.activeTransaction = null;
		}
	}
	get prosemirrorState() {
		if (this.activeTransaction) throw Error("`prosemirrorState` should not be called within a `transact` call, move the `prosemirrorState` call outside of the `transact` call or use `editor.transact` to read the current editor state");
		return this.editor._tiptapEditor.state;
	}
	get prosemirrorView() {
		return this.editor._tiptapEditor.view;
	}
	isFocused() {
		return this.prosemirrorView?.hasFocus() || !1;
	}
	focus() {
		this.prosemirrorView?.focus();
	}
	get isEditable() {
		if (!this.editor._tiptapEditor) {
			if (!this.editor.headless) throw Error("no editor, but also not headless?");
			return !1;
		}
		return this.editor._tiptapEditor.isEditable === void 0 ? !0 : this.editor._tiptapEditor.isEditable;
	}
	set isEditable(e) {
		if (!this.editor._tiptapEditor) {
			if (!this.editor.headless) throw Error("no editor, but also not headless?");
			return;
		}
		this.editor._tiptapEditor.options.editable !== e && this.editor._tiptapEditor.setEditable(e);
	}
	undo() {
		let e = this.editor.getExtension("yUndo");
		if (e) return this.exec(e.undoCommand);
		let t = this.editor.getExtension("history");
		if (t) return this.exec(t.undoCommand);
		throw Error("No undo plugin found");
	}
	redo() {
		let e = this.editor.getExtension("yUndo");
		if (e) return this.exec(e.redoCommand);
		let t = this.editor.getExtension("history");
		if (t) return this.exec(t.redoCommand);
		throw Error("No redo plugin found");
	}
};
//#endregion
//#region src/api/blockManipulation/insertContentAt.ts
function Si(e, t, n, r = { updateSelection: !0 }) {
	let { from: i, to: a } = typeof t == "number" ? {
		from: t,
		to: t
	} : {
		from: t.from,
		to: t.to
	}, o = !0, s = !0, c = "";
	if (n.forEach((e) => {
		e.check(), o && e.isText && e.marks.length === 0 ? c += e.text : o = !1, s = s ? e.isBlock : !1;
	}), i === a && s) {
		let { parent: t } = e.doc.resolve(i);
		t.isTextblock && !t.type.spec.code && !t.childCount && (--i, a += 1);
	}
	return o ? e.insertText(c, i, a) : e.replaceWith(i, a, n), r.updateSelection && tt(e, e.steps.length - 1, -1), !0;
}
//#endregion
//#region src/editor/managers/StyleManager.ts
var Ci = class {
	editor;
	constructor(e) {
		this.editor = e;
	}
	insertInlineContent(e, { updateSelection: t = !1 } = {}) {
		let n = d(e, this.editor.pmSchema);
		this.editor.transact((e) => {
			Si(e, {
				from: e.selection.from,
				to: e.selection.to
			}, n, { updateSelection: t });
		});
	}
	getActiveStyles() {
		return this.editor.transact((e) => {
			let t = {}, n = e.selection.$to.marks();
			for (let e of n) {
				let n = this.editor.schema.styleSchema[e.type.name];
				if (!n) {
					e.type.name !== "link" && !e.type.spec.blocknoteIgnore && console.warn("mark not found in styleschema", e.type.name);
					continue;
				}
				n.propSchema === "boolean" ? t[n.type] = !0 : t[n.type] = e.attrs.stringValue;
			}
			return t;
		});
	}
	addStyles(e) {
		for (let [t, n] of Object.entries(e)) {
			let e = this.editor.schema.styleSchema[t];
			if (!e) throw Error(`style ${t} not found in styleSchema`);
			if (e.propSchema === "boolean") this.editor._tiptapEditor.commands.setMark(t);
			else if (e.propSchema === "string") this.editor._tiptapEditor.commands.setMark(t, { stringValue: n });
			else throw new c(e.propSchema);
		}
	}
	removeStyles(e) {
		for (let t of Object.keys(e)) this.editor._tiptapEditor.commands.unsetMark(t);
	}
	toggleStyles(e) {
		for (let [t, n] of Object.entries(e)) {
			let e = this.editor.schema.styleSchema[t];
			if (!e) throw Error(`style ${t} not found in styleSchema`);
			if (e.propSchema === "boolean") this.editor._tiptapEditor.commands.toggleMark(t);
			else if (e.propSchema === "string") this.editor._tiptapEditor.commands.toggleMark(t, { stringValue: n });
			else throw new c(e.propSchema);
		}
	}
	getSelectedText() {
		return this.editor.transact((e) => e.doc.textBetween(e.selection.from, e.selection.to));
	}
	getLinkMarkAtPos(e) {
		return this.editor.transact((t) => {
			let n = t.doc.resolve(e), r = n.marks().find((e) => e.type.name === "link");
			if (!r) return;
			let i = Je(n, r.type);
			if (i) return {
				href: r.attrs.href,
				from: i.from,
				to: i.to,
				text: t.doc.textBetween(i.from, i.to)
			};
		});
	}
	getSelectedLinkUrl() {
		return this.editor.transact((e) => this.getLinkMarkAtPos(e.selection.from)?.href);
	}
	createLink(e, t) {
		e !== "" && this.editor.transact((n) => {
			let { from: r, to: i } = n.selection, a = this.editor.pmSchema.mark("link", { href: e });
			t ? n.insertText(t, r, i).addMark(r, r + t.length, a) : n.addMark(r, i, a);
		});
	}
	editLink(e, t, n = this.editor.transact((e) => e.selection.anchor)) {
		this.editor.transact((r) => {
			let { from: i, to: a } = this.getLinkMarkAtPos(n + 1) || {
				from: r.selection.from,
				to: r.selection.to
			}, o = this.editor.pmSchema.mark("link", { href: e });
			t !== r.doc.textBetween(i, a) && r.insertText(t, i, a), r.addMark(i, i + t.length, o);
		}), this.editor.prosemirrorView.focus();
	}
	deleteLink(e = this.editor.transact((e) => e.selection.anchor)) {
		this.editor.transact((t) => {
			let { from: n, to: r } = this.getLinkMarkAtPos(e + 1) || {
				from: t.selection.from,
				to: t.selection.to
			};
			t.removeMark(n, r, this.editor.pmSchema.marks.link).setMeta("preventAutolink", !0);
		}), this.editor.prosemirrorView.focus();
	}
};
//#endregion
//#region src/editor/transformPasted.ts
function wi(e) {
	return Ge(e.state.selection.$from, (e) => e.type.name === "tableCell" || e.type.name === "tableHeader") !== void 0;
}
function Ti(e, t) {
	let n = t.nodes.hardBreak, r = N.empty;
	return e.forEach((e) => {
		e.isTextblock && e.childCount > 0 ? (r = r.append(e.content), r = r.addToEnd(n.create())) : e.isText ? r = r.addToEnd(e) : e.isBlock && e.childCount > 0 && (r = r.append(Ti(e.content, t)), r = r.addToEnd(n.create()));
	}), r.lastChild?.type === n && (r = r.cut(0, r.size - 1)), r;
}
function Ei(e, t) {
	let n = [];
	return e.forEach((e, r, i) => {
		i !== t && n.push(e);
	}), N.from(n);
}
function Di(e, t) {
	let n = [];
	for (let r = 0; r < e.childCount; r++) if (e.child(r).type.name === "tableRow") if (n.length > 0 && n[n.length - 1].type.name === "table") {
		let t = n[n.length - 1], i = t.copy(t.content.addToEnd(e.child(r)));
		n[n.length - 1] = i;
	} else {
		let i = t.nodes.table.createChecked(void 0, e.child(r));
		n.push(i);
	}
	else n.push(e.child(r));
	return e = N.from(n), e;
}
function Oi(e, t) {
	let n = N.from(e.content);
	n = Di(n, t.state.schema);
	let r = ki(n, t, e);
	if (r) return r;
	if (wi(t)) {
		let e = !1;
		if (n.descendants((t) => {
			t.type.isInGroup("tableContent") && (e = !0);
		}), !e && !t.state.schema.nodes.tableParagraph.validContent(n)) return new P(Ti(n, t.state.schema), 0, 0);
	}
	if (!Ai(n, t)) return new P(n, e.openStart, e.openEnd);
	for (let e = 0; e < n.childCount; e++) if (n.child(e).type.spec.group === "blockContent") {
		let r = [n.child(e)];
		if (e + 1 < n.childCount && n.child(e + 1).type.name === "blockGroup") {
			let t = n.child(e + 1).child(0).child(0);
			(t.type.name === "bulletListItem" || t.type.name === "numberedListItem" || t.type.name === "checkListItem") && (r.push(n.child(e + 1)), n = Ei(n, e + 1));
		}
		let i = t.state.schema.nodes.blockContainer.createChecked(void 0, r);
		n = n.replaceChild(e, i);
	}
	return new P(n, e.openStart, e.openEnd);
}
function ki(e, t, n) {
	if (wi(t) || t.dragging) return null;
	let r = _(t.state), i = r.isBlockContainer ? r.blockContent.node : null;
	if (!i || i.type.name === "paragraph" || i.type.spec.content !== "inline*" || i.childCount > 0) return null;
	let a = e.firstChild, o = a?.firstChild, s = o?.firstChild;
	if (a?.type.name !== "blockGroup" || o?.type.name !== "blockContainer" || s?.type.name !== "paragraph") return null;
	let c = i.type.create(i.attrs, s.content), l = o.copy(o.content.replaceChild(0, c)), u = a.copy(a.content.replaceChild(0, l));
	return new P(e.replaceChild(0, u), n.openStart, n.openEnd);
}
function Ai(e, t) {
	let n = e.childCount === 1, r = e.firstChild?.type.spec.content === "inline*", i = e.firstChild?.type.spec.content === "tableRow+";
	if (n) {
		if (r) return !1;
		if (i) {
			let e = _(t.state);
			if (e.isBlockContainer) return e.blockContent.node.type.spec.content !== "tableRow+";
		}
	}
	return !0;
}
//#endregion
//#region src/editor/BlockNoteEditor.ts
var ji = {
	enableInputRules: !0,
	enablePasteRules: !0,
	enableCoreExtensions: !1
}, Mi = class e extends B {
	options;
	pmSchema;
	_tiptapEditor;
	elementRenderer = null;
	blockCache = /* @__PURE__ */ new WeakMap();
	dictionary;
	schema;
	blockImplementations;
	inlineContentImplementations;
	styleImplementations;
	uploadFile;
	onUploadStartCallbacks = [];
	onUploadEndCallbacks = [];
	resolveFileUrl;
	settings;
	static create(t) {
		return new e(t ?? {});
	}
	constructor(e) {
		super(), this.options = e, this.dictionary = e.dictionary || Ne, this.settings = { tables: {
			splitCells: e?.tables?.splitCells ?? !1,
			cellBackgroundColor: e?.tables?.cellBackgroundColor ?? !1,
			cellTextColor: e?.tables?.cellTextColor ?? !1,
			headers: e?.tables?.headers ?? !1
		} };
		let t = {
			defaultStyles: !0,
			schema: e.schema || ce.create(),
			...e,
			placeholders: {
				...this.dictionary.placeholders,
				...e.placeholders
			}
		};
		if (this.schema = t.schema, this.blockImplementations = t.schema.blockSpecs, this.inlineContentImplementations = t.schema.inlineContentSpecs, this.styleImplementations = t.schema.styleSpecs, t.uploadFile) {
			let e = t.uploadFile;
			this.uploadFile = async (t, n) => {
				this.onUploadStartCallbacks.forEach((e) => e.apply(this, [n]));
				try {
					return await e(t, n);
				} finally {
					this.onUploadEndCallbacks.forEach((e) => e.apply(this, [n]));
				}
			};
		}
		this.resolveFileUrl = t.resolveFileUrl, this._eventManager = new Zt(this), this._extensionManager = new hi(this, t);
		let n = this._extensionManager.getTiptapExtensions(), r = {
			...ji,
			...t._tiptapOptions,
			element: null,
			autofocus: t.autofocus ?? !1,
			extensions: n,
			editorProps: {
				scrollMargin: {
					top: 72,
					bottom: 72,
					left: 0,
					right: 0
				},
				...t._tiptapOptions?.editorProps,
				attributes: {
					tabIndex: "0",
					...t._tiptapOptions?.editorProps?.attributes,
					...t.domAttributes?.editor,
					class: o("bn-editor", t.defaultStyles ? "bn-default-styles" : "", t.domAttributes?.editor?.class || "")
				},
				transformPasted: Oi
			}
		};
		try {
			let e = t.initialContent || [{
				type: "paragraph",
				id: u.options.generateID()
			}];
			if (!Array.isArray(e) || e.length === 0) throw Error("initialContent must be a non-empty array of blocks, received: " + JSON.stringify(e));
			let n = Xe(r.extensions);
			n.cached.blockNoteEditor = this;
			let i = Ue({
				type: "doc",
				content: [{
					type: "blockGroup",
					content: e.map((e) => b(e, n, this.schema.styleSchema).toJSON())
				}]
			}, n, r.parseOptions);
			this._tiptapEditor = new Be({
				...r,
				content: i.toJSON()
			}), this.pmSchema = this._tiptapEditor.schema;
		} catch (e) {
			throw Error("Error creating document from blocks passed as `initialContent`", { cause: e });
		}
		this.pmSchema.cached.blockNoteEditor = this, this._tiptapEditor.on("mount", () => {
			this.headless = !1;
		}), this._tiptapEditor.on("unmount", () => {
			this.headless = !0;
		}), this._blockManager = new Xt(this), this._exportManager = new Gn(this), this._selectionManager = new bi(this), this._stateManager = new xi(this), this._styleManager = new Ci(this), this.emit("create");
	}
	_blockManager;
	_eventManager;
	_exportManager;
	_extensionManager;
	_selectionManager;
	_stateManager;
	_styleManager;
	get extensions() {
		return this._extensionManager.getExtensions();
	}
	exec(e) {
		return this._stateManager.exec(e);
	}
	canExec(e) {
		return this._stateManager.canExec(e);
	}
	transact(e) {
		return this._stateManager.transact(e);
	}
	unregisterExtension = (...e) => this._extensionManager.unregisterExtension(...e);
	registerExtension = (...e) => this._extensionManager.registerExtension(...e);
	replaceExtension = (...e) => this._extensionManager.replaceExtension(...e);
	getExtension = ((...e) => this._extensionManager.getExtension(...e));
	mount = (e, t) => {
		let n = e.getRootNode(), r = typeof ShadowRoot < "u" && n instanceof ShadowRoot;
		(t?.portalTarget ?? e.parentElement ?? (r ? n : document.body)).appendChild(this.portalElement), this._tiptapEditor.mount({ mount: e });
	};
	unmount = () => {
		this.portalElement?.remove(), this._tiptapEditor.unmount();
	};
	get prosemirrorState() {
		return this._stateManager.prosemirrorState;
	}
	get prosemirrorView() {
		return this._stateManager.prosemirrorView;
	}
	get domElement() {
		if (!this.headless) return this.prosemirrorView?.dom;
	}
	_portalElement;
	get portalElement() {
		if (typeof document > "u") throw Error("Portal element accessed, but not available in headless mode");
		return this._portalElement ||= document.createElement("div"), this._portalElement;
	}
	isWithinEditor = (e) => !!(this.domElement?.parentElement?.contains(e) || this.portalElement?.contains(e));
	isFocused() {
		return this.headless ? !1 : this.prosemirrorView?.hasFocus() || !1;
	}
	headless = !0;
	focus() {
		this.headless || this.prosemirrorView.focus();
	}
	blur() {
		this.headless || this.domElement?.blur();
	}
	onUploadStart(e) {
		return this.onUploadStartCallbacks.push(e), () => {
			let t = this.onUploadStartCallbacks.indexOf(e);
			t > -1 && this.onUploadStartCallbacks.splice(t, 1);
		};
	}
	onUploadEnd(e) {
		return this.onUploadEndCallbacks.push(e), () => {
			let t = this.onUploadEndCallbacks.indexOf(e);
			t > -1 && this.onUploadEndCallbacks.splice(t, 1);
		};
	}
	get topLevelBlocks() {
		return this.document;
	}
	get document() {
		return this._blockManager.document;
	}
	getBlock(e) {
		return this._blockManager.getBlock(e);
	}
	getPrevBlock(e) {
		return this._blockManager.getPrevBlock(e);
	}
	getNextBlock(e) {
		return this._blockManager.getNextBlock(e);
	}
	getParentBlock(e) {
		return this._blockManager.getParentBlock(e);
	}
	forEachBlock(e, t = !1) {
		this._blockManager.forEachBlock(e, t);
	}
	onEditorContentChange(e) {
		this._tiptapEditor.on("update", e);
	}
	onEditorSelectionChange(e) {
		this._tiptapEditor.on("selectionUpdate", e);
	}
	onBeforeChange(e) {
		return this._extensionManager.getExtension(ve).subscribe(e);
	}
	getTextCursorPosition() {
		return this._selectionManager.getTextCursorPosition();
	}
	setTextCursorPosition(e, t = "start") {
		return this._selectionManager.setTextCursorPosition(e, t);
	}
	getSelection() {
		return this._selectionManager.getSelection();
	}
	getSelectionCutBlocks(e = !1) {
		return this._selectionManager.getSelectionCutBlocks(e);
	}
	setSelection(e, t) {
		return this._selectionManager.setSelection(e, t);
	}
	get isEditable() {
		return this._stateManager.isEditable;
	}
	set isEditable(e) {
		this._stateManager.isEditable = e;
	}
	insertBlocks(e, t, n = "before") {
		return this._blockManager.insertBlocks(e, t, n);
	}
	updateBlock(e, t) {
		return this._blockManager.updateBlock(e, t);
	}
	removeBlocks(e) {
		return this._blockManager.removeBlocks(e);
	}
	replaceBlocks(e, t) {
		return this._blockManager.replaceBlocks(e, t);
	}
	undo() {
		return this._stateManager.undo();
	}
	redo() {
		return this._stateManager.redo();
	}
	insertInlineContent(e, { updateSelection: t = !1 } = {}) {
		this._styleManager.insertInlineContent(e, { updateSelection: t });
	}
	getActiveStyles() {
		return this._styleManager.getActiveStyles();
	}
	addStyles(e) {
		this._styleManager.addStyles(e);
	}
	removeStyles(e) {
		this._styleManager.removeStyles(e);
	}
	toggleStyles(e) {
		this._styleManager.toggleStyles(e);
	}
	getSelectedText() {
		return this._styleManager.getSelectedText();
	}
	getSelectedLinkUrl() {
		return this._styleManager.getSelectedLinkUrl();
	}
	createLink(e, t) {
		this._styleManager.createLink(e, t);
	}
	getLinkMarkAtPos(e) {
		return this._styleManager.getLinkMarkAtPos(e);
	}
	editLink(e, t, n) {
		this._styleManager.editLink(e, t, n);
	}
	deleteLink(e) {
		this._styleManager.deleteLink(e);
	}
	canNestBlock() {
		return this._blockManager.canNestBlock();
	}
	nestBlock() {
		this._blockManager.nestBlock();
	}
	canUnnestBlock() {
		return this._blockManager.canUnnestBlock();
	}
	unnestBlock() {
		this._blockManager.unnestBlock();
	}
	moveBlocksUp(e) {
		return this._blockManager.moveBlocksUp(e);
	}
	moveBlocksDown(e) {
		return this._blockManager.moveBlocksDown(e);
	}
	blocksToHTMLLossy(e = this.document) {
		return this._exportManager.blocksToHTMLLossy(e);
	}
	blocksToFullHTML(e = this.document) {
		return this._exportManager.blocksToFullHTML(e);
	}
	tryParseHTMLToBlocks(e) {
		return this._exportManager.tryParseHTMLToBlocks(e);
	}
	blocksToMarkdownLossy(e = this.document) {
		return this._exportManager.blocksToMarkdownLossy(e);
	}
	tryParseMarkdownToBlocks(e) {
		return this._exportManager.tryParseMarkdownToBlocks(e);
	}
	onChange(e, t) {
		return this._eventManager.onChange(e, t);
	}
	onSelectionChange(e, t) {
		return this._eventManager.onSelectionChange(e, t);
	}
	onMount(e) {
		return this._eventManager.onMount(e);
	}
	onUnmount(e) {
		return this._eventManager.onUnmount(e);
	}
	getSelectionBoundingBox() {
		return this._selectionManager.getSelectionBoundingBox();
	}
	get isEmpty() {
		let e = this.document;
		return e.length === 0 || e.length === 1 && e[0].type === "paragraph" && e[0].content.length === 0;
	}
	pasteHTML(e, t = !1) {
		this._exportManager.pasteHTML(e, t);
	}
	pasteText(e) {
		return this._exportManager.pasteText(e);
	}
	pasteMarkdown(e) {
		return this._exportManager.pasteMarkdown(e);
	}
}, Ni = class {
	mappings;
	options;
	constructor(e, t, n) {
		this.mappings = t, this.options = n;
	}
	async resolveFile(e) {
		if (!this.options?.resolveFileUrl) return (await fetch(e)).blob();
		let t = await this.options.resolveFileUrl(e);
		return t instanceof Blob ? t : (await fetch(t)).blob();
	}
	mapStyles(e) {
		return Object.entries(e).map(([e, t]) => this.mappings.styleMapping[e](t, this));
	}
	mapInlineContent(e) {
		return this.mappings.inlineContentMapping[e.type](e, this);
	}
	transformInlineContent(e) {
		return e.map((e) => this.mapInlineContent(e));
	}
	async mapBlock(e, t, n, r) {
		return this.mappings.blockMapping[e.type](e, this, t, n, r);
	}
};
//#endregion
//#region src/exporter/mapping.ts
function Pi(e) {
	return {
		createBlockMapping: (e) => e,
		createInlineContentMapping: (e) => e,
		createStyleMapping: (e) => e
	};
}
//#endregion
//#region src/util/combineByGroup.ts
function Fi(e, ...t) {
	let n = [...e];
	for (let e of t) for (let t of e) {
		let e = n.findLastIndex((e) => e.group === t.group);
		e === -1 ? n.push(t) : n.splice(e + 1, 0, t);
	}
	return n;
}
//#endregion
export { I as C, dt as D, ft as E, L as S, pt as T, Dt as _, gi as a, Tt as b, Un as c, Jt as d, Yt as f, kt as g, Ot as h, Mi as i, U as l, B as m, Pi as n, vr as o, qt as p, Ni as r, Wn as s, Fi as t, Kt as u, z as v, mt as w, R as x, At as y };

//# sourceMappingURL=src-DTF83Cl9.js.map