//#region node_modules/.pnpm/orderedmap@2.1.1/node_modules/orderedmap/dist/index.js function e(e) { this.content = e; } e.prototype = { constructor: e, find: function(e) { for (var t = 0; t < this.content.length; t += 2) if (this.content[t] === e) return t; return -1; }, get: function(e) { var t = this.find(e); return t == -1 ? void 0 : this.content[t + 1]; }, update: function(t, n, r) { var i = r && r != t ? this.remove(r) : this, a = i.find(t), o = i.content.slice(); return a == -1 ? o.push(r || t, n) : (o[a + 1] = n, r && (o[a] = r)), new e(o); }, remove: function(t) { var n = this.find(t); if (n == -1) return this; var r = this.content.slice(); return r.splice(n, 2), new e(r); }, addToStart: function(t, n) { return new e([t, n].concat(this.remove(t).content)); }, addToEnd: function(t, n) { var r = this.remove(t).content.slice(); return r.push(t, n), new e(r); }, addBefore: function(t, n, r) { var i = this.remove(n), a = i.content.slice(), o = i.find(t); return a.splice(o == -1 ? a.length : o, 0, n, r), new e(a); }, forEach: function(e) { for (var t = 0; t < this.content.length; t += 2) e(this.content[t], this.content[t + 1]); }, prepend: function(t) { return t = e.from(t), t.size ? new e(t.content.concat(this.subtract(t).content)) : this; }, append: function(t) { return t = e.from(t), t.size ? new e(this.subtract(t).content.concat(t.content)) : this; }, subtract: function(t) { var n = this; t = e.from(t); for (var r = 0; r < t.content.length; r += 2) n = n.remove(t.content[r]); return n; }, toObject: function() { var e = {}; return this.forEach(function(t, n) { e[t] = n; }), e; }, get size() { return this.content.length >> 1; } }, e.from = function(t) { if (t instanceof e) return t; var n = []; if (t) for (var r in t) n.push(r, t[r]); return new e(n); }; //#endregion //#region node_modules/.pnpm/prosemirror-model@1.25.8/node_modules/prosemirror-model/dist/index.js function t(e, n, a) { for (let o = 0;; o++) { if (o == e.childCount || o == n.childCount) return e.childCount == n.childCount ? null : a; let s = e.child(o), c = n.child(o); if (s == c) { a += s.nodeSize; continue; } if (!s.sameMarkup(c)) return a; if (s.isText && s.text != c.text) { let e = s.text, t = c.text, n = 0; for (; e[n] == t[n]; n++) a++; return n && n < e.length && n < t.length && i(e.charCodeAt(n - 1)) && r(e.charCodeAt(n)) && a--, a; } if (s.content.size || c.content.size) { let e = t(s.content, c.content, a + 1); if (e != null) return e; } a += s.nodeSize; } } function n(e, t, a, o) { for (let s = e.childCount, c = t.childCount;;) { if (s == 0 || c == 0) return s == c ? null : { a, b: o }; let l = e.child(--s), u = t.child(--c), d = l.nodeSize; if (l == u) { a -= d, o -= d; continue; } if (!l.sameMarkup(u)) return { a, b: o }; if (l.isText && l.text != u.text) { let e = l.text, t = u.text, n = e.length, s = t.length; for (; n > 0 && s > 0 && e[n - 1] == t[s - 1];) n--, s--, a--, o--; return n && s && n < e.length && i(e.charCodeAt(n - 1)) && r(e.charCodeAt(n)) && (a++, o++), { a, b: o }; } if (l.content.size || u.content.size) { let e = n(l.content, u.content, a - 1, o - 1); if (e) return e; } a -= d, o -= d; } } function r(e) { return e >= 56320 && e < 57344; } function i(e) { return e >= 55296 && e < 56320; } var a = class e { constructor(e, t) { if (this.content = e, this.size = t || 0, t == null) for (let t = 0; t < e.length; t++) this.size += e[t].nodeSize; } nodesBetween(e, t, n, r = 0, i) { for (let a = 0, o = 0; o < t; a++) { let s = this.content[a], c = o + s.nodeSize; if (c > e && n(s, r + o, i || null, a) !== !1 && s.content.size) { let i = o + 1; s.nodesBetween(Math.max(0, e - i), Math.min(s.content.size, t - i), n, r + i); } o = c; } } descendants(e) { this.nodesBetween(0, this.size, e); } textBetween(e, t, n, r) { let i = "", a = !0; return this.nodesBetween(e, t, (o, s) => { let c = o.isText ? o.text.slice(Math.max(e, s) - s, t - s) : o.isLeaf ? r ? typeof r == "function" ? r(o) : r : o.type.spec.leafText ? o.type.spec.leafText(o) : "" : ""; o.isBlock && (o.isLeaf && c || o.isTextblock) && n && (a ? a = !1 : i += n), i += c; }, 0), i; } append(t) { if (!t.size) return this; if (!this.size) return t; let n = this.lastChild, r = t.firstChild, i = this.content.slice(), a = 0; for (n.isText && n.sameMarkup(r) && (i[i.length - 1] = n.withText(n.text + r.text), a = 1); a < t.content.length; a++) i.push(t.content[a]); return new e(i, this.size + t.size); } cut(t, n = this.size) { if (t == 0 && n == this.size) return this; let r = [], i = 0; if (n > t) for (let e = 0, a = 0; a < n; e++) { let o = this.content[e], s = a + o.nodeSize; s > t && ((a < t || s > n) && (o = o.isText ? o.cut(Math.max(0, t - a), Math.min(o.text.length, n - a)) : o.cut(Math.max(0, t - a - 1), Math.min(o.content.size, n - a - 1))), r.push(o), i += o.nodeSize), a = s; } return new e(r, i); } cutByIndex(t, n) { return t == n ? e.empty : t == 0 && n == this.content.length ? this : new e(this.content.slice(t, n)); } replaceChild(t, n) { let r = this.content[t]; if (r == n) return this; let i = this.content.slice(), a = this.size + n.nodeSize - r.nodeSize; return i[t] = n, new e(i, a); } addToStart(t) { return new e([t].concat(this.content), this.size + t.nodeSize); } addToEnd(t) { return new e(this.content.concat(t), this.size + t.nodeSize); } eq(e) { if (this.content.length != e.content.length) return !1; for (let t = 0; t < this.content.length; t++) if (!this.content[t].eq(e.content[t])) return !1; return !0; } get firstChild() { return this.content.length ? this.content[0] : null; } get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; } get childCount() { return this.content.length; } child(e) { let t = this.content[e]; if (!t) throw RangeError("Index " + e + " out of range for " + this); return t; } maybeChild(e) { return this.content[e] || null; } forEach(e) { for (let t = 0, n = 0; t < this.content.length; t++) { let r = this.content[t]; e(r, n, t), n += r.nodeSize; } } findDiffStart(e, n = 0) { return t(this, e, n); } findDiffEnd(e, t = this.size, r = e.size) { return n(this, e, t, r); } findIndex(e) { if (e == 0) return s(0, e); if (e == this.size) return s(this.content.length, e); if (e > this.size || e < 0) throw RangeError(`Position ${e} outside of fragment (${this})`); for (let t = 0, n = 0;; t++) { let r = this.child(t), i = n + r.nodeSize; if (i >= e) return i == e ? s(t + 1, i) : s(t, n); n = i; } } toString() { return "<" + this.toStringInner() + ">"; } toStringInner() { return this.content.join(", "); } toJSON() { return this.content.length ? this.content.map((e) => e.toJSON()) : null; } static fromJSON(t, n) { if (!n) return e.empty; if (!Array.isArray(n)) throw RangeError("Invalid input for Fragment.fromJSON"); return e.fromArray(n.map(t.nodeFromJSON)); } static fromArray(t) { if (!t.length) return e.empty; let n, r = 0; for (let e = 0; e < t.length; e++) { let i = t[e]; r += i.nodeSize, e && i.isText && t[e - 1].sameMarkup(i) ? (n ||= t.slice(0, e), n[n.length - 1] = i.withText(n[n.length - 1].text + i.text)) : n && n.push(i); } return new e(n || t, r); } static from(t) { if (!t) return e.empty; if (t instanceof e) return t; if (Array.isArray(t)) return this.fromArray(t); if (t.attrs) return new e([t], t.nodeSize); throw RangeError("Can not convert " + t + " to a Fragment" + (t.nodesBetween ? " (looks like multiple versions of prosemirror-model were loaded)" : "")); } }; a.empty = new a([], 0); var o = { index: 0, offset: 0 }; function s(e, t) { return o.index = e, o.offset = t, o; } function c(e, t) { if (e === t) return !0; if (!(e && typeof e == "object") || !(t && typeof t == "object")) return !1; let n = Array.isArray(e); if (Array.isArray(t) != n) return !1; if (n) { if (e.length != t.length) return !1; for (let n = 0; n < e.length; n++) if (!c(e[n], t[n])) return !1; } else { for (let n in e) if (!(n in t) || !c(e[n], t[n])) return !1; for (let n in t) if (!(n in e)) return !1; } return !0; } var l = class e { constructor(e, t) { this.type = e, this.attrs = t; } addToSet(e) { let t, n = !1; for (let r = 0; r < e.length; r++) { let i = e[r]; if (this.eq(i)) return e; if (this.type.excludes(i.type)) t ||= e.slice(0, r); else if (i.type.excludes(this.type)) return e; else !n && i.type.rank > this.type.rank && (t ||= e.slice(0, r), t.push(this), n = !0), t && t.push(i); } return t ||= e.slice(), n || t.push(this), t; } removeFromSet(e) { for (let t = 0; t < e.length; t++) if (this.eq(e[t])) return e.slice(0, t).concat(e.slice(t + 1)); return e; } isInSet(e) { for (let t = 0; t < e.length; t++) if (this.eq(e[t])) return !0; return !1; } eq(e) { return this == e || this.type == e.type && c(this.attrs, e.attrs); } toJSON() { let e = { type: this.type.name }; for (let t in this.attrs) { e.attrs = this.attrs; break; } return e; } static fromJSON(e, t) { if (!t) throw RangeError("Invalid input for Mark.fromJSON"); let n = e.marks[t.type]; if (!n) throw RangeError(`There is no mark type ${t.type} in this schema`); let r = n.create(t.attrs); return n.checkAttrs(r.attrs), r; } static sameSet(e, t) { if (e == t) return !0; if (e.length != t.length) return !1; for (let n = 0; n < e.length; n++) if (!e[n].eq(t[n])) return !1; return !0; } static setFrom(t) { if (!t || Array.isArray(t) && t.length == 0) return e.none; if (t instanceof e) return [t]; let n = t.slice(); return n.sort((e, t) => e.type.rank - t.type.rank), n; } }; l.none = []; var u = class extends Error {}, d = class e { constructor(e, t, n) { this.content = e, this.openStart = t, this.openEnd = n; } get size() { return this.content.size - this.openStart - this.openEnd; } insertAt(t, n) { let r = p(this.content, t + this.openStart, n, this.openStart + 1, this.openEnd + 1); return r && new e(r, this.openStart, this.openEnd); } removeBetween(t, n) { return new e(f(this.content, t + this.openStart, n + this.openStart), this.openStart, this.openEnd); } eq(e) { return this.content.eq(e.content) && this.openStart == e.openStart && this.openEnd == e.openEnd; } toString() { return this.content + "(" + this.openStart + "," + this.openEnd + ")"; } toJSON() { if (!this.content.size) return null; let e = { content: this.content.toJSON() }; return this.openStart > 0 && (e.openStart = this.openStart), this.openEnd > 0 && (e.openEnd = this.openEnd), e; } static fromJSON(t, n) { if (!n) return e.empty; let r = n.openStart || 0, i = n.openEnd || 0; if (typeof r != "number" || typeof i != "number") throw RangeError("Invalid input for Slice.fromJSON"); return new e(a.fromJSON(t, n.content), r, i); } static maxOpen(t, n = !0) { let r = 0, i = 0; for (let e = t.firstChild; e && !e.isLeaf && (n || !e.type.spec.isolating); e = e.firstChild) r++; for (let e = t.lastChild; e && !e.isLeaf && (n || !e.type.spec.isolating); e = e.lastChild) i++; return new e(t, r, i); } }; d.empty = new d(a.empty, 0, 0); function f(e, t, n) { let { index: r, offset: i } = e.findIndex(t), a = e.maybeChild(r), { index: o, offset: s } = e.findIndex(n); if (i == t || a.isText) { if (s != n && !e.child(o).isText) throw RangeError("Removing non-flat range"); return e.cut(0, t).append(e.cut(n)); } if (r != o) throw RangeError("Removing non-flat range"); return e.replaceChild(r, a.copy(f(a.content, t - i - 1, n - i - 1))); } function p(e, t, n, r, i, a) { let { index: o, offset: s } = e.findIndex(t), c = e.maybeChild(o); if (s == t || c.isText) return a && r <= 0 && i <= 0 && !a.canReplace(o, o, n) ? null : e.cut(0, t).append(n).append(e.cut(t)); let l = p(c.content, t - s - 1, n, o == 0 ? r - 1 : 0, o == e.childCount - 1 ? i - 1 : 0, c); return l && e.replaceChild(o, c.copy(l)); } function m(e, t, n) { if (n.openStart > e.depth) throw new u("Inserted content deeper than insertion position"); if (e.depth - n.openStart != t.depth - n.openEnd) throw new u("Inconsistent open depths"); return h(e, t, n, 0); } function h(e, t, n, r) { let i = e.index(r), a = e.node(r); if (i == t.index(r) && r < e.depth - n.openStart) { let o = h(e, t, n, r + 1); return a.copy(a.content.replaceChild(i, o)); } else if (!n.content.size) return y(a, ne(e, t, r)); else if (!n.openStart && !n.openEnd && e.depth == r && t.depth == r) { let r = e.parent, i = r.content; return y(r, i.cut(0, e.parentOffset).append(n.content).append(i.cut(t.parentOffset))); } else { let { start: i, end: o } = re(n, e); return y(a, te(e, i, o, t, r)); } } function g(e, t) { if (!t.type.compatibleContent(e.type)) throw new u("Cannot join " + t.type.name + " onto " + e.type.name); } function _(e, t, n) { let r = e.node(n); return g(r, t.node(n)), r; } function ee(e, t) { let n = t.length - 1; n >= 0 && e.isText && e.sameMarkup(t[n]) ? t[n] = e.withText(t[n].text + e.text) : t.push(e); } function v(e, t, n, r) { let i = (t || e).node(n), a = 0, o = t ? t.index(n) : i.childCount; e && (a = e.index(n), e.depth > n ? a++ : e.textOffset && (ee(e.nodeAfter, r), a++)); for (let e = a; e < o; e++) ee(i.child(e), r); t && t.depth == n && t.textOffset && ee(t.nodeBefore, r); } function y(e, t) { return e.type.checkContent(t), e.copy(t); } function te(e, t, n, r, i) { let o = e.depth > i && _(e, t, i + 1), s = r.depth > i && _(n, r, i + 1), c = []; return v(null, e, i, c), o && s && t.index(i) == n.index(i) ? (g(o, s), ee(y(o, te(e, t, n, r, i + 1)), c)) : (o && ee(y(o, ne(e, t, i + 1)), c), v(t, n, i, c), s && ee(y(s, ne(n, r, i + 1)), c)), v(r, null, i, c), new a(c); } function ne(e, t, n) { let r = []; return v(null, e, n, r), e.depth > n && ee(y(_(e, t, n + 1), ne(e, t, n + 1)), r), v(t, null, n, r), new a(r); } function re(e, t) { let n = t.depth - e.openStart, r = t.node(n).copy(e.content); for (let e = n - 1; e >= 0; e--) r = t.node(e).copy(a.from(r)); return { start: r.resolveNoCache(e.openStart + n), end: r.resolveNoCache(r.content.size - e.openEnd - n) }; } var ie = class e { constructor(e, t, n) { this.pos = e, this.path = t, this.parentOffset = n, this.depth = t.length / 3 - 1; } resolveDepth(e) { return e == null ? this.depth : e < 0 ? this.depth + e : e; } get parent() { return this.node(this.depth); } get doc() { return this.node(0); } node(e) { return this.path[this.resolveDepth(e) * 3]; } index(e) { return this.path[this.resolveDepth(e) * 3 + 1]; } indexAfter(e) { return e = this.resolveDepth(e), this.index(e) + (e == this.depth && !this.textOffset ? 0 : 1); } start(e) { return e = this.resolveDepth(e), e == 0 ? 0 : this.path[e * 3 - 1] + 1; } end(e) { return e = this.resolveDepth(e), this.start(e) + this.node(e).content.size; } before(e) { if (e = this.resolveDepth(e), !e) throw RangeError("There is no position before the top-level node"); return e == this.depth + 1 ? this.pos : this.path[e * 3 - 1]; } after(e) { if (e = this.resolveDepth(e), !e) throw RangeError("There is no position after the top-level node"); return e == this.depth + 1 ? this.pos : this.path[e * 3 - 1] + this.path[e * 3].nodeSize; } get textOffset() { return this.pos - this.path[this.path.length - 1]; } get nodeAfter() { let e = this.parent, t = this.index(this.depth); if (t == e.childCount) return null; let n = this.pos - this.path[this.path.length - 1], r = e.child(t); return n ? e.child(t).cut(n) : r; } get nodeBefore() { let e = this.index(this.depth), t = this.pos - this.path[this.path.length - 1]; return t ? this.parent.child(e).cut(0, t) : e == 0 ? null : this.parent.child(e - 1); } posAtIndex(e, t) { t = this.resolveDepth(t); let n = this.path[t * 3], r = t == 0 ? 0 : this.path[t * 3 - 1] + 1; for (let t = 0; t < e; t++) r += n.child(t).nodeSize; return r; } marks() { let e = this.parent, t = this.index(); if (e.content.size == 0) return l.none; if (this.textOffset) return e.child(t).marks; let n = e.maybeChild(t - 1), r = e.maybeChild(t); if (!n) { let e = n; n = r, r = e; } let i = n.marks; for (var a = 0; a < i.length; a++) i[a].type.spec.inclusive === !1 && (!r || !i[a].isInSet(r.marks)) && (i = i[a--].removeFromSet(i)); return i; } marksAcross(e) { let t = this.parent.maybeChild(this.index()); if (!t || !t.isInline) return null; let n = t.marks, r = e.parent.maybeChild(e.index()); for (var i = 0; i < n.length; i++) n[i].type.spec.inclusive === !1 && (!r || !n[i].isInSet(r.marks)) && (n = n[i--].removeFromSet(n)); return n; } sharedDepth(e) { for (let t = this.depth; t > 0; t--) if (this.start(t) <= e && this.end(t) >= e) return t; return 0; } blockRange(e = this, t) { if (e.pos < this.pos) return e.blockRange(this); for (let n = this.depth - (this.parent.inlineContent || this.pos == e.pos ? 1 : 0); n >= 0; n--) if (e.pos <= this.end(n) && (!t || t(this.node(n)))) return new ce(this, e, n); return null; } sameParent(e) { return this.pos - this.parentOffset == e.pos - e.parentOffset; } max(e) { return e.pos > this.pos ? e : this; } min(e) { return e.pos < this.pos ? e : this; } toString() { let e = ""; for (let t = 1; t <= this.depth; t++) e += (e ? "/" : "") + this.node(t).type.name + "_" + this.index(t - 1); return e + ":" + this.parentOffset; } static resolve(t, n) { if (!(n >= 0 && n <= t.content.size)) throw RangeError("Position " + n + " out of range"); let r = [], i = 0, a = n; for (let e = t;;) { let { index: t, offset: n } = e.content.findIndex(a), o = a - n; if (r.push(e, t, i + n), !o || (e = e.child(t), e.isText)) break; a = o - 1, i += n + 1; } return new e(n, r, a); } static resolveCached(t, n) { let r = se.get(t); if (r) for (let e = 0; e < r.elts.length; e++) { let t = r.elts[e]; if (t.pos == n) return t; } else se.set(t, r = new ae()); let i = r.elts[r.i] = e.resolve(t, n); return r.i = (r.i + 1) % oe, i; } }, ae = class { constructor() { this.elts = [], this.i = 0; } }, oe = 12, se = /* @__PURE__ */ new WeakMap(), ce = class { constructor(e, t, n) { this.$from = e, this.$to = t, this.depth = n; } get start() { return this.$from.before(this.depth + 1); } get end() { return this.$to.after(this.depth + 1); } get parent() { return this.$from.node(this.depth); } get startIndex() { return this.$from.index(this.depth); } get endIndex() { return this.$to.indexAfter(this.depth); } }, le = Object.create(null), ue = class e { constructor(e, t, n, r = l.none) { this.type = e, this.attrs = t, this.marks = r, this.content = n || a.empty; } get children() { return this.content.content; } get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; } get childCount() { return this.content.childCount; } child(e) { return this.content.child(e); } maybeChild(e) { return this.content.maybeChild(e); } forEach(e) { this.content.forEach(e); } nodesBetween(e, t, n, r = 0) { this.content.nodesBetween(e, t, n, r, this); } descendants(e) { this.nodesBetween(0, this.content.size, e); } get textContent() { return this.isLeaf && this.type.spec.leafText ? this.type.spec.leafText(this) : this.textBetween(0, this.content.size, ""); } textBetween(e, t, n, r) { return this.content.textBetween(e, t, n, r); } get firstChild() { return this.content.firstChild; } get lastChild() { return this.content.lastChild; } eq(e) { return this == e || this.sameMarkup(e) && this.content.eq(e.content); } sameMarkup(e) { return this.hasMarkup(e.type, e.attrs, e.marks); } hasMarkup(e, t, n) { return this.type == e && c(this.attrs, t || e.defaultAttrs || le) && l.sameSet(this.marks, n || l.none); } copy(t = null) { return t == this.content ? this : new e(this.type, this.attrs, t, this.marks); } mark(t) { return t == this.marks ? this : new e(this.type, this.attrs, this.content, t); } cut(e, t = this.content.size) { return e == 0 && t == this.content.size ? this : this.copy(this.content.cut(e, t)); } slice(e, t = this.content.size, n = !1) { if (e == t) return d.empty; let r = this.resolve(e), i = this.resolve(t), a = n ? 0 : r.sharedDepth(t), o = r.start(a); return new d(r.node(a).content.cut(r.pos - o, i.pos - o), r.depth - a, i.depth - a); } replace(e, t, n) { return m(this.resolve(e), this.resolve(t), n); } nodeAt(e) { for (let t = this;;) { let { index: n, offset: r } = t.content.findIndex(e); if (t = t.maybeChild(n), !t) return null; if (r == e || t.isText) return t; e -= r + 1; } } childAfter(e) { let { index: t, offset: n } = this.content.findIndex(e); return { node: this.content.maybeChild(t), index: t, offset: n }; } childBefore(e) { if (e == 0) return { node: null, index: 0, offset: 0 }; let { index: t, offset: n } = this.content.findIndex(e); if (n < e) return { node: this.content.child(t), index: t, offset: n }; let r = this.content.child(t - 1); return { node: r, index: t - 1, offset: n - r.nodeSize }; } resolve(e) { return ie.resolveCached(this, e); } resolveNoCache(e) { return ie.resolve(this, e); } rangeHasMark(e, t, n) { let r = !1; return t > e && this.nodesBetween(e, t, (e) => (n.isInSet(e.marks) && (r = !0), !r)), r; } get isBlock() { return this.type.isBlock; } get isTextblock() { return this.type.isTextblock; } get inlineContent() { return this.type.inlineContent; } get isInline() { return this.type.isInline; } get isText() { return this.type.isText; } get isLeaf() { return this.type.isLeaf; } get isAtom() { return this.type.isAtom; } toString() { if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this); let e = this.type.name; return this.content.size && (e += "(" + this.content.toStringInner() + ")"), fe(this.marks, e); } contentMatchAt(e) { let t = this.type.contentMatch.matchFragment(this.content, 0, e); if (!t) throw Error("Called contentMatchAt on a node with invalid content"); return t; } canReplace(e, t, n = a.empty, r = 0, i = n.childCount) { let o = this.contentMatchAt(e).matchFragment(n, r, i), s = o && o.matchFragment(this.content, t); if (!s || !s.validEnd) return !1; for (let e = r; e < i; e++) if (!this.type.allowsMarks(n.child(e).marks)) return !1; return !0; } canReplaceWith(e, t, n, r) { if (r && !this.type.allowsMarks(r)) return !1; let i = this.contentMatchAt(e).matchType(n), a = i && i.matchFragment(this.content, t); return a ? a.validEnd : !1; } canAppend(e) { return e.content.size ? this.canReplace(this.childCount, this.childCount, e.content) : this.type.compatibleContent(e.type); } check() { this.type.checkContent(this.content), this.type.checkAttrs(this.attrs); let e = l.none; for (let t = 0; t < this.marks.length; t++) { let n = this.marks[t]; n.type.checkAttrs(n.attrs), e = n.addToSet(e); } if (!l.sameSet(e, this.marks)) throw RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map((e) => e.type.name)}`); this.content.forEach((e) => e.check()); } toJSON() { let e = { type: this.type.name }; for (let t in this.attrs) { e.attrs = this.attrs; break; } return this.content.size && (e.content = this.content.toJSON()), this.marks.length && (e.marks = this.marks.map((e) => e.toJSON())), e; } static fromJSON(e, t) { if (!t) throw RangeError("Invalid input for Node.fromJSON"); let n; if (t.marks) { if (!Array.isArray(t.marks)) throw RangeError("Invalid mark data for Node.fromJSON"); n = t.marks.map(e.markFromJSON); } if (t.type == "text") { if (typeof t.text != "string") throw RangeError("Invalid text node in JSON"); return e.text(t.text, n); } let r = a.fromJSON(e, t.content), i = e.nodeType(t.type).create(t.attrs, r, n); return i.type.checkAttrs(i.attrs), i; } }; ue.prototype.text = void 0; var de = class e extends ue { constructor(e, t, n, r) { if (super(e, t, null, r), !n) throw RangeError("Empty text nodes are not allowed"); this.text = n; } toString() { return this.type.spec.toDebugString ? this.type.spec.toDebugString(this) : fe(this.marks, JSON.stringify(this.text)); } get textContent() { return this.text; } textBetween(e, t) { return this.text.slice(e, t); } get nodeSize() { return this.text.length; } mark(t) { return t == this.marks ? this : new e(this.type, this.attrs, this.text, t); } withText(t) { return t == this.text ? this : new e(this.type, this.attrs, t, this.marks); } cut(e = 0, t = this.text.length) { return e == 0 && t == this.text.length ? this : this.withText(this.text.slice(e, t)); } eq(e) { return this.sameMarkup(e) && this.text == e.text; } toJSON() { let e = super.toJSON(); return e.text = this.text, e; } }; function fe(e, t) { for (let n = e.length - 1; n >= 0; n--) t = e[n].type.name + "(" + t + ")"; return t; } var pe = class e { constructor(e) { this.validEnd = e, this.next = [], this.wrapCache = []; } static parse(t, n) { let r = new me(t, n); if (r.next == null) return e.empty; let i = he(r); r.next && r.err("Unexpected trailing text"); let a = Te(Se(i)); return Ee(a, r), a; } matchType(e) { for (let t = 0; t < this.next.length; t++) if (this.next[t].type == e) return this.next[t].next; return null; } matchFragment(e, t = 0, n = e.childCount) { let r = this; for (let i = t; r && i < n; i++) r = r.matchType(e.child(i).type); return r; } get inlineContent() { return this.next.length != 0 && this.next[0].type.isInline; } get defaultType() { for (let e = 0; e < this.next.length; e++) { let { type: t } = this.next[e]; if (!(t.isText || t.hasRequiredAttrs())) return t; } return null; } compatible(e) { for (let t = 0; t < this.next.length; t++) for (let n = 0; n < e.next.length; n++) if (this.next[t].type == e.next[n].type) return !0; return !1; } fillBefore(e, t = !1, n = 0) { let r = [this]; function i(o, s) { let c = o.matchFragment(e, n); if (c && (!t || c.validEnd)) return a.from(s.map((e) => e.createAndFill())); for (let e = 0; e < o.next.length; e++) { let { type: t, next: n } = o.next[e]; if (!(t.isText || t.hasRequiredAttrs()) && r.indexOf(n) == -1) { r.push(n); let e = i(n, s.concat(t)); if (e) return e; } } return null; } return i(this, []); } findWrapping(e) { for (let t = 0; t < this.wrapCache.length; t += 2) if (this.wrapCache[t] == e) return this.wrapCache[t + 1]; let t = this.computeWrapping(e); return this.wrapCache.push(e, t), t; } computeWrapping(e) { let t = Object.create(null), n = [{ match: this, type: null, via: null }]; for (; n.length;) { let r = n.shift(), i = r.match; if (i.matchType(e)) { let e = []; for (let t = r; t.type; t = t.via) e.push(t.type); return e.reverse(); } for (let e = 0; e < i.next.length; e++) { let { type: a, next: o } = i.next[e]; !a.isLeaf && !a.hasRequiredAttrs() && !(a.name in t) && (!r.type || o.validEnd) && (n.push({ match: a.contentMatch, type: a, via: r }), t[a.name] = !0); } } return null; } get edgeCount() { return this.next.length; } edge(e) { if (e >= this.next.length) throw RangeError(`There's no ${e}th edge in this content match`); return this.next[e]; } toString() { let e = []; function t(n) { e.push(n); for (let r = 0; r < n.next.length; r++) e.indexOf(n.next[r].next) == -1 && t(n.next[r].next); } return t(this), e.map((t, n) => { let r = n + (t.validEnd ? "*" : " ") + " "; for (let n = 0; n < t.next.length; n++) r += (n ? ", " : "") + t.next[n].type.name + "->" + e.indexOf(t.next[n].next); return r; }).join("\n"); } }; pe.empty = new pe(!0); var me = class { constructor(e, t) { this.string = e, this.nodeTypes = t, this.inline = null, this.pos = 0, this.tokens = e.split(/\s*(?=\b|\W|$)/), this.tokens[this.tokens.length - 1] == "" && this.tokens.pop(), this.tokens[0] == "" && this.tokens.shift(); } get next() { return this.tokens[this.pos]; } eat(e) { return this.next == e && (this.pos++ || !0); } err(e) { throw SyntaxError(e + " (in content expression '" + this.string + "')"); } }; function he(e) { let t = []; do t.push(ge(e)); while (e.eat("|")); return t.length == 1 ? t[0] : { type: "choice", exprs: t }; } function ge(e) { let t = []; do t.push(_e(e)); while (e.next && e.next != ")" && e.next != "|"); return t.length == 1 ? t[0] : { type: "seq", exprs: t }; } function _e(e) { let t = xe(e); for (;;) if (e.eat("+")) t = { type: "plus", expr: t }; else if (e.eat("*")) t = { type: "star", expr: t }; else if (e.eat("?")) t = { type: "opt", expr: t }; else if (e.eat("{")) t = ye(e, t); else break; return t; } function ve(e) { /\D/.test(e.next) && e.err("Expected number, got '" + e.next + "'"); let t = Number(e.next); return e.pos++, t; } function ye(e, t) { let n = ve(e), r = n; return e.eat(",") && (r = e.next == "}" ? -1 : ve(e)), e.eat("}") || e.err("Unclosed braced range"), { type: "range", min: n, max: r, expr: t }; } function be(e, t) { let n = e.nodeTypes, r = n[t]; if (r) return [r]; let i = []; for (let e in n) { let r = n[e]; r.isInGroup(t) && i.push(r); } return i.length == 0 && e.err("No node type or group '" + t + "' found"), i; } function xe(e) { if (e.eat("(")) { let t = he(e); return e.eat(")") || e.err("Missing closing paren"), t; } else if (/\W/.test(e.next)) e.err("Unexpected token '" + e.next + "'"); else { let t = be(e, e.next).map((t) => (e.inline == null ? e.inline = t.isInline : e.inline != t.isInline && e.err("Mixing inline and block content"), { type: "name", value: t })); return e.pos++, t.length == 1 ? t[0] : { type: "choice", exprs: t }; } } function Se(e) { let t = [[]]; return i(a(e, 0), n()), t; function n() { return t.push([]) - 1; } function r(e, n, r) { let i = { term: r, to: n }; return t[e].push(i), i; } function i(e, t) { e.forEach((e) => e.to = t); } function a(e, t) { if (e.type == "choice") return e.exprs.reduce((e, n) => e.concat(a(n, t)), []); if (e.type == "seq") for (let r = 0;; r++) { let o = a(e.exprs[r], t); if (r == e.exprs.length - 1) return o; i(o, t = n()); } else if (e.type == "star") { let o = n(); return r(t, o), i(a(e.expr, o), o), [r(o)]; } else if (e.type == "plus") { let o = n(); return i(a(e.expr, t), o), i(a(e.expr, o), o), [r(o)]; } else if (e.type == "opt") return [r(t)].concat(a(e.expr, t)); else if (e.type == "range") { let o = t; for (let t = 0; t < e.min; t++) { let t = n(); i(a(e.expr, o), t), o = t; } if (e.max == -1) i(a(e.expr, o), o); else for (let t = e.min; t < e.max; t++) { let t = n(); r(o, t), i(a(e.expr, o), t), o = t; } return [r(o)]; } else if (e.type == "name") return [r(t, void 0, e.value)]; else throw Error("Unknown expr type"); } } function Ce(e, t) { return t - e; } function we(e, t) { let n = []; return r(t), n.sort(Ce); function r(t) { let i = e[t]; if (i.length == 1 && !i[0].term) return r(i[0].to); n.push(t); for (let e = 0; e < i.length; e++) { let { term: t, to: a } = i[e]; !t && n.indexOf(a) == -1 && r(a); } } } function Te(e) { let t = Object.create(null); return n(we(e, 0)); function n(r) { let i = []; r.forEach((t) => { e[t].forEach(({ term: t, to: n }) => { if (!t) return; let r; for (let e = 0; e < i.length; e++) i[e][0] == t && (r = i[e][1]); we(e, n).forEach((e) => { r || i.push([t, r = []]), r.indexOf(e) == -1 && r.push(e); }); }); }); let a = t[r.join(",")] = new pe(r.indexOf(e.length - 1) > -1); for (let e = 0; e < i.length; e++) { let r = i[e][1].sort(Ce); a.next.push({ type: i[e][0], next: t[r.join(",")] || n(r) }); } return a; } } function Ee(e, t) { for (let n = 0, r = [e]; n < r.length; n++) { let e = r[n], i = !e.validEnd, a = []; for (let t = 0; t < e.next.length; t++) { let { type: n, next: o } = e.next[t]; a.push(n.name), i && !(n.isText || n.hasRequiredAttrs()) && (i = !1), r.indexOf(o) == -1 && r.push(o); } i && t.err("Only non-generatable nodes (" + a.join(", ") + ") in a required position (see https://prosemirror.net/docs/guide/#generatable)"); } } function De(e) { let t = Object.create(null); for (let n in e) { let r = e[n]; if (!r.hasDefault) return null; t[n] = r.default; } return t; } function Oe(e, t) { let n = Object.create(null); for (let r in e) { let i = t && t[r]; if (i === void 0) { let t = e[r]; if (t.hasDefault) i = t.default; else throw RangeError("No value supplied for attribute " + r); } n[r] = i; } return n; } function ke(e, t, n, r) { for (let i in t) if (!(i in e)) throw RangeError(`Unsupported attribute ${i} for ${n} of type ${r}`); for (let n in e) e[n].validate && e[n].validate(t[n]); } function Ae(e, t) { let n = Object.create(null); if (t) for (let r in t) n[r] = new Ne(e, r, t[r]); return n; } var je = class e { constructor(e, t, n) { this.name = e, this.schema = t, this.spec = n, this.markSet = null, this.groups = n.group ? n.group.split(" ") : [], this.attrs = Ae(e, n.attrs), this.defaultAttrs = De(this.attrs), this.contentMatch = null, this.inlineContent = null, this.isBlock = !(n.inline || e == "text"), this.isText = e == "text"; } get isInline() { return !this.isBlock; } get isTextblock() { return this.isBlock && this.inlineContent; } get isLeaf() { return this.contentMatch == pe.empty; } get isAtom() { return this.isLeaf || !!this.spec.atom; } isInGroup(e) { return this.groups.indexOf(e) > -1; } get whitespace() { return this.spec.whitespace || (this.spec.code ? "pre" : "normal"); } hasRequiredAttrs() { for (let e in this.attrs) if (this.attrs[e].isRequired) return !0; return !1; } compatibleContent(e) { return this == e || this.contentMatch.compatible(e.contentMatch); } computeAttrs(e) { return !e && this.defaultAttrs ? this.defaultAttrs : Oe(this.attrs, e); } create(e = null, t, n) { if (this.isText) throw Error("NodeType.create can't construct text nodes"); return new ue(this, this.computeAttrs(e), a.from(t), l.setFrom(n)); } createChecked(e = null, t, n) { return t = a.from(t), this.checkContent(t), new ue(this, this.computeAttrs(e), t, l.setFrom(n)); } createAndFill(e = null, t, n) { if (e = this.computeAttrs(e), t = a.from(t), t.size) { let e = this.contentMatch.fillBefore(t); if (!e) return null; t = e.append(t); } let r = this.contentMatch.matchFragment(t), i = r && r.fillBefore(a.empty, !0); return i ? new ue(this, e, t.append(i), l.setFrom(n)) : null; } validContent(e) { let t = this.contentMatch.matchFragment(e); if (!t || !t.validEnd) return !1; for (let t = 0; t < e.childCount; t++) if (!this.allowsMarks(e.child(t).marks)) return !1; return !0; } checkContent(e) { if (!this.validContent(e)) throw RangeError(`Invalid content for node ${this.name}: ${e.toString().slice(0, 50)}`); } checkAttrs(e) { ke(this.attrs, e, "node", this.name); } allowsMarkType(e) { return this.markSet == null || this.markSet.indexOf(e) > -1; } allowsMarks(e) { if (this.markSet == null) return !0; for (let t = 0; t < e.length; t++) if (!this.allowsMarkType(e[t].type)) return !1; return !0; } allowedMarks(e) { if (this.markSet == null) return e; let t; for (let n = 0; n < e.length; n++) this.allowsMarkType(e[n].type) ? t && t.push(e[n]) : t ||= e.slice(0, n); return t ? t.length ? t : l.none : e; } static compile(t, n) { let r = Object.create(null); t.forEach((t, i) => r[t] = new e(t, n, i)); let i = n.spec.topNode || "doc"; if (!r[i]) throw RangeError("Schema is missing its top node type ('" + i + "')"); if (!r.text) throw RangeError("Every schema needs a 'text' type"); for (let e in r.text.attrs) throw RangeError("The text node type should not have attributes"); return r; } }; function Me(e, t, n) { let r = n.split("|"); return (n) => { let i = n === null ? "null" : typeof n; if (r.indexOf(i) < 0) throw RangeError(`Expected value of type ${r} for attribute ${t} on type ${e}, got ${i}`); }; } var Ne = class { constructor(e, t, n) { this.hasDefault = Object.prototype.hasOwnProperty.call(n, "default"), this.default = n.default, this.validate = typeof n.validate == "string" ? Me(e, t, n.validate) : n.validate; } get isRequired() { return !this.hasDefault; } }, Pe = class e { constructor(e, t, n, r) { this.name = e, this.rank = t, this.schema = n, this.spec = r, this.attrs = Ae(e, r.attrs), this.excluded = null; let i = De(this.attrs); this.instance = i ? new l(this, i) : null; } create(e = null) { return !e && this.instance ? this.instance : new l(this, Oe(this.attrs, e)); } static compile(t, n) { let r = Object.create(null), i = 0; return t.forEach((t, a) => r[t] = new e(t, i++, n, a)), r; } removeFromSet(e) { for (var t = 0; t < e.length; t++) e[t].type == this && (e = e.slice(0, t).concat(e.slice(t + 1)), t--); return e; } isInSet(e) { for (let t = 0; t < e.length; t++) if (e[t].type == this) return e[t]; } checkAttrs(e) { ke(this.attrs, e, "mark", this.name); } excludes(e) { return this.excluded.indexOf(e) > -1; } }, Fe = class { constructor(t) { this.linebreakReplacement = null, this.cached = Object.create(null); let n = this.spec = {}; for (let e in t) n[e] = t[e]; n.nodes = e.from(t.nodes), n.marks = e.from(t.marks || {}), this.nodes = je.compile(this.spec.nodes, this), this.marks = Pe.compile(this.spec.marks, this); let r = Object.create(null); for (let e in this.nodes) { if (e in this.marks) throw RangeError(e + " can not be both a node and a mark"); let t = this.nodes[e], n = t.spec.content || "", i = t.spec.marks; if (t.contentMatch = r[n] || (r[n] = pe.parse(n, this.nodes)), t.inlineContent = t.contentMatch.inlineContent, t.spec.linebreakReplacement) { if (this.linebreakReplacement) throw RangeError("Multiple linebreak nodes defined"); if (!t.isInline || !t.isLeaf) throw RangeError("Linebreak replacement nodes must be inline leaf nodes"); this.linebreakReplacement = t; } t.markSet = i == "_" ? null : i ? Ie(this, i.split(" ")) : i == "" || !t.inlineContent ? [] : null; } for (let e in this.marks) { let t = this.marks[e], n = t.spec.excludes; t.excluded = n == null ? [t] : n == "" ? [] : Ie(this, n.split(" ")); } this.nodeFromJSON = (e) => ue.fromJSON(this, e), this.markFromJSON = (e) => l.fromJSON(this, e), this.topNodeType = this.nodes[this.spec.topNode || "doc"], this.cached.wrappings = Object.create(null); } node(e, t = null, n, r) { if (typeof e == "string") e = this.nodeType(e); else if (!(e instanceof je)) throw RangeError("Invalid node type: " + e); else if (e.schema != this) throw RangeError("Node type from different schema used (" + e.name + ")"); return e.createChecked(t, n, r); } text(e, t) { let n = this.nodes.text; return new de(n, n.defaultAttrs, e, l.setFrom(t)); } mark(e, t) { return typeof e == "string" && (e = this.marks[e]), e.create(t); } nodeType(e) { let t = this.nodes[e]; if (!t) throw RangeError("Unknown node type: " + e); return t; } }; function Ie(e, t) { let n = []; for (let r = 0; r < t.length; r++) { let i = t[r], a = e.marks[i], o = a; if (a) n.push(a); else for (let t in e.marks) { let r = e.marks[t]; (i == "_" || r.spec.group && r.spec.group.split(" ").indexOf(i) > -1) && n.push(o = r); } if (!o) throw SyntaxError("Unknown mark type: '" + t[r] + "'"); } return n; } function Le(e) { return e.tag != null; } function Re(e) { return e.style != null; } var ze = class e { constructor(e, t) { this.schema = e, this.rules = t, this.tags = [], this.styles = []; let n = this.matchedStyles = []; t.forEach((e) => { if (Le(e)) this.tags.push(e); else if (Re(e)) { let t = /[^=]*/.exec(e.style)[0]; n.indexOf(t) < 0 && n.push(t), this.styles.push(e); } }), this.normalizeLists = !this.tags.some((t) => { if (!/^(ul|ol)\b/.test(t.tag) || !t.node) return !1; let n = e.nodes[t.node]; return n.contentMatch.matchType(n); }); } parse(e, t = {}) { let n = new Je(this, t, !1); return n.addAll(e, l.none, t.from, t.to), n.finish(); } parseSlice(e, t = {}) { let n = new Je(this, t, !0); return n.addAll(e, l.none, t.from, t.to), d.maxOpen(n.finish()); } matchTag(e, t, n) { for (let r = n ? this.tags.indexOf(n) + 1 : 0; r < this.tags.length; r++) { let n = this.tags[r]; if (Xe(e, n.tag) && (n.namespace === void 0 || e.namespaceURI == n.namespace) && (!n.context || t.matchesContext(n.context))) { if (n.getAttrs) { let t = n.getAttrs(e); if (t === !1) continue; n.attrs = t || void 0; } return n; } } } matchStyle(e, t, n, r) { for (let i = r ? this.styles.indexOf(r) + 1 : 0; i < this.styles.length; i++) { let r = this.styles[i], a = r.style; if (!(a.indexOf(e) != 0 || r.context && !n.matchesContext(r.context) || a.length > e.length && (a.charCodeAt(e.length) != 61 || a.slice(e.length + 1) != t))) { if (r.getAttrs) { let e = r.getAttrs(t); if (e === !1) continue; r.attrs = e || void 0; } return r; } } } static schemaRules(e) { let t = []; function n(e) { let n = e.priority == null ? 50 : e.priority, r = 0; for (; r < t.length; r++) { let e = t[r]; if ((e.priority == null ? 50 : e.priority) < n) break; } t.splice(r, 0, e); } for (let t in e.marks) { let r = e.marks[t].spec.parseDOM; r && r.forEach((e) => { n(e = Ze(e)), e.mark || e.ignore || e.clearMark || (e.mark = t); }); } for (let t in e.nodes) { let r = e.nodes[t].spec.parseDOM; r && r.forEach((e) => { n(e = Ze(e)), e.node || e.ignore || e.mark || (e.node = t); }); } return t; } static fromSchema(t) { return t.cached.domParser || (t.cached.domParser = new e(t, e.schemaRules(t))); } }, Be = { address: !0, article: !0, aside: !0, blockquote: !0, canvas: !0, dd: !0, div: !0, dl: !0, fieldset: !0, figcaption: !0, figure: !0, footer: !0, form: !0, h1: !0, h2: !0, h3: !0, h4: !0, h5: !0, h6: !0, header: !0, hgroup: !0, hr: !0, li: !0, noscript: !0, ol: !0, output: !0, p: !0, pre: !0, section: !0, table: !0, tfoot: !0, ul: !0 }, Ve = { head: !0, noscript: !0, object: !0, script: !0, style: !0, title: !0 }, He = { ol: !0, ul: !0 }, Ue = 1, We = 2, Ge = 4; function Ke(e, t, n) { return t == null ? e && e.whitespace == "pre" ? 3 : n & -5 : (t ? Ue : 0) | (t === "full" ? We : 0); } var qe = class { constructor(e, t, n, r, i, a) { this.type = e, this.attrs = t, this.marks = n, this.solid = r, this.options = a, this.content = [], this.activeMarks = l.none, this.match = i || (a & Ge ? null : e.contentMatch); } findWrapping(e) { if (!this.match) { if (!this.type) return []; let t = this.type.contentMatch.fillBefore(a.from(e)); if (t) this.match = this.type.contentMatch.matchFragment(t); else { let t = this.type.contentMatch, n; return (n = t.findWrapping(e.type)) ? (this.match = t, n) : null; } } return this.match.findWrapping(e.type); } finish(e) { if (!(this.options & Ue)) { let e = this.content[this.content.length - 1], t; if (e && e.isText && (t = /[ \t\r\n\u000c]+$/.exec(e.text))) { let n = e; e.text.length == t[0].length ? this.content.pop() : this.content[this.content.length - 1] = n.withText(n.text.slice(0, n.text.length - t[0].length)); } } let t = a.from(this.content); return !e && this.match && (t = t.append(this.match.fillBefore(a.empty, !0))), this.type ? this.type.create(this.attrs, t, this.marks) : t; } inlineContext(e) { return this.type ? this.type.inlineContent : this.content.length ? this.content[0].isInline : e.parentNode && !Be.hasOwnProperty(e.parentNode.nodeName.toLowerCase()); } }, Je = class { constructor(e, t, n) { this.parser = e, this.options = t, this.isOpen = n, this.open = 0, this.localPreserveWS = !1; let r = t.topNode, i, a = Ke(null, t.preserveWhitespace, 0) | (n ? Ge : 0); i = r ? new qe(r.type, r.attrs, l.none, !0, t.topMatch || r.type.contentMatch, a) : n ? new qe(null, null, l.none, !0, null, a) : new qe(e.schema.topNodeType, null, l.none, !0, null, a), this.nodes = [i], this.find = t.findPositions, this.needsBlock = !1; } get top() { return this.nodes[this.open]; } addDOM(e, t) { e.nodeType == 3 ? this.addTextNode(e, t) : e.nodeType == 1 && this.addElement(e, t); } addTextNode(e, t) { let n = e.nodeValue, r = this.top, i = r.options & We ? "full" : this.localPreserveWS || (r.options & Ue) > 0, { schema: a } = this.parser; if (i === "full" || r.inlineContext(e) || /[^ \t\r\n\u000c]/.test(n)) { if (!i) { if (n = n.replace(/[ \t\r\n\u000c]+/g, " "), /^[ \t\r\n\u000c]/.test(n) && this.open == this.nodes.length - 1) { let t = r.content[r.content.length - 1], i = e.previousSibling; (!t || i && i.nodeName == "BR" || t.isText && /[ \t\r\n\u000c]$/.test(t.text)) && (n = n.slice(1)); } } else if (i === "full") n = n.replace(/\r\n?/g, "\n"); else if (a.linebreakReplacement && /[\r\n]/.test(n) && this.top.findWrapping(a.linebreakReplacement.create())) { let e = n.split(/\r?\n|\r/); for (let n = 0; n < e.length; n++) n && this.insertNode(a.linebreakReplacement.create(), t, !0), e[n] && this.insertNode(a.text(e[n]), t, !/\S/.test(e[n])); n = ""; } else n = n.replace(/\r?\n|\r/g, " "); n && this.insertNode(a.text(n), t, !/\S/.test(n)), this.findInText(e); } else this.findInside(e); } addElement(e, t, n) { let r = this.localPreserveWS, i = this.top; (e.tagName == "PRE" || /pre/.test(e.style && e.style.whiteSpace)) && (this.localPreserveWS = !0); let a = e.nodeName.toLowerCase(), o; He.hasOwnProperty(a) && this.parser.normalizeLists && Ye(e); let s = this.options.ruleFromNode && this.options.ruleFromNode(e) || (o = this.parser.matchTag(e, this, n)); out: if (s ? s.ignore : Ve.hasOwnProperty(a)) this.findInside(e), this.ignoreFallback(e, t); else if (!s || s.skip || s.closeParent) { s && s.closeParent ? this.open = Math.max(0, this.open - 1) : s && s.skip.nodeType && (e = s.skip); let n, r = this.needsBlock; if (Be.hasOwnProperty(a)) i.content.length && i.content[0].isInline && this.open && (this.open--, i = this.top), n = !0, i.type || (this.needsBlock = !0); else if (!e.firstChild) { this.leafFallback(e, t); break out; } let o = s && s.skip ? t : this.readStyles(e, t); o && this.addAll(e, o), n && this.sync(i), this.needsBlock = r; } else { let n = this.readStyles(e, t); n && this.addElementByRule(e, s, n, s.consuming === !1 ? o : void 0); } this.localPreserveWS = r; } leafFallback(e, t) { e.nodeName == "BR" && this.top.type && this.top.type.inlineContent && this.addTextNode(e.ownerDocument.createTextNode("\n"), t); } ignoreFallback(e, t) { e.nodeName == "BR" && (!this.top.type || !this.top.type.inlineContent) && this.findPlace(this.parser.schema.text("-"), t, !0); } readStyles(e, t) { let n = e.style; if (n && n.length) for (let e = 0; e < this.parser.matchedStyles.length; e++) { let r = this.parser.matchedStyles[e], i = n.getPropertyValue(r); if (i) for (let e;;) { let n = this.parser.matchStyle(r, i, this, e); if (!n) break; if (n.ignore) return null; if (t = n.clearMark ? t.filter((e) => !n.clearMark(e)) : t.concat(this.parser.schema.marks[n.mark].create(n.attrs)), n.consuming === !1) e = n; else break; } } return t; } addElementByRule(e, t, n, r) { let i, a; if (t.node) if (a = this.parser.schema.nodes[t.node], a.isLeaf) this.insertNode(a.create(t.attrs), n, e.nodeName == "BR") || this.leafFallback(e, n); else { let e = this.enter(a, t.attrs || null, n, t.preserveWhitespace); e && (i = !0, n = e); } else { let e = this.parser.schema.marks[t.mark]; n = n.concat(e.create(t.attrs)); } let o = this.top; if (a && a.isLeaf) this.findInside(e); else if (r) this.addElement(e, n, r); else if (t.getContent) this.findInside(e), t.getContent(e, this.parser.schema).forEach((e) => this.insertNode(e, n, !1)); else { let r = e; typeof t.contentElement == "string" ? r = e.querySelector(t.contentElement) : typeof t.contentElement == "function" ? r = t.contentElement(e) : t.contentElement && (r = t.contentElement), this.findAround(e, r, !0), this.addAll(r, n), this.findAround(e, r, !1); } i && this.sync(o) && this.open--; } addAll(e, t, n, r) { let i = n || 0; for (let a = n ? e.childNodes[n] : e.firstChild, o = r == null ? null : e.childNodes[r]; a != o; a = a.nextSibling, ++i) this.findAtPoint(e, i), this.addDOM(a, t); this.findAtPoint(e, i); } findPlace(e, t, n) { let r, i; for (let t = this.open, a = 0; t >= 0; t--) { let o = this.nodes[t], s = o.findWrapping(e); if (s && (!r || r.length > s.length + a) && (r = s, i = o, !s.length)) break; if (o.solid) { if (n) break; a += 2; } } if (!r) return null; this.sync(i); for (let e = 0; e < r.length; e++) t = this.enterInner(r[e], null, t, !1); return t; } insertNode(e, t, n) { if (e.isInline && this.needsBlock && !this.top.type) { let e = this.textblockFromContext(); e && (t = this.enterInner(e, null, t)); } let r = this.findPlace(e, t, n); if (r) { this.closeExtra(); let t = this.top; t.match &&= t.match.matchType(e.type); let n = l.none; for (let i of r.concat(e.marks)) (t.type ? t.type.allowsMarkType(i.type) : Qe(i.type, e.type)) && (n = i.addToSet(n)); return t.content.push(e.mark(n)), !0; } return !1; } enter(e, t, n, r) { let i = this.findPlace(e.create(t), n, !1); return i &&= this.enterInner(e, t, n, !0, r), i; } enterInner(e, t, n, r = !1, i) { this.closeExtra(); let a = this.top; a.match = a.match && a.match.matchType(e); let o = Ke(e, i, a.options); a.options & Ge && a.content.length == 0 && (o |= Ge); let s = l.none; return n = n.filter((t) => (a.type ? a.type.allowsMarkType(t.type) : Qe(t.type, e)) ? (s = t.addToSet(s), !1) : !0), this.nodes.push(new qe(e, t, s, r, null, o)), this.open++, n; } closeExtra(e = !1) { let t = this.nodes.length - 1; if (t > this.open) { for (; t > this.open; t--) this.nodes[t - 1].content.push(this.nodes[t].finish(e)); this.nodes.length = this.open + 1; } } finish() { return this.open = 0, this.closeExtra(this.isOpen), this.nodes[0].finish(!!(this.isOpen || this.options.topOpen)); } sync(e) { for (let t = this.open; t >= 0; t--) if (this.nodes[t] == e) return this.open = t, !0; else this.localPreserveWS && (this.nodes[t].options |= Ue); return !1; } get currentPos() { this.closeExtra(); let e = 0; for (let t = this.open; t >= 0; t--) { let n = this.nodes[t].content; for (let t = n.length - 1; t >= 0; t--) e += n[t].nodeSize; t && e++; } return e; } findAtPoint(e, t) { if (this.find) for (let n = 0; n < this.find.length; n++) this.find[n].node == e && this.find[n].offset == t && (this.find[n].pos = this.currentPos); } findInside(e) { if (this.find) for (let t = 0; t < this.find.length; t++) this.find[t].pos == null && e.nodeType == 1 && e.contains(this.find[t].node) && (this.find[t].pos = this.currentPos); } findAround(e, t, n) { if (e != t && this.find) for (let r = 0; r < this.find.length; r++) this.find[r].pos == null && e.nodeType == 1 && e.contains(this.find[r].node) && t.compareDocumentPosition(this.find[r].node) & (n ? 2 : 4) && (this.find[r].pos = this.currentPos); } findInText(e) { if (this.find) for (let t = 0; t < this.find.length; t++) this.find[t].node == e && (this.find[t].pos = this.currentPos - (e.nodeValue.length - this.find[t].offset)); } matchesContext(e) { if (e.indexOf("|") > -1) return e.split(/\s*\|\s*/).some(this.matchesContext, this); let t = e.split("/"), n = this.options.context, r = !this.isOpen && (!n || n.parent.type == this.nodes[0].type), i = -(n ? n.depth + 1 : 0) + +!r, a = (e, o) => { for (; e >= 0; e--) { let s = t[e]; if (s == "") { if (e == t.length - 1 || e == 0) continue; for (; o >= i; o--) if (a(e - 1, o)) return !0; return !1; } else { let e = o > 0 || o == 0 && r ? this.nodes[o].type : n && o >= i ? n.node(o - i).type : null; if (!e || e.name != s && !e.isInGroup(s)) return !1; o--; } } return !0; }; return a(t.length - 1, this.open); } textblockFromContext() { let e = this.options.context; if (e) for (let t = e.depth; t >= 0; t--) { let n = e.node(t).contentMatchAt(e.indexAfter(t)).defaultType; if (n && n.isTextblock && n.defaultAttrs) return n; } for (let e in this.parser.schema.nodes) { let t = this.parser.schema.nodes[e]; if (t.isTextblock && t.defaultAttrs) return t; } } }; function Ye(e) { for (let t = e.firstChild, n = null; t; t = t.nextSibling) { let e = t.nodeType == 1 ? t.nodeName.toLowerCase() : null; e && He.hasOwnProperty(e) && n ? (n.appendChild(t), t = n) : e == "li" ? n = t : e && (n = null); } } function Xe(e, t) { return (e.matches || e.msMatchesSelector || e.webkitMatchesSelector || e.mozMatchesSelector).call(e, t); } function Ze(e) { let t = {}; for (let n in e) t[n] = e[n]; return t; } function Qe(e, t) { let n = t.schema.nodes; for (let r in n) { let i = n[r]; if (!i.allowsMarkType(e)) continue; let a = [], o = (e) => { a.push(e); for (let n = 0; n < e.edgeCount; n++) { let { type: r, next: i } = e.edge(n); if (r == t || a.indexOf(i) < 0 && o(i)) return !0; } }; if (o(i.contentMatch)) return !0; } } var $e = class e { constructor(e, t) { this.nodes = e, this.marks = t; } serializeFragment(e, t = {}, n) { n ||= tt(t).createDocumentFragment(); let r = n, i = []; return e.forEach((e) => { if (i.length || e.marks.length) { let n = 0, a = 0; for (; n < i.length && a < e.marks.length;) { let t = e.marks[a]; if (!this.marks[t.type.name]) { a++; continue; } if (!t.eq(i[n][0]) || t.type.spec.spanning === !1) break; n++, a++; } for (; n < i.length;) r = i.pop()[1]; for (; a < e.marks.length;) { let n = e.marks[a++], o = this.serializeMark(n, e.isInline, t); o && (i.push([n, r]), r.appendChild(o.dom), r = o.contentDOM || o.dom); } } r.appendChild(this.serializeNodeInner(e, t)); }), n; } serializeNodeInner(e, t) { if (e.isText) return tt(t).createTextNode(e.text); let { dom: n, contentDOM: r } = at(tt(t), this.nodes[e.type.name](e), null, e.attrs); if (r) { if (e.isLeaf) throw RangeError("Content hole not allowed in a leaf node spec"); this.serializeFragment(e.content, t, r); } return n; } serializeNode(e, t = {}) { let n = this.serializeNodeInner(e, t); for (let r = e.marks.length - 1; r >= 0; r--) { let i = this.serializeMark(e.marks[r], e.isInline, t); i && ((i.contentDOM || i.dom).appendChild(n), n = i.dom); } return n; } serializeMark(e, t, n = {}) { let r = this.marks[e.type.name]; return r && at(tt(n), r(e, t), null, e.attrs); } static renderSpec(e, t, n = null, r) { return typeof t == "string" ? { dom: e.createTextNode(t) } : at(e, t, n, r); } static fromSchema(t) { return t.cached.domSerializer || (t.cached.domSerializer = new e(this.nodesFromSchema(t), this.marksFromSchema(t))); } static nodesFromSchema(e) { let t = et(e.nodes); return t.text ||= (e) => e.text, t; } static marksFromSchema(e) { return et(e.marks); } }; function et(e) { let t = {}; for (let n in e) { let r = e[n].spec.toDOM; r && (t[n] = r); } return t; } function tt(e) { return e.document || window.document; } var nt = /* @__PURE__ */ new WeakMap(); function rt(e) { let t = nt.get(e); return t === void 0 && nt.set(e, t = it(e)), t; } function it(e) { let t = null; function n(e) { if (e && typeof e == "object") if (Array.isArray(e)) if (typeof e[0] == "string") t ||= [], t.push(e); else for (let t = 0; t < e.length; t++) n(e[t]); else for (let t in e) n(e[t]); } return n(e), t; } function at(e, t, n, r) { if (t.nodeType == 1) return { dom: t }; if (t.dom && t.dom.nodeType == 1) return t; let i = t[0], a; if (typeof i != "string") throw RangeError("Invalid array passed to renderSpec"); if (r && (a = rt(r)) && a.indexOf(t) > -1) throw RangeError("Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack."); let o = i.indexOf(" "); o > 0 && (n = i.slice(0, o), i = i.slice(o + 1)); let s, c = n ? e.createElementNS(n, i) : e.createElement(i), l = t[1], u = 1; if (l && typeof l == "object" && l.nodeType == null && !Array.isArray(l)) { u = 2; for (let e in l) if (l[e] != null) { let t = e.indexOf(" "); t > 0 ? c.setAttributeNS(e.slice(0, t), e.slice(t + 1), l[e]) : e == "style" && c.style ? c.style.cssText = l[e] : c.setAttribute(e, l[e]); } } for (let i = u; i < t.length; i++) { let a = t[i]; if (a === 0) { if (i < t.length - 1 || i > u) throw RangeError("Content hole must be the only child of its parent node"); return { dom: c, contentDOM: c }; } else if (typeof a == "string") c.appendChild(e.createTextNode(a)); else { let { dom: t, contentDOM: i } = at(e, a, n, r); if (c.appendChild(t), i) { if (s) throw RangeError("Multiple content holes"); s = i; } } } return { dom: c, contentDOM: s }; } //#endregion //#region node_modules/.pnpm/prosemirror-transform@1.12.0/node_modules/prosemirror-transform/dist/index.js var ot = 65535, st = 2 ** 16; function ct(e, t) { return e + t * st; } function lt(e) { return e & ot; } function ut(e) { return (e - (e & ot)) / st; } var dt = 1, ft = 2, pt = 4, mt = 8, ht = class { constructor(e, t, n) { this.pos = e, this.delInfo = t, this.recover = n; } get deleted() { return (this.delInfo & mt) > 0; } get deletedBefore() { return (this.delInfo & 5) > 0; } get deletedAfter() { return (this.delInfo & 6) > 0; } get deletedAcross() { return (this.delInfo & pt) > 0; } }, gt = class e { constructor(t, n = !1) { if (this.ranges = t, this.inverted = n, !t.length && e.empty) return e.empty; } recover(e) { let t = 0, n = lt(e); if (!this.inverted) for (let e = 0; e < n; e++) t += this.ranges[e * 3 + 2] - this.ranges[e * 3 + 1]; return this.ranges[n * 3] + t + ut(e); } mapResult(e, t = 1) { return this._map(e, t, !1); } map(e, t = 1) { return this._map(e, t, !0); } _map(e, t, n) { let r = 0, i = this.inverted ? 2 : 1, a = this.inverted ? 1 : 2; for (let o = 0; o < this.ranges.length; o += 3) { let s = this.ranges[o] - (this.inverted ? r : 0); if (s > e) break; let c = this.ranges[o + i], l = this.ranges[o + a], u = s + c; if (e <= u) { let i = c ? e == s ? -1 : e == u ? 1 : t : t, a = s + r + (i < 0 ? 0 : l); if (n) return a; let d = e == (t < 0 ? s : u) ? null : ct(o / 3, e - s), f = e == s ? ft : e == u ? dt : pt; return (t < 0 ? e != s : e != u) && (f |= mt), new ht(a, f, d); } r += l - c; } return n ? e + r : new ht(e + r, 0, null); } touches(e, t) { let n = 0, r = lt(t), i = this.inverted ? 2 : 1, a = this.inverted ? 1 : 2; for (let t = 0; t < this.ranges.length; t += 3) { let o = this.ranges[t] - (this.inverted ? n : 0); if (o > e) break; let s = this.ranges[t + i]; if (e <= o + s && t == r * 3) return !0; n += this.ranges[t + a] - s; } return !1; } forEach(e) { let t = this.inverted ? 2 : 1, n = this.inverted ? 1 : 2; for (let r = 0, i = 0; r < this.ranges.length; r += 3) { let a = this.ranges[r], o = a - (this.inverted ? i : 0), s = a + (this.inverted ? 0 : i), c = this.ranges[r + t], l = this.ranges[r + n]; e(o, o + c, s, s + l), i += l - c; } } invert() { return new e(this.ranges, !this.inverted); } toString() { return (this.inverted ? "-" : "") + JSON.stringify(this.ranges); } static offset(t) { return t == 0 ? e.empty : new e(t < 0 ? [ 0, -t, 0 ] : [ 0, 0, t ]); } }; gt.empty = new gt([]); var _t = class e { constructor(e, t, n = 0, r = e ? e.length : 0) { this.mirror = t, this.from = n, this.to = r, this._maps = e || [], this.ownData = !(e || t); } get maps() { return this._maps; } slice(t = 0, n = this.maps.length) { return new e(this._maps, this.mirror, t, n); } appendMap(e, t) { this.ownData ||= (this._maps = this._maps.slice(), this.mirror = this.mirror && this.mirror.slice(), !0), this.to = this._maps.push(e), t != null && this.setMirror(this._maps.length - 1, t); } appendMapping(e) { for (let t = 0, n = this._maps.length; t < e._maps.length; t++) { let r = e.getMirror(t); this.appendMap(e._maps[t], r != null && r < t ? n + r : void 0); } } getMirror(e) { if (this.mirror) { for (let t = 0; t < this.mirror.length; t++) if (this.mirror[t] == e) return this.mirror[t + (t % 2 ? -1 : 1)]; } } setMirror(e, t) { this.mirror ||= [], this.mirror.push(e, t); } appendMappingInverted(e) { for (let t = e.maps.length - 1, n = this._maps.length + e._maps.length; t >= 0; t--) { let r = e.getMirror(t); this.appendMap(e._maps[t].invert(), r != null && r > t ? n - r - 1 : void 0); } } invert() { let t = new e(); return t.appendMappingInverted(this), t; } map(e, t = 1) { if (this.mirror) return this._map(e, t, !0); for (let n = this.from; n < this.to; n++) e = this._maps[n].map(e, t); return e; } mapResult(e, t = 1) { return this._map(e, t, !1); } _map(e, t, n) { let r = 0; for (let n = this.from; n < this.to; n++) { let i = this._maps[n].mapResult(e, t); if (i.recover != null) { let t = this.getMirror(n); if (t != null && t > n && t < this.to) { n = t, e = this._maps[t].recover(i.recover); continue; } } r |= i.delInfo, e = i.pos; } return n ? e : new ht(e, r, null); } }, vt = Object.create(null), b = class { getMap() { return gt.empty; } merge(e) { return null; } static fromJSON(e, t) { if (!t || !t.stepType) throw RangeError("Invalid input for Step.fromJSON"); let n = vt[t.stepType]; if (!n) throw RangeError(`No step type ${t.stepType} defined`); return n.fromJSON(e, t); } static jsonID(e, t) { if (e in vt) throw RangeError("Duplicate use of step JSON ID " + e); return vt[e] = t, t.prototype.jsonID = e, t; } }, yt = class e { constructor(e, t) { this.doc = e, this.failed = t; } static ok(t) { return new e(t, null); } static fail(t) { return new e(null, t); } static fromReplace(t, n, r, i) { try { return e.ok(t.replace(n, r, i)); } catch (t) { if (t instanceof u) return e.fail(t.message); throw t; } } }; function bt(e, t, n) { let r = []; for (let i = 0; i < e.childCount; i++) { let a = e.child(i); a.content.size && (a = a.copy(bt(a.content, t, a))), a.isInline && (a = t(a, n, i)), r.push(a); } return a.fromArray(r); } var xt = class e extends b { constructor(e, t, n) { super(), this.from = e, this.to = t, this.mark = n; } apply(e) { let t = e.slice(this.from, this.to), n = e.resolve(this.from), r = n.node(n.sharedDepth(this.to)), i = new d(bt(t.content, (e, t) => !e.isAtom || !t.type.allowsMarkType(this.mark.type) ? e : e.mark(this.mark.addToSet(e.marks)), r), t.openStart, t.openEnd); return yt.fromReplace(e, this.from, this.to, i); } invert() { return new St(this.from, this.to, this.mark); } map(t) { let n = t.mapResult(this.from, 1), r = t.mapResult(this.to, -1); return n.deleted && r.deleted || n.pos >= r.pos ? null : new e(n.pos, r.pos, this.mark); } merge(t) { return t instanceof e && t.mark.eq(this.mark) && this.from <= t.to && this.to >= t.from ? new e(Math.min(this.from, t.from), Math.max(this.to, t.to), this.mark) : null; } toJSON() { return { stepType: "addMark", mark: this.mark.toJSON(), from: this.from, to: this.to }; } static fromJSON(t, n) { if (typeof n.from != "number" || typeof n.to != "number") throw RangeError("Invalid input for AddMarkStep.fromJSON"); return new e(n.from, n.to, t.markFromJSON(n.mark)); } }; b.jsonID("addMark", xt); var St = class e extends b { constructor(e, t, n) { super(), this.from = e, this.to = t, this.mark = n; } apply(e) { let t = e.slice(this.from, this.to), n = new d(bt(t.content, (e) => e.mark(this.mark.removeFromSet(e.marks)), e), t.openStart, t.openEnd); return yt.fromReplace(e, this.from, this.to, n); } invert() { return new xt(this.from, this.to, this.mark); } map(t) { let n = t.mapResult(this.from, 1), r = t.mapResult(this.to, -1); return n.deleted && r.deleted || n.pos >= r.pos ? null : new e(n.pos, r.pos, this.mark); } merge(t) { return t instanceof e && t.mark.eq(this.mark) && this.from <= t.to && this.to >= t.from ? new e(Math.min(this.from, t.from), Math.max(this.to, t.to), this.mark) : null; } toJSON() { return { stepType: "removeMark", mark: this.mark.toJSON(), from: this.from, to: this.to }; } static fromJSON(t, n) { if (typeof n.from != "number" || typeof n.to != "number") throw RangeError("Invalid input for RemoveMarkStep.fromJSON"); return new e(n.from, n.to, t.markFromJSON(n.mark)); } }; b.jsonID("removeMark", St); var Ct = class e extends b { constructor(e, t) { super(), this.pos = e, this.mark = t; } apply(e) { let t = e.nodeAt(this.pos); if (!t) return yt.fail("No node at mark step's position"); let n = t.type.create(t.attrs, null, this.mark.addToSet(t.marks)); return yt.fromReplace(e, this.pos, this.pos + 1, new d(a.from(n), 0, +!t.isLeaf)); } invert(t) { let n = t.nodeAt(this.pos); if (n) { let t = this.mark.addToSet(n.marks); if (t.length == n.marks.length) { for (let r = 0; r < n.marks.length; r++) if (!n.marks[r].isInSet(t)) return new e(this.pos, n.marks[r]); return new e(this.pos, this.mark); } } return new wt(this.pos, this.mark); } map(t) { let n = t.mapResult(this.pos, 1); return n.deletedAfter ? null : new e(n.pos, this.mark); } toJSON() { return { stepType: "addNodeMark", pos: this.pos, mark: this.mark.toJSON() }; } static fromJSON(t, n) { if (typeof n.pos != "number") throw RangeError("Invalid input for AddNodeMarkStep.fromJSON"); return new e(n.pos, t.markFromJSON(n.mark)); } }; b.jsonID("addNodeMark", Ct); var wt = class e extends b { constructor(e, t) { super(), this.pos = e, this.mark = t; } apply(e) { let t = e.nodeAt(this.pos); if (!t) return yt.fail("No node at mark step's position"); let n = t.type.create(t.attrs, null, this.mark.removeFromSet(t.marks)); return yt.fromReplace(e, this.pos, this.pos + 1, new d(a.from(n), 0, +!t.isLeaf)); } invert(e) { let t = e.nodeAt(this.pos); return !t || !this.mark.isInSet(t.marks) ? this : new Ct(this.pos, this.mark); } map(t) { let n = t.mapResult(this.pos, 1); return n.deletedAfter ? null : new e(n.pos, this.mark); } toJSON() { return { stepType: "removeNodeMark", pos: this.pos, mark: this.mark.toJSON() }; } static fromJSON(t, n) { if (typeof n.pos != "number") throw RangeError("Invalid input for RemoveNodeMarkStep.fromJSON"); return new e(n.pos, t.markFromJSON(n.mark)); } }; b.jsonID("removeNodeMark", wt); var Tt = class e extends b { constructor(e, t, n, r = !1) { super(), this.from = e, this.to = t, this.slice = n, this.structure = r; } apply(e) { return this.structure && Dt(e, this.from, this.to) ? yt.fail("Structure replace would overwrite content") : yt.fromReplace(e, this.from, this.to, this.slice); } getMap() { return new gt([ this.from, this.to - this.from, this.slice.size ]); } invert(t) { return new e(this.from, this.from + this.slice.size, t.slice(this.from, this.to)); } map(t) { let n = t.mapResult(this.to, -1), r = this.from == this.to && e.MAP_BIAS < 0 ? n : t.mapResult(this.from, 1); return r.deletedAcross && n.deletedAcross ? null : new e(r.pos, Math.max(r.pos, n.pos), this.slice, this.structure); } merge(t) { if (!(t instanceof e) || t.structure || this.structure) return null; if (this.from + this.slice.size == t.from && !this.slice.openEnd && !t.slice.openStart) { let n = this.slice.size + t.slice.size == 0 ? d.empty : new d(this.slice.content.append(t.slice.content), this.slice.openStart, t.slice.openEnd); return new e(this.from, this.to + (t.to - t.from), n, this.structure); } else if (t.to == this.from && !this.slice.openStart && !t.slice.openEnd) { let n = this.slice.size + t.slice.size == 0 ? d.empty : new d(t.slice.content.append(this.slice.content), t.slice.openStart, this.slice.openEnd); return new e(t.from, this.to, n, this.structure); } else return null; } toJSON() { let e = { stepType: "replace", from: this.from, to: this.to }; return this.slice.size && (e.slice = this.slice.toJSON()), this.structure && (e.structure = !0), e; } static fromJSON(t, n) { if (typeof n.from != "number" || typeof n.to != "number") throw RangeError("Invalid input for ReplaceStep.fromJSON"); return new e(n.from, n.to, d.fromJSON(t, n.slice), !!n.structure); } }; Tt.MAP_BIAS = 1, b.jsonID("replace", Tt); var Et = class e extends b { constructor(e, t, n, r, i, a, o = !1) { super(), this.from = e, this.to = t, this.gapFrom = n, this.gapTo = r, this.slice = i, this.insert = a, this.structure = o; } apply(e) { if (this.structure && (Dt(e, this.from, this.gapFrom) || Dt(e, this.gapTo, this.to))) return yt.fail("Structure gap-replace would overwrite content"); let t = e.slice(this.gapFrom, this.gapTo); if (t.openStart || t.openEnd) return yt.fail("Gap is not a flat range"); let n = this.slice.insertAt(this.insert, t.content); return n ? yt.fromReplace(e, this.from, this.to, n) : yt.fail("Content does not fit in gap"); } getMap() { return new gt([ this.from, this.gapFrom - this.from, this.insert, this.gapTo, this.to - this.gapTo, this.slice.size - this.insert ]); } invert(t) { let n = this.gapTo - this.gapFrom; return new e(this.from, this.from + this.slice.size + n, this.from + this.insert, this.from + this.insert + n, t.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure); } map(t) { let n = t.mapResult(this.from, 1), r = t.mapResult(this.to, -1), i = this.from == this.gapFrom ? n.pos : t.map(this.gapFrom, -1), a = this.to == this.gapTo ? r.pos : t.map(this.gapTo, 1); return n.deletedAcross && r.deletedAcross || i < n.pos || a > r.pos ? null : new e(n.pos, r.pos, i, a, this.slice, this.insert, this.structure); } toJSON() { let e = { stepType: "replaceAround", from: this.from, to: this.to, gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert }; return this.slice.size && (e.slice = this.slice.toJSON()), this.structure && (e.structure = !0), e; } static fromJSON(t, n) { if (typeof n.from != "number" || typeof n.to != "number" || typeof n.gapFrom != "number" || typeof n.gapTo != "number" || typeof n.insert != "number") throw RangeError("Invalid input for ReplaceAroundStep.fromJSON"); return new e(n.from, n.to, n.gapFrom, n.gapTo, d.fromJSON(t, n.slice), n.insert, !!n.structure); } }; b.jsonID("replaceAround", Et); function Dt(e, t, n) { let r = e.resolve(t), i = n - t, a = r.depth; for (; i > 0 && a > 0 && r.indexAfter(a) == r.node(a).childCount;) a--, i--; if (i > 0) { let e = r.node(a).maybeChild(r.indexAfter(a)); for (; i > 0;) { if (!e || e.isLeaf) return !0; e = e.firstChild, i--; } } return !1; } function Ot(e, t, n, r) { let i = [], a = [], o, s; e.doc.nodesBetween(t, n, (e, c, l) => { if (!e.isInline) return; let u = e.marks; if (!r.isInSet(u) && l.type.allowsMarkType(r.type)) { let l = Math.max(c, t), d = Math.min(c + e.nodeSize, n), f = r.addToSet(u); for (let e = 0; e < u.length; e++) u[e].isInSet(f) || (o && o.to == l && o.mark.eq(u[e]) ? o.to = d : i.push(o = new St(l, d, u[e]))); s && s.to == l ? s.to = d : a.push(s = new xt(l, d, r)); } }), i.forEach((t) => e.step(t)), a.forEach((t) => e.step(t)); } function kt(e, t, n, r) { let i = [], a = 0; e.doc.nodesBetween(t, n, (e, o) => { if (!e.isInline) return; a++; let s = null; if (r instanceof Pe) { let t = e.marks, n; for (; n = r.isInSet(t);) (s ||= []).push(n), t = n.removeFromSet(t); } else r ? r.isInSet(e.marks) && (s = [r]) : s = e.marks; if (s && s.length) { let r = Math.min(o + e.nodeSize, n); for (let e = 0; e < s.length; e++) { let n = s[e], c; for (let e = 0; e < i.length; e++) { let t = i[e]; t.step == a - 1 && n.eq(i[e].style) && (c = t); } c ? (c.to = r, c.step = a) : i.push({ style: n, from: Math.max(o, t), to: r, step: a }); } } }), i.forEach((t) => e.step(new St(t.from, t.to, t.style))); } function At(e, t, n, r = n.contentMatch, i = !0) { let o = e.doc.nodeAt(t), s = [], c = t + 1; for (let t = 0; t < o.childCount; t++) { let l = o.child(t), u = c + l.nodeSize, f = r.matchType(l.type); if (!f) s.push(new Tt(c, u, d.empty)); else { r = f; for (let t = 0; t < l.marks.length; t++) n.allowsMarkType(l.marks[t].type) || e.step(new St(c, u, l.marks[t])); if (i && l.isText && n.whitespace != "pre") { let e, t = /\r?\n|\r/g, r; for (; e = t.exec(l.text);) r ||= new d(a.from(n.schema.text(" ", n.allowedMarks(l.marks))), 0, 0), s.push(new Tt(c + e.index, c + e.index + e[0].length, r)); } } c = u; } if (!r.validEnd) { let t = r.fillBefore(a.empty, !0); e.replace(c, c, new d(t, 0, 0)); } for (let t = s.length - 1; t >= 0; t--) e.step(s[t]); } function jt(e, t, n) { return (t == 0 || e.canReplace(t, e.childCount)) && (n == e.childCount || e.canReplace(0, n)); } function Mt(e) { let t = e.parent.content.cutByIndex(e.startIndex, e.endIndex); for (let n = e.depth, r = 0, i = 0;; --n) { let a = e.$from.node(n), o = e.$from.index(n) + r, s = e.$to.indexAfter(n) - i; if (n < e.depth && a.canReplace(o, s, t)) return n; if (n == 0 || a.type.spec.isolating || !jt(a, o, s)) break; o && (r = 1), s < a.childCount && (i = 1); } return null; } function Nt(e, t, n) { let { $from: r, $to: i, depth: o } = t, s = r.before(o + 1), c = i.after(o + 1), l = s, u = c, f = a.empty, p = 0; for (let e = o, t = !1; e > n; e--) t || r.index(e) > 0 ? (t = !0, f = a.from(r.node(e).copy(f)), p++) : l--; let m = a.empty, h = 0; for (let e = o, t = !1; e > n; e--) t || i.after(e + 1) < i.end(e) ? (t = !0, m = a.from(i.node(e).copy(m)), h++) : u++; e.step(new Et(l, u, s, c, new d(f.append(m), p, h), f.size - p, !0)); } function Pt(e, t, n = null, r = e) { let i = It(e, t), a = i && Lt(r, t); return a ? i.map(Ft).concat({ type: t, attrs: n }).concat(a.map(Ft)) : null; } function Ft(e) { return { type: e, attrs: null }; } function It(e, t) { let { parent: n, startIndex: r, endIndex: i } = e, a = n.contentMatchAt(r).findWrapping(t); if (!a) return null; let o = a.length ? a[0] : t; return n.canReplaceWith(r, i, o) ? a : null; } function Lt(e, t) { let { parent: n, startIndex: r, endIndex: i } = e, a = n.child(r), o = t.contentMatch.findWrapping(a.type); if (!o) return null; let s = (o.length ? o[o.length - 1] : t).contentMatch; for (let e = r; s && e < i; e++) s = s.matchType(n.child(e).type); return !s || !s.validEnd ? null : o; } function Rt(e, t, n) { let r = a.empty; for (let e = n.length - 1; e >= 0; e--) { if (r.size) { let t = n[e].type.contentMatch.matchFragment(r); if (!t || !t.validEnd) throw RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper"); } r = a.from(n[e].type.create(n[e].attrs, r)); } let i = t.start, o = t.end; e.step(new Et(i, o, i, o, new d(r, 0, 0), n.length, !0)); } function zt(e, t, n, r, i) { if (!r.isTextblock) throw RangeError("Type given to setBlockType should be a textblock"); let o = e.steps.length; e.doc.nodesBetween(t, n, (t, n) => { let s = typeof i == "function" ? i(t) : i; if (t.isTextblock && !t.hasMarkup(r, s) && Ht(e.doc, e.mapping.slice(o).map(n), r)) { let i = null; if (r.schema.linebreakReplacement) { let e = r.whitespace == "pre", t = !!r.contentMatch.matchType(r.schema.linebreakReplacement); e && !t ? i = !1 : !e && t && (i = !0); } i === !1 && Vt(e, t, n, o), At(e, e.mapping.slice(o).map(n, 1), r, void 0, i === null); let c = e.mapping.slice(o), l = c.map(n, 1), u = c.map(n + t.nodeSize, 1); return e.step(new Et(l, u, l + 1, u - 1, new d(a.from(r.create(s, null, t.marks)), 0, 0), 1, !0)), i === !0 && Bt(e, t, n, o), !1; } }); } function Bt(e, t, n, r) { t.forEach((i, a) => { if (i.isText) { let o, s = /\r?\n|\r/g; for (; o = s.exec(i.text);) { let i = e.mapping.slice(r).map(n + 1 + a + o.index); e.replaceWith(i, i + 1, t.type.schema.linebreakReplacement.create()); } } }); } function Vt(e, t, n, r) { t.forEach((i, a) => { if (i.type == i.type.schema.linebreakReplacement) { let i = e.mapping.slice(r).map(n + 1 + a); e.replaceWith(i, i + 1, t.type.schema.text("\n")); } }); } function Ht(e, t, n) { let r = e.resolve(t), i = r.index(); return r.parent.canReplaceWith(i, i + 1, n); } function Ut(e, t, n, r, i) { let o = e.doc.nodeAt(t); if (!o) throw RangeError("No node at given position"); n ||= o.type; let s = n.create(r, null, i || o.marks); if (o.isLeaf) return e.replaceWith(t, t + o.nodeSize, s); if (!n.validContent(o.content)) throw RangeError("Invalid content for node type " + n.name); e.step(new Et(t, t + o.nodeSize, t + 1, t + o.nodeSize - 1, new d(a.from(s), 0, 0), 1, !0)); } function Wt(e, t, n = 1, r) { let i = e.resolve(t), a = i.depth - n, o = r && r[r.length - 1] || i.parent; if (a < 0 || i.parent.type.spec.isolating || !i.parent.canReplace(i.index(), i.parent.childCount) || !o.type.validContent(i.parent.content.cutByIndex(i.index(), i.parent.childCount))) return !1; for (let e = i.depth - 1, t = n - 2; e > a; e--, t--) { let n = i.node(e), a = i.index(e); if (n.type.spec.isolating) return !1; let o = n.content.cutByIndex(a, n.childCount), s = r && r[t + 1]; s && (o = o.replaceChild(0, s.type.create(s.attrs))); let c = r && r[t] || n; if (!n.canReplace(a + 1, n.childCount) || !c.type.validContent(o)) return !1; } let s = i.indexAfter(a), c = r && r[0]; return i.node(a).canReplaceWith(s, s, c ? c.type : i.node(a + 1).type); } function Gt(e, t, n = 1, r) { let i = e.doc.resolve(t), o = a.empty, s = a.empty; for (let e = i.depth, t = i.depth - n, c = n - 1; e > t; e--, c--) { o = a.from(i.node(e).copy(o)); let t = r && r[c]; s = a.from(t ? t.type.create(t.attrs, s) : i.node(e).copy(s)); } e.step(new Tt(t, t, new d(o.append(s), n, n), !0)); } function Kt(e, t) { let n = e.resolve(t), r = n.index(); return Jt(n.nodeBefore, n.nodeAfter) && n.parent.canReplace(r, r + 1); } function qt(e, t) { t.content.size || e.type.compatibleContent(t.type); let n = e.contentMatchAt(e.childCount), { linebreakReplacement: r } = e.type.schema; for (let i = 0; i < t.childCount; i++) { let a = t.child(i), o = a.type == r ? e.type.schema.nodes.text : a.type; if (n = n.matchType(o), !n || !e.type.allowsMarks(a.marks)) return !1; } return n.validEnd; } function Jt(e, t) { return !!(e && t && !e.isLeaf && qt(e, t)); } function Yt(e, t, n = -1) { let r = e.resolve(t); for (let e = r.depth;; e--) { let i, a, o = r.index(e); if (e == r.depth ? (i = r.nodeBefore, a = r.nodeAfter) : n > 0 ? (i = r.node(e + 1), o++, a = r.node(e).maybeChild(o)) : (i = r.node(e).maybeChild(o - 1), a = r.node(e + 1)), i && !i.isTextblock && Jt(i, a) && r.node(e).canReplace(o, o + 1)) return t; if (e == 0) break; t = n < 0 ? r.before(e) : r.after(e); } } function Xt(e, t, n) { let r = null, { linebreakReplacement: i } = e.doc.type.schema, a = e.doc.resolve(t - n), o = a.node().type; if (i && o.inlineContent) { let e = o.whitespace == "pre", t = !!o.contentMatch.matchType(i); e && !t ? r = !1 : !e && t && (r = !0); } let s = e.steps.length; if (r === !1) { let r = e.doc.resolve(t + n); Vt(e, r.node(), r.before(), s); } o.inlineContent && At(e, t + n - 1, o, a.node().contentMatchAt(a.index()), r == null); let c = e.mapping.slice(s), l = c.map(t - n); if (e.step(new Tt(l, c.map(t + n, -1), d.empty, !0)), r === !0) { let t = e.doc.resolve(l); Bt(e, t.node(), t.before(), e.steps.length); } return e; } function Zt(e, t, n) { let r = e.resolve(t); if (r.parent.canReplaceWith(r.index(), r.index(), n)) return t; if (r.parentOffset == 0) for (let e = r.depth - 1; e >= 0; e--) { let t = r.index(e); if (r.node(e).canReplaceWith(t, t, n)) return r.before(e + 1); if (t > 0) return null; } if (r.parentOffset == r.parent.content.size) for (let e = r.depth - 1; e >= 0; e--) { let t = r.indexAfter(e); if (r.node(e).canReplaceWith(t, t, n)) return r.after(e + 1); if (t < r.node(e).childCount) return null; } return null; } function Qt(e, t, n) { let r = e.resolve(t); if (!n.content.size) return t; let i = n.content; for (let e = 0; e < n.openStart; e++) i = i.firstChild.content; for (let e = 1; e <= (n.openStart == 0 && n.size ? 2 : 1); e++) for (let t = r.depth; t >= 0; t--) { let n = t == r.depth ? 0 : r.pos <= (r.start(t + 1) + r.end(t + 1)) / 2 ? -1 : 1, a = r.index(t) + +(n > 0), o = r.node(t), s = !1; if (e == 1) s = o.canReplace(a, a, i); else { let e = o.contentMatchAt(a).findWrapping(i.firstChild.type); s = e && o.canReplaceWith(a, a, e[0]); } if (s) return n == 0 ? r.pos : n < 0 ? r.before(t + 1) : r.after(t + 1); } return null; } function $t(e, t, n = t, r = d.empty) { if (t == n && !r.size) return null; let i = e.resolve(t), a = e.resolve(n); return en(i, a, r) ? new Tt(t, n, r) : new tn(i, a, r).fit(); } function en(e, t, n) { return !n.openStart && !n.openEnd && e.start() == t.start() && e.parent.canReplace(e.index(), t.index(), n.content); } var tn = class { constructor(e, t, n) { this.$from = e, this.$to = t, this.unplaced = n, this.frontier = [], this.placed = a.empty; for (let t = 0; t <= e.depth; t++) { let n = e.node(t); this.frontier.push({ type: n.type, match: n.contentMatchAt(e.indexAfter(t)) }); } for (let t = e.depth; t > 0; t--) this.placed = a.from(e.node(t).copy(this.placed)); } get depth() { return this.frontier.length - 1; } fit() { for (; this.unplaced.size;) { let e = this.findFittable(); e ? this.placeNodes(e) : this.openMore() || this.dropNode(); } let e = this.mustMoveInline(), t = this.placed.size - this.depth - this.$from.depth, n = this.$from, r = this.close(e < 0 ? this.$to : n.doc.resolve(e)); if (!r) return null; let i = this.placed, a = n.depth, o = r.depth; for (; a && o && i.childCount == 1;) i = i.firstChild.content, a--, o--; let s = new d(i, a, o); return e > -1 ? new Et(n.pos, e, this.$to.pos, this.$to.end(), s, t) : s.size || n.pos != this.$to.pos ? new Tt(n.pos, r.pos, s) : null; } findFittable() { let e = this.unplaced.openStart; for (let t = this.unplaced.content, n = 0, r = this.unplaced.openEnd; n < e; n++) { let i = t.firstChild; if (t.childCount > 1 && (r = 0), i.type.spec.isolating && r <= n) { e = n; break; } t = i.content; } for (let t = 1; t <= 2; t++) for (let n = t == 1 ? e : this.unplaced.openStart; n >= 0; n--) { let e, r = null; n ? (r = an(this.unplaced.content, n - 1).firstChild, e = r.content) : e = this.unplaced.content; let i = e.firstChild; for (let e = this.depth; e >= 0; e--) { let { type: o, match: s } = this.frontier[e], c, l = null; if (t == 1 && (i ? s.matchType(i.type) || (l = s.fillBefore(a.from(i), !1)) : r && o.compatibleContent(r.type))) return { sliceDepth: n, frontierDepth: e, parent: r, inject: l }; if (t == 2 && i && (c = s.findWrapping(i.type))) return { sliceDepth: n, frontierDepth: e, parent: r, wrap: c }; if (r && s.matchType(r.type)) break; } } } openMore() { let { content: e, openStart: t, openEnd: n } = this.unplaced, r = an(e, t); return !r.childCount || r.firstChild.isLeaf ? !1 : (this.unplaced = new d(e, t + 1, Math.max(n, r.size + t >= e.size - n ? t + 1 : 0)), !0); } dropNode() { let { content: e, openStart: t, openEnd: n } = this.unplaced, r = an(e, t); if (r.childCount <= 1 && t > 0) { let i = e.size - t <= t + r.size; this.unplaced = new d(nn(e, t - 1, 1), t - 1, i ? t - 1 : n); } else this.unplaced = new d(nn(e, t, 1), t, n); } placeNodes({ sliceDepth: e, frontierDepth: t, parent: n, inject: r, wrap: i }) { for (; this.depth > t;) this.closeFrontierNode(); if (i) for (let e = 0; e < i.length; e++) this.openFrontierNode(i[e]); let o = this.unplaced, s = n ? n.content : o.content, c = o.openStart - e, l = 0, u = [], { match: f, type: p } = this.frontier[t]; if (r) { for (let e = 0; e < r.childCount; e++) u.push(r.child(e)); f = f.matchFragment(r); } let m = s.size + e - (o.content.size - o.openEnd); for (; l < s.childCount;) { let e = s.child(l), t = f.matchType(e.type); if (!t) break; l++, (l > 1 || c == 0 || e.content.size) && (f = t, u.push(on(e.mark(p.allowedMarks(e.marks)), l == 1 ? c : 0, l == s.childCount ? m : -1))); } let h = l == s.childCount; h || (m = -1), this.placed = rn(this.placed, t, a.from(u)), this.frontier[t].match = f, h && m < 0 && n && n.type == this.frontier[this.depth].type && this.frontier.length > 1 && this.closeFrontierNode(); for (let e = 0, t = s; e < m; e++) { let e = t.lastChild; this.frontier.push({ type: e.type, match: e.contentMatchAt(e.childCount) }), t = e.content; } this.unplaced = h ? e == 0 ? d.empty : new d(nn(o.content, e - 1, 1), e - 1, m < 0 ? o.openEnd : e - 1) : new d(nn(o.content, e, l), o.openStart, o.openEnd); } mustMoveInline() { if (!this.$to.parent.isTextblock) return -1; let e = this.frontier[this.depth], t; if (!e.type.isTextblock || !sn(this.$to, this.$to.depth, e.type, e.match, !1) || this.$to.depth == this.depth && (t = this.findCloseLevel(this.$to)) && t.depth == this.depth) return -1; let { depth: n } = this.$to, r = this.$to.after(n); for (; n > 1 && r == this.$to.end(--n);) ++r; return r; } findCloseLevel(e) { scan: for (let t = Math.min(this.depth, e.depth); t >= 0; t--) { let { match: n, type: r } = this.frontier[t], i = t < e.depth && e.end(t + 1) == e.pos + (e.depth - (t + 1)), a = sn(e, t, r, n, i); if (a) { for (let n = t - 1; n >= 0; n--) { let { match: t, type: r } = this.frontier[n], i = sn(e, n, r, t, !0); if (!i || i.childCount) continue scan; } return { depth: t, fit: a, move: i ? e.doc.resolve(e.after(t + 1)) : e }; } } } close(e) { let t = this.findCloseLevel(e); if (!t) return null; for (; this.depth > t.depth;) this.closeFrontierNode(); t.fit.childCount && (this.placed = rn(this.placed, t.depth, t.fit)), e = t.move; for (let n = t.depth + 1; n <= e.depth; n++) { let t = e.node(n), r = t.type.contentMatch.fillBefore(t.content, !0, e.index(n)); this.openFrontierNode(t.type, t.attrs, r); } return e; } openFrontierNode(e, t = null, n) { let r = this.frontier[this.depth]; r.match = r.match.matchType(e), this.placed = rn(this.placed, this.depth, a.from(e.create(t, n))), this.frontier.push({ type: e, match: e.contentMatch }); } closeFrontierNode() { let e = this.frontier.pop().match.fillBefore(a.empty, !0); e.childCount && (this.placed = rn(this.placed, this.frontier.length, e)); } }; function nn(e, t, n) { return t == 0 ? e.cutByIndex(n, e.childCount) : e.replaceChild(0, e.firstChild.copy(nn(e.firstChild.content, t - 1, n))); } function rn(e, t, n) { return t == 0 ? e.append(n) : e.replaceChild(e.childCount - 1, e.lastChild.copy(rn(e.lastChild.content, t - 1, n))); } function an(e, t) { for (let n = 0; n < t; n++) e = e.firstChild.content; return e; } function on(e, t, n) { if (t <= 0) return e; let r = e.content; return t > 1 && (r = r.replaceChild(0, on(r.firstChild, t - 1, r.childCount == 1 ? n - 1 : 0))), t > 0 && (r = e.type.contentMatch.fillBefore(r).append(r), n <= 0 && (r = r.append(e.type.contentMatch.matchFragment(r).fillBefore(a.empty, !0)))), e.copy(r); } function sn(e, t, n, r, i) { let a = e.node(t), o = i ? e.indexAfter(t) : e.index(t); if (o == a.childCount && !n.compatibleContent(a.type)) return null; let s = r.fillBefore(a.content, !0, o); return s && !cn(n, a.content, o) ? s : null; } function cn(e, t, n) { for (let r = n; r < t.childCount; r++) if (!e.allowsMarks(t.child(r).marks)) return !0; return !1; } function ln(e) { return e.spec.defining || e.spec.definingForContent; } function un(e, t, n, r) { if (!r.size) return e.deleteRange(t, n); let i = e.doc.resolve(t), a = e.doc.resolve(n); if (en(i, a, r)) return e.step(new Tt(t, n, r)); let o = mn(i, a); o[o.length - 1] == 0 && o.pop(); let s = -(i.depth + 1); o.unshift(s); for (let e = i.depth, t = i.pos - 1; e > 0; e--, t--) { let n = i.node(e).type.spec; if (n.defining || n.definingAsContext || n.isolating) break; o.indexOf(e) > -1 ? s = e : i.before(e) == t && o.splice(1, 0, -e); } let c = o.indexOf(s), l = [], u = r.openStart; for (let e = r.content, t = 0;; t++) { let n = e.firstChild; if (l.push(n), t == r.openStart) break; e = n.content; } for (let e = u - 1; e >= 0; e--) { let t = l[e], n = ln(t.type); if (n && !t.sameMarkup(i.node(Math.abs(s) - 1))) u = e; else if (n || !t.type.isTextblock) break; } for (let t = r.openStart; t >= 0; t--) { let s = (t + u + 1) % (r.openStart + 1), f = l[s]; if (f) for (let t = 0; t < o.length; t++) { let l = o[(t + c) % o.length], u = !0; l < 0 && (u = !1, l = -l); let p = i.node(l - 1), m = i.index(l - 1); if (p.canReplaceWith(m, m, f.type, f.marks)) return e.replace(i.before(l), u ? a.after(l) : n, new d(dn(r.content, 0, r.openStart, s), s, r.openEnd)); } } let f = e.steps.length; for (let s = o.length - 1; s >= 0 && (e.replace(t, n, r), !(e.steps.length > f)); s--) { let e = o[s]; e < 0 || (t = i.before(e), n = a.after(e)); } } function dn(e, t, n, r, i) { if (t < n) { let i = e.firstChild; e = e.replaceChild(0, i.copy(dn(i.content, t + 1, n, r, i))); } if (t > r) { let t = i.contentMatchAt(0), n = t.fillBefore(e).append(e); e = n.append(t.matchFragment(n).fillBefore(a.empty, !0)); } return e; } function fn(e, t, n, r) { if (!r.isInline && t == n && e.doc.resolve(t).parent.content.size) { let i = Zt(e.doc, t, r.type); i != null && (t = n = i); } e.replaceRange(t, n, new d(a.from(r), 0, 0)); } function pn(e, t, n) { let r = e.doc.resolve(t), i = e.doc.resolve(n); if (r.parent.isTextblock && i.parent.isTextblock && r.start() != i.start() && r.parentOffset == 0 && i.parentOffset == 0) { let a = r.sharedDepth(n), o = !1; for (let e = r.depth; e > a; e--) r.node(e).type.spec.isolating && (o = !0); for (let e = i.depth; e > a; e--) i.node(e).type.spec.isolating && (o = !0); if (!o) { for (let e = r.depth; e > 0 && t == r.start(e); e--) t = r.before(e); for (let e = i.depth; e > 0 && n == i.start(e); e--) n = i.before(e); r = e.doc.resolve(t), i = e.doc.resolve(n); } } let a = mn(r, i); for (let t = 0; t < a.length; t++) { let n = a[t], o = t == a.length - 1; if (o && n == 0 || r.node(n).type.contentMatch.validEnd) return e.delete(r.start(n), i.end(n)); if (n > 0 && (o || r.node(n - 1).canReplace(r.index(n - 1), i.indexAfter(n - 1)))) return e.delete(r.before(n), i.after(n)); } for (let a = 1; a <= r.depth && a <= i.depth; a++) if (t - r.start(a) == r.depth - a && n > r.end(a) && i.end(a) - n != i.depth - a && r.start(a - 1) == i.start(a - 1) && r.node(a - 1).canReplace(r.index(a - 1), i.index(a - 1))) return e.delete(r.before(a), n); e.delete(t, n); } function mn(e, t) { let n = [], r = Math.min(e.depth, t.depth); for (let i = r; i >= 0; i--) { let r = e.start(i); if (r < e.pos - (e.depth - i) || t.end(i) > t.pos + (t.depth - i) || e.node(i).type.spec.isolating || t.node(i).type.spec.isolating) break; (r == t.start(i) || i == e.depth && i == t.depth && e.parent.inlineContent && t.parent.inlineContent && i && t.start(i - 1) == r - 1) && n.push(i); } return n; } var hn = class e extends b { constructor(e, t, n) { super(), this.pos = e, this.attr = t, this.value = n; } apply(e) { let t = e.nodeAt(this.pos); if (!t) return yt.fail("No node at attribute step's position"); let n = Object.create(null); for (let e in t.attrs) n[e] = t.attrs[e]; n[this.attr] = this.value; let r = t.type.create(n, null, t.marks); return yt.fromReplace(e, this.pos, this.pos + 1, new d(a.from(r), 0, +!t.isLeaf)); } getMap() { return gt.empty; } invert(t) { return new e(this.pos, this.attr, t.nodeAt(this.pos).attrs[this.attr]); } map(t) { let n = t.mapResult(this.pos, 1); return n.deletedAfter ? null : new e(n.pos, this.attr, this.value); } toJSON() { return { stepType: "attr", pos: this.pos, attr: this.attr, value: this.value }; } static fromJSON(t, n) { if (typeof n.pos != "number" || typeof n.attr != "string") throw RangeError("Invalid input for AttrStep.fromJSON"); return new e(n.pos, n.attr, n.value); } }; b.jsonID("attr", hn); var gn = class e extends b { constructor(e, t) { super(), this.attr = e, this.value = t; } apply(e) { let t = Object.create(null); for (let n in e.attrs) t[n] = e.attrs[n]; t[this.attr] = this.value; let n = e.type.create(t, e.content, e.marks); return yt.ok(n); } getMap() { return gt.empty; } invert(t) { return new e(this.attr, t.attrs[this.attr]); } map(e) { return this; } toJSON() { return { stepType: "docAttr", attr: this.attr, value: this.value }; } static fromJSON(t, n) { if (typeof n.attr != "string") throw RangeError("Invalid input for DocAttrStep.fromJSON"); return new e(n.attr, n.value); } }; b.jsonID("docAttr", gn); var _n = class extends Error {}; _n = function e(t) { let n = Error.call(this, t); return n.__proto__ = e.prototype, n; }, _n.prototype = Object.create(Error.prototype), _n.prototype.constructor = _n, _n.prototype.name = "TransformError"; var vn = class { constructor(e) { this.doc = e, this.steps = [], this.docs = [], this.mapping = new _t(); } get before() { return this.docs.length ? this.docs[0] : this.doc; } step(e) { let t = this.maybeStep(e); if (t.failed) throw new _n(t.failed); return this; } maybeStep(e) { let t = e.apply(this.doc); return t.failed || this.addStep(e, t.doc), t; } get docChanged() { return this.steps.length > 0; } changedRange() { let e = 1e9, t = -1e9; for (let n = 0; n < this.mapping.maps.length; n++) { let r = this.mapping.maps[n]; n && (e = r.map(e, 1), t = r.map(t, -1)), r.forEach((n, r, i, a) => { e = Math.min(e, i), t = Math.max(t, a); }); } return e == 1e9 ? null : { from: e, to: t }; } addStep(e, t) { this.docs.push(this.doc), this.steps.push(e), this.mapping.appendMap(e.getMap()), this.doc = t; } replace(e, t = e, n = d.empty) { let r = $t(this.doc, e, t, n); return r && this.step(r), this; } replaceWith(e, t, n) { return this.replace(e, t, new d(a.from(n), 0, 0)); } delete(e, t) { return this.replace(e, t, d.empty); } insert(e, t) { return this.replaceWith(e, e, t); } replaceRange(e, t, n) { return un(this, e, t, n), this; } replaceRangeWith(e, t, n) { return fn(this, e, t, n), this; } deleteRange(e, t) { return pn(this, e, t), this; } lift(e, t) { return Nt(this, e, t), this; } join(e, t = 1) { return Xt(this, e, t), this; } wrap(e, t) { return Rt(this, e, t), this; } setBlockType(e, t = e, n, r = null) { return zt(this, e, t, n, r), this; } setNodeMarkup(e, t, n = null, r) { return Ut(this, e, t, n, r), this; } setNodeAttribute(e, t, n) { return this.step(new hn(e, t, n)), this; } setDocAttribute(e, t) { return this.step(new gn(e, t)), this; } addNodeMark(e, t) { return this.step(new Ct(e, t)), this; } removeNodeMark(e, t) { let n = this.doc.nodeAt(e); if (!n) throw RangeError("No node at position " + e); if (t instanceof l) t.isInSet(n.marks) && this.step(new wt(e, t)); else { let r = n.marks, i, a = []; for (; i = t.isInSet(r);) a.push(new wt(e, i)), r = i.removeFromSet(r); for (let e = a.length - 1; e >= 0; e--) this.step(a[e]); } return this; } split(e, t = 1, n) { return Gt(this, e, t, n), this; } addMark(e, t, n) { return Ot(this, e, t, n), this; } removeMark(e, t, n) { return kt(this, e, t, n), this; } clearIncompatible(e, t, n) { return At(this, e, t, n), this; } }, yn = Object.create(null), x = class { constructor(e, t, n) { this.$anchor = e, this.$head = t, this.ranges = n || [new bn(e.min(t), e.max(t))]; } get anchor() { return this.$anchor.pos; } get head() { return this.$head.pos; } get from() { return this.$from.pos; } get to() { return this.$to.pos; } get $from() { return this.ranges[0].$from; } get $to() { return this.ranges[0].$to; } get empty() { let e = this.ranges; for (let t = 0; t < e.length; t++) if (e[t].$from.pos != e[t].$to.pos) return !1; return !0; } content() { return this.$from.doc.slice(this.from, this.to, !0); } replace(e, t = d.empty) { let n = t.content.lastChild, r = null; for (let e = 0; e < t.openEnd; e++) r = n, n = n.lastChild; let i = e.steps.length, a = this.ranges; for (let o = 0; o < a.length; o++) { let { $from: s, $to: c } = a[o], l = e.mapping.slice(i); e.replaceRange(l.map(s.pos), l.map(c.pos), o ? d.empty : t), o == 0 && On(e, i, (n ? n.isInline : r && r.isTextblock) ? -1 : 1); } } replaceWith(e, t) { let n = e.steps.length, r = this.ranges; for (let i = 0; i < r.length; i++) { let { $from: a, $to: o } = r[i], s = e.mapping.slice(n), c = s.map(a.pos), l = s.map(o.pos); i ? e.deleteRange(c, l) : (e.replaceRangeWith(c, l, t), On(e, n, t.isInline ? -1 : 1)); } } static findFrom(e, t, n = !1) { let r = e.parent.inlineContent ? new S(e) : Dn(e.node(0), e.parent, e.pos, e.index(), t, n); if (r) return r; for (let r = e.depth - 1; r >= 0; r--) { let i = t < 0 ? Dn(e.node(0), e.node(r), e.before(r + 1), e.index(r), t, n) : Dn(e.node(0), e.node(r), e.after(r + 1), e.index(r) + 1, t, n); if (i) return i; } return null; } static near(e, t = 1) { return this.findFrom(e, t) || this.findFrom(e, -t) || new Tn(e.node(0)); } static atStart(e) { return Dn(e, e, 0, 0, 1) || new Tn(e); } static atEnd(e) { return Dn(e, e, e.content.size, e.childCount, -1) || new Tn(e); } static fromJSON(e, t) { if (!t || !t.type) throw RangeError("Invalid input for Selection.fromJSON"); let n = yn[t.type]; if (!n) throw RangeError(`No selection type ${t.type} defined`); return n.fromJSON(e, t); } static jsonID(e, t) { if (e in yn) throw RangeError("Duplicate use of selection JSON ID " + e); return yn[e] = t, t.prototype.jsonID = e, t; } getBookmark() { return S.between(this.$anchor, this.$head).getBookmark(); } }; x.prototype.visible = !0; var bn = class { constructor(e, t) { this.$from = e, this.$to = t; } }, xn = !1; function Sn(e) { !xn && !e.parent.inlineContent && (xn = !0, console.warn("TextSelection endpoint not pointing into a node with inline content (" + e.parent.type.name + ")")); } var S = class e extends x { constructor(e, t = e) { Sn(e), Sn(t), super(e, t); } get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; } map(t, n) { let r = t.resolve(n.map(this.head)); if (!r.parent.inlineContent) return x.near(r); let i = t.resolve(n.map(this.anchor)); return new e(i.parent.inlineContent ? i : r, r); } replace(e, t = d.empty) { if (super.replace(e, t), t == d.empty) { let t = this.$from.marksAcross(this.$to); t && e.ensureMarks(t); } } eq(t) { return t instanceof e && t.anchor == this.anchor && t.head == this.head; } getBookmark() { return new Cn(this.anchor, this.head); } toJSON() { return { type: "text", anchor: this.anchor, head: this.head }; } static fromJSON(t, n) { if (typeof n.anchor != "number" || typeof n.head != "number") throw RangeError("Invalid input for TextSelection.fromJSON"); return new e(t.resolve(n.anchor), t.resolve(n.head)); } static create(e, t, n = t) { let r = e.resolve(t); return new this(r, n == t ? r : e.resolve(n)); } static between(t, n, r) { let i = t.pos - n.pos; if ((!r || i) && (r = i >= 0 ? 1 : -1), !n.parent.inlineContent) { let e = x.findFrom(n, r, !0) || x.findFrom(n, -r, !0); if (e) n = e.$head; else return x.near(n, r); } return t.parent.inlineContent || (i == 0 ? t = n : (t = (x.findFrom(t, -r, !0) || x.findFrom(t, r, !0)).$anchor, t.pos < n.pos != i < 0 && (t = n))), new e(t, n); } }; x.jsonID("text", S); var Cn = class e { constructor(e, t) { this.anchor = e, this.head = t; } map(t) { return new e(t.map(this.anchor), t.map(this.head)); } resolve(e) { return S.between(e.resolve(this.anchor), e.resolve(this.head)); } }, C = class e extends x { constructor(e) { let t = e.nodeAfter, n = e.node(0).resolve(e.pos + t.nodeSize); super(e, n), this.node = t; } map(t, n) { let { deleted: r, pos: i } = n.mapResult(this.anchor), a = t.resolve(i); return r ? x.near(a) : new e(a); } content() { return new d(a.from(this.node), 0, 0); } eq(t) { return t instanceof e && t.anchor == this.anchor; } toJSON() { return { type: "node", anchor: this.anchor }; } getBookmark() { return new wn(this.anchor); } static fromJSON(t, n) { if (typeof n.anchor != "number") throw RangeError("Invalid input for NodeSelection.fromJSON"); return new e(t.resolve(n.anchor)); } static create(t, n) { return new e(t.resolve(n)); } static isSelectable(e) { return !e.isText && e.type.spec.selectable !== !1; } }; C.prototype.visible = !1, x.jsonID("node", C); var wn = class e { constructor(e) { this.anchor = e; } map(t) { let { deleted: n, pos: r } = t.mapResult(this.anchor); return n ? new Cn(r, r) : new e(r); } resolve(e) { let t = e.resolve(this.anchor), n = t.nodeAfter; return n && C.isSelectable(n) ? new C(t) : x.near(t); } }, Tn = class e extends x { constructor(e) { super(e.resolve(0), e.resolve(e.content.size)); } replace(e, t = d.empty) { if (t == d.empty) { e.delete(0, e.doc.content.size); let t = x.atStart(e.doc); t.eq(e.selection) || e.setSelection(t); } else super.replace(e, t); } toJSON() { return { type: "all" }; } static fromJSON(t) { return new e(t); } map(t) { return new e(t); } eq(t) { return t instanceof e; } getBookmark() { return En; } }; x.jsonID("all", Tn); var En = { map() { return this; }, resolve(e) { return new Tn(e); } }; function Dn(e, t, n, r, i, a = !1) { if (t.inlineContent) return S.create(e, n); for (let o = r - (i > 0 ? 0 : 1); i > 0 ? o < t.childCount : o >= 0; o += i) { let r = t.child(o); if (!r.isAtom) { let t = Dn(e, r, n + i, i < 0 ? r.childCount : 0, i, a); if (t) return t; } else if (!a && C.isSelectable(r)) return C.create(e, n - (i < 0 ? r.nodeSize : 0)); n += r.nodeSize * i; } return null; } function On(e, t, n) { let r = e.steps.length - 1; if (r < t) return; let i = e.steps[r]; if (!(i instanceof Tt || i instanceof Et)) return; let a = e.mapping.maps[r], o; a.forEach((e, t, n, r) => { o ??= r; }), e.setSelection(x.near(e.doc.resolve(o), n)); } var kn = 1, An = 2, jn = 4, Mn = class extends vn { constructor(e) { super(e.doc), this.curSelectionFor = 0, this.updated = 0, this.meta = Object.create(null), this.time = Date.now(), this.curSelection = e.selection, this.storedMarks = e.storedMarks; } get selection() { return this.curSelectionFor < this.steps.length && (this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor)), this.curSelectionFor = this.steps.length), this.curSelection; } setSelection(e) { if (e.$from.doc != this.doc) throw RangeError("Selection passed to setSelection must point at the current document"); return this.curSelection = e, this.curSelectionFor = this.steps.length, this.updated = (this.updated | kn) & -3, this.storedMarks = null, this; } get selectionSet() { return (this.updated & kn) > 0; } setStoredMarks(e) { return this.storedMarks = e, this.updated |= An, this; } ensureMarks(e) { return l.sameSet(this.storedMarks || this.selection.$from.marks(), e) || this.setStoredMarks(e), this; } addStoredMark(e) { return this.ensureMarks(e.addToSet(this.storedMarks || this.selection.$head.marks())); } removeStoredMark(e) { return this.ensureMarks(e.removeFromSet(this.storedMarks || this.selection.$head.marks())); } get storedMarksSet() { return (this.updated & An) > 0; } addStep(e, t) { super.addStep(e, t), this.updated &= -3, this.storedMarks = null; } setTime(e) { return this.time = e, this; } replaceSelection(e) { return this.selection.replace(this, e), this; } replaceSelectionWith(e, t = !0) { let n = this.selection; return t && (e = e.mark(this.storedMarks || (n.empty ? n.$from.marks() : n.$from.marksAcross(n.$to) || l.none))), n.replaceWith(this, e), this; } deleteSelection() { return this.selection.replace(this), this; } insertText(e, t, n) { let r = this.doc.type.schema; if (t == null) return e ? this.replaceSelectionWith(r.text(e), !0) : this.deleteSelection(); { if (n ??= t, !e) return this.deleteRange(t, n); let i = this.storedMarks; if (!i) { let e = this.doc.resolve(t); i = n == t ? e.marks() : e.marksAcross(this.doc.resolve(n)); } return this.replaceRangeWith(t, n, r.text(e, i)), !this.selection.empty && this.selection.to == t + e.length && this.setSelection(x.near(this.selection.$to)), this; } } setMeta(e, t) { return this.meta[typeof e == "string" ? e : e.key] = t, this; } getMeta(e) { return this.meta[typeof e == "string" ? e : e.key]; } get isGeneric() { for (let e in this.meta) return !1; return !0; } scrollIntoView() { return this.updated |= jn, this; } get scrolledIntoView() { return (this.updated & jn) > 0; } }; function Nn(e, t) { return !t || !e ? e : e.bind(t); } var Pn = class { constructor(e, t, n) { this.name = e, this.init = Nn(t.init, n), this.apply = Nn(t.apply, n); } }, Fn = [ new Pn("doc", { init(e) { return e.doc || e.schema.topNodeType.createAndFill(); }, apply(e) { return e.doc; } }), new Pn("selection", { init(e, t) { return e.selection || x.atStart(t.doc); }, apply(e) { return e.selection; } }), new Pn("storedMarks", { init(e) { return e.storedMarks || null; }, apply(e, t, n, r) { return r.selection.$cursor ? e.storedMarks : null; } }), new Pn("scrollToSelection", { init() { return 0; }, apply(e, t) { return e.scrolledIntoView ? t + 1 : t; } }) ], In = class { constructor(e, t) { this.schema = e, this.plugins = [], this.pluginsByKey = Object.create(null), this.fields = Fn.slice(), t && t.forEach((e) => { if (this.pluginsByKey[e.key]) throw RangeError("Adding different instances of a keyed plugin (" + e.key + ")"); this.plugins.push(e), this.pluginsByKey[e.key] = e, e.spec.state && this.fields.push(new Pn(e.key, e.spec.state, e)); }); } }, Ln = class e { constructor(e) { this.config = e; } get schema() { return this.config.schema; } get plugins() { return this.config.plugins; } apply(e) { return this.applyTransaction(e).state; } filterTransaction(e, t = -1) { for (let n = 0; n < this.config.plugins.length; n++) if (n != t) { let t = this.config.plugins[n]; if (t.spec.filterTransaction && !t.spec.filterTransaction.call(t, e, this)) return !1; } return !0; } applyTransaction(e) { if (!this.filterTransaction(e)) return { state: this, transactions: [] }; let t = [e], n = this.applyInner(e), r = null; for (;;) { let i = !1; for (let a = 0; a < this.config.plugins.length; a++) { let o = this.config.plugins[a]; if (o.spec.appendTransaction) { let s = r ? r[a].n : 0, c = r ? r[a].state : this, l = s < t.length && o.spec.appendTransaction.call(o, s ? t.slice(s) : t, c, n); if (l && n.filterTransaction(l, a)) { if (l.setMeta("appendedTransaction", e), !r) { r = []; for (let e = 0; e < this.config.plugins.length; e++) r.push(e < a ? { state: n, n: t.length } : { state: this, n: 0 }); } t.push(l), n = n.applyInner(l), i = !0; } r && (r[a] = { state: n, n: t.length }); } } if (!i) return { state: n, transactions: t }; } } applyInner(t) { if (!t.before.eq(this.doc)) throw RangeError("Applying a mismatched transaction"); let n = new e(this.config), r = this.config.fields; for (let e = 0; e < r.length; e++) { let i = r[e]; n[i.name] = i.apply(t, this[i.name], this, n); } return n; } get tr() { return new Mn(this); } static create(t) { let n = new In(t.doc ? t.doc.type.schema : t.schema, t.plugins), r = new e(n); for (let e = 0; e < n.fields.length; e++) r[n.fields[e].name] = n.fields[e].init(t, r); return r; } reconfigure(t) { let n = new In(this.schema, t.plugins), r = n.fields, i = new e(n); for (let e = 0; e < r.length; e++) { let n = r[e].name; i[n] = this.hasOwnProperty(n) ? this[n] : r[e].init(t, i); } return i; } toJSON(e) { let t = { doc: this.doc.toJSON(), selection: this.selection.toJSON() }; if (this.storedMarks && (t.storedMarks = this.storedMarks.map((e) => e.toJSON())), e && typeof e == "object") for (let n in e) { if (n == "doc" || n == "selection") throw RangeError("The JSON fields `doc` and `selection` are reserved"); let r = e[n], i = r.spec.state; i && i.toJSON && (t[n] = i.toJSON.call(r, this[r.key])); } return t; } static fromJSON(t, n, r) { if (!n) throw RangeError("Invalid input for EditorState.fromJSON"); if (!t.schema) throw RangeError("Required config field 'schema' missing"); let i = new In(t.schema, t.plugins), a = new e(i); return i.fields.forEach((e) => { if (e.name == "doc") a.doc = ue.fromJSON(t.schema, n.doc); else if (e.name == "selection") a.selection = x.fromJSON(a.doc, n.selection); else if (e.name == "storedMarks") n.storedMarks && (a.storedMarks = n.storedMarks.map(t.schema.markFromJSON)); else { if (r) for (let i in r) { let o = r[i], s = o.spec.state; if (o.key == e.name && s && s.fromJSON && Object.prototype.hasOwnProperty.call(n, i)) { a[e.name] = s.fromJSON.call(o, t, n[i], a); return; } } a[e.name] = e.init(t, a); } }), a; } }; function Rn(e, t, n) { for (let r in e) { let i = e[r]; i instanceof Function ? i = i.bind(t) : r == "handleDOMEvents" && (i = Rn(i, t, {})), n[r] = i; } return n; } var w = class { constructor(e) { this.spec = e, this.props = {}, e.props && Rn(e.props, this, this.props), this.key = e.key ? e.key.key : Bn("plugin"); } getState(e) { return e[this.key]; } }, zn = Object.create(null); function Bn(e) { return e in zn ? e + "$" + ++zn[e] : (zn[e] = 0, e + "$"); } var T = class { constructor(e = "key") { this.key = Bn(e); } get(e) { return e.config.pluginsByKey[this.key]; } getState(e) { return e[this.key]; } }, Vn = (e, t) => e.selection.empty ? !1 : (t && t(e.tr.deleteSelection().scrollIntoView()), !0); function Hn(e, t) { let { $cursor: n } = e.selection; return !n || (t ? !t.endOfTextblock("backward", e) : n.parentOffset > 0) ? null : n; } var Un = (e, t, n) => { let r = Hn(e, n); if (!r) return !1; let i = Yn(r); if (!i) { let n = r.blockRange(), i = n && Mt(n); return i == null ? !1 : (t && t(e.tr.lift(n, i).scrollIntoView()), !0); } let a = i.nodeBefore; if (pr(e, i, t, -1)) return !0; if (r.parent.content.size == 0 && (qn(a, "end") || C.isSelectable(a))) for (let n = r.depth;; n--) { let o = $t(e.doc, r.before(n), r.after(n), d.empty); if (o && o.slice.size < o.to - o.from) { if (t) { let n = e.tr.step(o); n.setSelection(qn(a, "end") ? x.findFrom(n.doc.resolve(n.mapping.map(i.pos, -1)), -1) : C.create(n.doc, i.pos - a.nodeSize)), t(n.scrollIntoView()); } return !0; } if (n == 1 || r.node(n - 1).childCount > 1) break; } return a.isAtom && i.depth == r.depth - 1 ? (t && t(e.tr.delete(i.pos - a.nodeSize, i.pos).scrollIntoView()), !0) : !1; }, Wn = (e, t, n) => { let r = Hn(e, n); if (!r) return !1; let i = Yn(r); return i ? Kn(e, i, t) : !1; }, Gn = (e, t, n) => { let r = Xn(e, n); if (!r) return !1; let i = $n(r); return i ? Kn(e, i, t) : !1; }; function Kn(e, t, n) { let r = t.nodeBefore, i = t.pos - 1; for (; !r.isTextblock; i--) { if (r.type.spec.isolating) return !1; let e = r.lastChild; if (!e) return !1; r = e; } let a = t.nodeAfter, o = t.pos + 1; for (; !a.isTextblock; o++) { if (a.type.spec.isolating) return !1; let e = a.firstChild; if (!e) return !1; a = e; } let s = $t(e.doc, i, o, d.empty); if (!s || s.from != i || s instanceof Tt && s.slice.size >= o - i) return !1; if (n) { let t = e.tr.step(s); t.setSelection(S.create(t.doc, i)), n(t.scrollIntoView()); } return !0; } function qn(e, t, n = !1) { for (let r = e; r; r = t == "start" ? r.firstChild : r.lastChild) { if (r.isTextblock) return !0; if (n && r.childCount != 1) return !1; } return !1; } var Jn = (e, t, n) => { let { $head: r, empty: i } = e.selection, a = r; if (!i) return !1; if (r.parent.isTextblock) { if (n ? !n.endOfTextblock("backward", e) : r.parentOffset > 0) return !1; a = Yn(r); } let o = a && a.nodeBefore; return !o || !C.isSelectable(o) ? !1 : (t && t(e.tr.setSelection(C.create(e.doc, a.pos - o.nodeSize)).scrollIntoView()), !0); }; function Yn(e) { if (!e.parent.type.spec.isolating) for (let t = e.depth - 1; t >= 0; t--) { if (e.index(t) > 0) return e.doc.resolve(e.before(t + 1)); if (e.node(t).type.spec.isolating) break; } return null; } function Xn(e, t) { let { $cursor: n } = e.selection; return !n || (t ? !t.endOfTextblock("forward", e) : n.parentOffset < n.parent.content.size) ? null : n; } var Zn = (e, t, n) => { let r = Xn(e, n); if (!r) return !1; let i = $n(r); if (!i) return !1; let a = i.nodeAfter; if (pr(e, i, t, 1)) return !0; if (r.parent.content.size == 0 && (qn(a, "start") || C.isSelectable(a))) { let n = $t(e.doc, r.before(), r.after(), d.empty); if (n && n.slice.size < n.to - n.from) { if (t) { let r = e.tr.step(n); r.setSelection(qn(a, "start") ? x.findFrom(r.doc.resolve(r.mapping.map(i.pos)), 1) : C.create(r.doc, r.mapping.map(i.pos))), t(r.scrollIntoView()); } return !0; } } return a.isAtom && i.depth == r.depth - 1 ? (t && t(e.tr.delete(i.pos, i.pos + a.nodeSize).scrollIntoView()), !0) : !1; }, Qn = (e, t, n) => { let { $head: r, empty: i } = e.selection, a = r; if (!i) return !1; if (r.parent.isTextblock) { if (n ? !n.endOfTextblock("forward", e) : r.parentOffset < r.parent.content.size) return !1; a = $n(r); } let o = a && a.nodeAfter; return !o || !C.isSelectable(o) ? !1 : (t && t(e.tr.setSelection(C.create(e.doc, a.pos)).scrollIntoView()), !0); }; function $n(e) { if (!e.parent.type.spec.isolating) for (let t = e.depth - 1; t >= 0; t--) { let n = e.node(t); if (e.index(t) + 1 < n.childCount) return e.doc.resolve(e.after(t + 1)); if (n.type.spec.isolating) break; } return null; } var er = (e, t) => { let n = e.selection, r = n instanceof C, i; if (r) { if (n.node.isTextblock || !Kt(e.doc, n.from)) return !1; i = n.from; } else if (i = Yt(e.doc, n.from, -1), i == null) return !1; if (t) { let n = e.tr.join(i); r && n.setSelection(C.create(n.doc, i - e.doc.resolve(i).nodeBefore.nodeSize)), t(n.scrollIntoView()); } return !0; }, tr = (e, t) => { let n = e.selection, r; if (n instanceof C) { if (n.node.isTextblock || !Kt(e.doc, n.to)) return !1; r = n.to; } else if (r = Yt(e.doc, n.to, 1), r == null) return !1; return t && t(e.tr.join(r).scrollIntoView()), !0; }, nr = (e, t) => { let { $from: n, $to: r } = e.selection, i = n.blockRange(r), a = i && Mt(i); return a == null ? !1 : (t && t(e.tr.lift(i, a).scrollIntoView()), !0); }, rr = (e, t) => { let { $head: n, $anchor: r } = e.selection; return !n.parent.type.spec.code || !n.sameParent(r) ? !1 : (t && t(e.tr.insertText("\n").scrollIntoView()), !0); }; function ir(e) { for (let t = 0; t < e.edgeCount; t++) { let { type: n } = e.edge(t); if (n.isTextblock && !n.hasRequiredAttrs()) return n; } return null; } var ar = (e, t) => { let { $head: n, $anchor: r } = e.selection; if (!n.parent.type.spec.code || !n.sameParent(r)) return !1; let i = n.node(-1), a = n.indexAfter(-1), o = ir(i.contentMatchAt(a)); if (!o || !i.canReplaceWith(a, a, o)) return !1; if (t) { let r = n.after(), i = e.tr.replaceWith(r, r, o.createAndFill()); i.setSelection(x.near(i.doc.resolve(r), 1)), t(i.scrollIntoView()); } return !0; }, or = (e, t) => { let n = e.selection, { $from: r, $to: i } = n; if (n instanceof Tn || r.parent.inlineContent || i.parent.inlineContent) return !1; let a = ir(i.parent.contentMatchAt(i.indexAfter())); if (!a || !a.isTextblock) return !1; if (t) { let n = (!r.parentOffset && i.index() < i.parent.childCount ? r : i).pos, o = e.tr.insert(n, a.createAndFill()); o.setSelection(S.create(o.doc, n + 1)), t(o.scrollIntoView()); } return !0; }, sr = (e, t) => { let { $cursor: n } = e.selection; if (!n || n.parent.content.size) return !1; if (n.depth > 1 && n.after() != n.end(-1)) { let r = n.before(); if (Wt(e.doc, r)) return t && t(e.tr.split(r).scrollIntoView()), !0; } let r = n.blockRange(), i = r && Mt(r); return i == null ? !1 : (t && t(e.tr.lift(r, i).scrollIntoView()), !0); }; function cr(e) { return (t, n) => { let { $from: r, $to: i } = t.selection; if (t.selection instanceof C && t.selection.node.isBlock) return !r.parentOffset || !Wt(t.doc, r.pos) ? !1 : (n && n(t.tr.split(r.pos).scrollIntoView()), !0); if (!r.depth) return !1; let a = [], o, s, c = !1, l = !1; for (let t = r.depth;; t--) if (r.node(t).isBlock) { c = r.end(t) == r.pos + (r.depth - t), l = r.start(t) == r.pos - (r.depth - t), s = ir(r.node(t - 1).contentMatchAt(r.indexAfter(t - 1))); let n = e && e(i.parent, c, r); a.unshift(n || (c && s ? { type: s } : null)), o = t; break; } else { if (t == 1) return !1; a.unshift(null); } let u = t.tr; (t.selection instanceof S || t.selection instanceof Tn) && u.deleteSelection(); let d = u.mapping.map(r.pos), f = Wt(u.doc, d, a.length, a); if (f ||= (a[0] = s ? { type: s } : null, Wt(u.doc, d, a.length, a)), !f) return !1; if (u.split(d, a.length, a), !c && l && r.node(o).type != s) { let e = u.mapping.map(r.before(o)), t = u.doc.resolve(e); s && r.node(o - 1).canReplaceWith(t.index(), t.index() + 1, s) && u.setNodeMarkup(u.mapping.map(r.before(o)), s); } return n && n(u.scrollIntoView()), !0; }; } var lr = cr(), ur = (e, t) => { let { $from: n, to: r } = e.selection, i, a = n.sharedDepth(r); return a == 0 ? !1 : (i = n.before(a), t && t(e.tr.setSelection(C.create(e.doc, i))), !0); }, dr = (e, t) => (t && t(e.tr.setSelection(new Tn(e.doc))), !0); function fr(e, t, n) { let r = t.nodeBefore, i = t.nodeAfter, a = t.index(); return !r || !i || !r.type.compatibleContent(i.type) ? !1 : !r.content.size && t.parent.canReplace(a - 1, a) ? (n && n(e.tr.delete(t.pos - r.nodeSize, t.pos).scrollIntoView()), !0) : !t.parent.canReplace(a, a + 1) || !(i.isTextblock || Kt(e.doc, t.pos)) ? !1 : (n && n(e.tr.join(t.pos).scrollIntoView()), !0); } function pr(e, t, n, r) { let i = t.nodeBefore, o = t.nodeAfter, s, c, l = i.type.spec.isolating || o.type.spec.isolating; if (!l && fr(e, t, n)) return !0; let u = !l && t.parent.canReplace(t.index(), t.index() + 1); if (u && (s = (c = i.contentMatchAt(i.childCount)).findWrapping(o.type)) && c.matchType(s[0] || o.type).validEnd) { if (n) { let r = t.pos + o.nodeSize, c = a.empty; for (let e = s.length - 1; e >= 0; e--) c = a.from(s[e].create(null, c)); c = a.from(i.copy(c)); let l = e.tr.step(new Et(t.pos - 1, r, t.pos, r, new d(c, 1, 0), s.length, !0)), u = l.doc.resolve(r + 2 * s.length); u.nodeAfter && u.nodeAfter.type == i.type && Kt(l.doc, u.pos) && l.join(u.pos), n(l.scrollIntoView()); } return !0; } let f = o.type.spec.isolating || r > 0 && l ? null : x.findFrom(t, 1), p = f && f.$from.blockRange(f.$to), m = p && Mt(p); if (m != null && m >= t.depth) return n && n(e.tr.lift(p, m).scrollIntoView()), !0; if (u && qn(o, "start", !0) && qn(i, "end")) { let r = i, s = []; for (; s.push(r), !r.isTextblock;) r = r.lastChild; let c = o, l = 1; for (; !c.isTextblock; c = c.firstChild) l++; if (r.canReplace(r.childCount, r.childCount, c.content)) { if (n) { let r = a.empty; for (let e = s.length - 1; e >= 0; e--) r = a.from(s[e].copy(r)); n(e.tr.step(new Et(t.pos - s.length, t.pos + o.nodeSize, t.pos + l, t.pos + o.nodeSize - l, new d(r, s.length, 0), 0, !0)).scrollIntoView()); } return !0; } } return !1; } function mr(e) { return function(t, n) { let r = t.selection, i = e < 0 ? r.$from : r.$to, a = i.depth; for (; i.node(a).isInline;) { if (!a) return !1; a--; } return i.node(a).isTextblock ? (n && n(t.tr.setSelection(S.create(t.doc, e < 0 ? i.start(a) : i.end(a)))), !0) : !1; }; } var hr = mr(-1), gr = mr(1); function _r(e, t = null) { return function(n, r) { let { $from: i, $to: a } = n.selection, o = i.blockRange(a), s = o && Pt(o, e, t); return s ? (r && r(n.tr.wrap(o, s).scrollIntoView()), !0) : !1; }; } function vr(e, t = null) { return function(n, r) { let i = !1; for (let r = 0; r < n.selection.ranges.length && !i; r++) { let { $from: { pos: a }, $to: { pos: o } } = n.selection.ranges[r]; n.doc.nodesBetween(a, o, (r, a) => { if (i) return !1; if (!(!r.isTextblock || r.hasMarkup(e, t))) if (r.type == e) i = !0; else { let t = n.doc.resolve(a), r = t.index(); i = t.parent.canReplaceWith(r, r + 1, e); } }); } if (!i) return !1; if (r) { let i = n.tr; for (let r = 0; r < n.selection.ranges.length; r++) { let { $from: { pos: a }, $to: { pos: o } } = n.selection.ranges[r]; i.setBlockType(a, o, e, t); } r(i.scrollIntoView()); } return !0; }; } function yr(...e) { return function(t, n, r) { for (let i = 0; i < e.length; i++) if (e[i](t, n, r)) return !0; return !1; }; } var br = yr(Vn, Un, Jn), xr = yr(Vn, Zn, Qn), Sr = { Enter: yr(rr, or, sr, lr), "Mod-Enter": ar, Backspace: br, "Mod-Backspace": br, "Shift-Backspace": br, Delete: xr, "Mod-Delete": xr, "Mod-a": dr }, Cr = { "Ctrl-h": Sr.Backspace, "Alt-Backspace": Sr["Mod-Backspace"], "Ctrl-d": Sr.Delete, "Ctrl-Alt-Backspace": Sr["Mod-Delete"], "Alt-Delete": Sr["Mod-Delete"], "Alt-d": Sr["Mod-Delete"], "Ctrl-a": hr, "Ctrl-e": gr }; for (let e in Sr) Cr[e] = Sr[e]; typeof navigator < "u" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : typeof os < "u" && os.platform && os.platform(); //#endregion //#region node_modules/.pnpm/prosemirror-schema-list@1.5.1/node_modules/prosemirror-schema-list/dist/index.js function wr(e, t = null) { return function(n, r) { let { $from: i, $to: a } = n.selection, o = i.blockRange(a); if (!o) return !1; let s = r ? n.tr : null; return Tr(s, o, e, t) ? (r && r(s.scrollIntoView()), !0) : !1; }; } function Tr(e, t, n, r = null) { let i = !1, a = t, o = t.$from.doc; if (t.depth >= 2 && t.$from.node(t.depth - 1).type.compatibleContent(n) && t.startIndex == 0) { if (t.$from.index(t.depth - 1) == 0) return !1; let e = o.resolve(t.start - 2); a = new ce(e, e, t.depth), t.endIndex < t.parent.childCount && (t = new ce(t.$from, o.resolve(t.$to.end(t.depth)), t.depth)), i = !0; } let s = Pt(a, n, r, t); return s ? (e && Er(e, t, s, i, n), !0) : !1; } function Er(e, t, n, r, i) { let o = a.empty; for (let e = n.length - 1; e >= 0; e--) o = a.from(n[e].type.create(n[e].attrs, o)); e.step(new Et(t.start - (r ? 2 : 0), t.end, t.start, t.end, new d(o, 0, 0), n.length, !0)); let s = 0; for (let e = 0; e < n.length; e++) n[e].type == i && (s = e + 1); let c = n.length - s, l = t.start + n.length - (r ? 2 : 0), u = t.parent; for (let n = t.startIndex, r = t.endIndex, i = !0; n < r; n++, i = !1) !i && Wt(e.doc, l, c) && (e.split(l, c), l += 2 * c), l += u.child(n).nodeSize; return e; } function Dr(e) { return function(t, n) { let { $from: r, $to: i } = t.selection, a = r.blockRange(i, (t) => t.childCount > 0 && t.firstChild.type == e); return a ? n ? r.node(a.depth - 1).type == e ? Or(t, n, e, a) : kr(t, n, a) : !0 : !1; }; } function Or(e, t, n, r) { let i = e.tr, o = r.end, s = r.$to.end(r.depth); o < s && (i.step(new Et(o - 1, s, o, s, new d(a.from(n.create(null, r.parent.copy())), 1, 0), 1, !0)), r = new ce(i.doc.resolve(r.$from.pos), i.doc.resolve(s), r.depth)); let c = Mt(r); if (c == null) return !1; i.lift(r, c); let l = i.doc.resolve(i.mapping.map(o, -1) - 1); return Kt(i.doc, l.pos) && l.nodeBefore.type == l.nodeAfter.type && i.join(l.pos), t(i.scrollIntoView()), !0; } function kr(e, t, n) { let r = e.tr, i = n.parent; for (let e = n.end, t = n.endIndex - 1, a = n.startIndex; t > a; t--) e -= i.child(t).nodeSize, r.delete(e - 1, e + 1); let o = r.doc.resolve(n.start), s = o.nodeAfter; if (r.mapping.map(n.end) != n.start + o.nodeAfter.nodeSize) return !1; let c = n.startIndex == 0, l = n.endIndex == i.childCount, u = o.node(-1), f = o.index(-1); if (!u.canReplace(f + +!c, f + 1, s.content.append(l ? a.empty : a.from(i)))) return !1; let p = o.pos, m = p + s.nodeSize; return r.step(new Et(p - +!!c, m + +!!l, p + 1, m - 1, new d((c ? a.empty : a.from(i.copy(a.empty))).append(l ? a.empty : a.from(i.copy(a.empty))), +!c, +!l), +!c)), t(r.scrollIntoView()), !0; } function Ar(e) { return function(t, n) { let { $from: r, $to: i } = t.selection, o = r.blockRange(i, (t) => t.childCount > 0 && t.firstChild.type == e); if (!o) return !1; let s = o.startIndex; if (s == 0) return !1; let c = o.parent, l = c.child(s - 1); if (l.type != e) return !1; if (n) { let r = l.lastChild && l.lastChild.type == c.type, i = a.from(r ? e.create() : null), s = new d(a.from(e.create(null, a.from(c.type.create(null, i)))), r ? 3 : 1, 0), u = o.start, f = o.end; n(t.tr.step(new Et(u - (r ? 3 : 1), f, u, f, s, 1, !0)).scrollIntoView()); } return !0; }; } //#endregion //#region node_modules/.pnpm/prosemirror-view@1.41.9/node_modules/prosemirror-view/dist/index.js var E = function(e) { for (var t = 0;; t++) if (e = e.previousSibling, !e) return t; }, jr = function(e) { let t = e.assignedSlot || e.parentNode; return t && t.nodeType == 11 ? t.host : t; }, Mr = null, Nr = function(e, t, n) { let r = Mr ||= document.createRange(); return r.setEnd(e, n ?? e.nodeValue.length), r.setStart(e, t || 0), r; }, Pr = function() { Mr = null; }, Fr = function(e, t, n, r) { return n && (Lr(e, t, n, r, -1) || Lr(e, t, n, r, 1)); }, Ir = /^(img|br|input|textarea|hr)$/i; function Lr(e, t, n, r, i) { for (;;) { if (e == n && t == r) return !0; if (t == (i < 0 ? 0 : Rr(e))) { let n = e.parentNode; if (!n || n.nodeType != 1 || Hr(e) || Ir.test(e.nodeName) || e.contentEditable == "false") return !1; t = E(e) + (i < 0 ? 0 : 1), e = n; } else if (e.nodeType == 1) { let n = e.childNodes[t + (i < 0 ? -1 : 0)]; if (n.nodeType == 1 && n.contentEditable == "false") if (n.pmViewDesc?.ignoreForSelection) t += i; else return !1; else e = n, t = i < 0 ? Rr(e) : 0; } else return !1; } } function Rr(e) { return e.nodeType == 3 ? e.nodeValue.length : e.childNodes.length; } function zr(e, t) { for (;;) { if (e.nodeType == 3 && t) return e; if (e.nodeType == 1 && t > 0) { if (e.contentEditable == "false") return null; e = e.childNodes[t - 1], t = Rr(e); } else if (e.parentNode && !Hr(e)) t = E(e), e = e.parentNode; else return null; } } function Br(e, t) { for (;;) { if (e.nodeType == 3 && t < e.nodeValue.length) return e; if (e.nodeType == 1 && t < e.childNodes.length) { if (e.contentEditable == "false") return null; e = e.childNodes[t], t = 0; } else if (e.parentNode && !Hr(e)) t = E(e) + 1, e = e.parentNode; else return null; } } function Vr(e, t, n) { for (let r = t == 0, i = t == Rr(e); r || i;) { if (e == n) return !0; let t = E(e); if (e = e.parentNode, !e) return !1; r &&= t == 0, i &&= t == Rr(e); } } function Hr(e) { let t; for (let n = e; n && !(t = n.pmViewDesc); n = n.parentNode); return t && t.node && t.node.isBlock && (t.dom == e || t.contentDOM == e); } var Ur = function(e) { return e.focusNode && Fr(e.focusNode, e.focusOffset, e.anchorNode, e.anchorOffset); }; function Wr(e, t) { let n = document.createEvent("Event"); return n.initEvent("keydown", !0, !0), n.keyCode = e, n.key = n.code = t, n; } function Gr(e) { let t = e.activeElement; for (; t && t.shadowRoot;) t = t.shadowRoot.activeElement; return t; } function Kr(e, t, n) { if (e.caretPositionFromPoint) try { let r = e.caretPositionFromPoint(t, n); if (r) return { node: r.offsetNode, offset: Math.min(Rr(r.offsetNode), r.offset) }; } catch {} if (e.caretRangeFromPoint) { let r = e.caretRangeFromPoint(t, n); if (r) return { node: r.startContainer, offset: Math.min(Rr(r.startContainer), r.startOffset) }; } } var qr = typeof navigator < "u" ? navigator : null, Jr = typeof document < "u" ? document : null, Yr = qr && qr.userAgent || "", Xr = /Edge\/(\d+)/.exec(Yr), Zr = /MSIE \d/.exec(Yr), Qr = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Yr), $r = !!(Zr || Qr || Xr), ei = Zr ? document.documentMode : Qr ? +Qr[1] : Xr ? +Xr[1] : 0, ti = !$r && /gecko\/(\d+)/i.test(Yr); ti && +(/Firefox\/(\d+)/.exec(Yr) || [0, 0])[1]; var ni = !$r && /Chrome\/(\d+)/.exec(Yr), D = !!ni, ri = ni ? +ni[1] : 0, O = !$r && !!qr && /Apple Computer/.test(qr.vendor), ii = O && (/Mobile\/\w+/.test(Yr) || !!qr && qr.maxTouchPoints > 2), ai = ii || (qr ? /Mac/.test(qr.platform) : !1), oi = qr ? /Win/.test(qr.platform) : !1, si = /Android \d/.test(Yr), ci = !!Jr && "webkitFontSmoothing" in Jr.documentElement.style, li = ci ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0; function ui(e) { let t = e.defaultView && e.defaultView.visualViewport; return t ? { left: 0, right: t.width, top: 0, bottom: t.height } : { left: 0, right: e.documentElement.clientWidth, top: 0, bottom: e.documentElement.clientHeight }; } function di(e, t) { return typeof e == "number" ? e : e[t]; } function fi(e) { let t = e.getBoundingClientRect(), n = t.width / e.offsetWidth || 1, r = t.height / e.offsetHeight || 1; return { left: t.left, right: t.left + e.clientWidth * n, top: t.top, bottom: t.top + e.clientHeight * r }; } function pi(e, t, n) { let r = e.someProp("scrollThreshold") || 0, i = e.someProp("scrollMargin") || 5, a = e.dom.ownerDocument; for (let o = n || e.dom; o;) { if (o.nodeType != 1) { o = jr(o); continue; } let e = o, n = e == a.body, s = n ? ui(a) : fi(e), c = 0, l = 0; if (t.top < s.top + di(r, "top") ? l = -(s.top - t.top + di(i, "top")) : t.bottom > s.bottom - di(r, "bottom") && (l = t.bottom - t.top > s.bottom - s.top ? t.top + di(i, "top") - s.top : t.bottom - s.bottom + di(i, "bottom")), t.left < s.left + di(r, "left") ? c = -(s.left - t.left + di(i, "left")) : t.right > s.right - di(r, "right") && (c = t.right - s.right + di(i, "right")), c || l) if (n) a.defaultView.scrollBy(c, l); else { let n = e.scrollLeft, r = e.scrollTop; l && (e.scrollTop += l), c && (e.scrollLeft += c); let i = e.scrollLeft - n, a = e.scrollTop - r; t = { left: t.left - i, top: t.top - a, right: t.right - i, bottom: t.bottom - a }; } let u = n ? "fixed" : getComputedStyle(o).position; if (/^(fixed|sticky)$/.test(u)) break; o = u == "absolute" ? o.offsetParent : jr(o); } } function mi(e) { let t = e.dom.getBoundingClientRect(), n = Math.max(0, t.top), r, i; for (let a = (t.left + t.right) / 2, o = n + 1; o < Math.min(innerHeight, t.bottom); o += 5) { let t = e.root.elementFromPoint(a, o); if (!t || t == e.dom || !e.dom.contains(t)) continue; let s = t.getBoundingClientRect(); if (s.top >= n - 20) { r = t, i = s.top; break; } } return { refDOM: r, refTop: i, stack: hi(e.dom) }; } function hi(e) { let t = [], n = e.ownerDocument; for (let r = e; r && (t.push({ dom: r, top: r.scrollTop, left: r.scrollLeft }), e != n); r = jr(r)); return t; } function gi({ refDOM: e, refTop: t, stack: n }) { let r = e ? e.getBoundingClientRect().top : 0; _i(n, r == 0 ? 0 : r - t); } function _i(e, t) { for (let n = 0; n < e.length; n++) { let { dom: r, top: i, left: a } = e[n]; r.scrollTop != i + t && (r.scrollTop = i + t), r.scrollLeft != a && (r.scrollLeft = a); } } var vi = null; function yi(e) { if (e.setActive) return e.setActive(); if (vi) return e.focus(vi); let t = hi(e); e.focus(vi == null ? { get preventScroll() { return vi = { preventScroll: !0 }, !0; } } : void 0), vi || (vi = !1, _i(t, 0)); } function bi(e, t) { let n, r = 2e8, i, a = 0, o = t.top, s = t.top, c, l; for (let u = e.firstChild, d = 0; u; u = u.nextSibling, d++) { let e; if (u.nodeType == 1) e = u.getClientRects(); else if (u.nodeType == 3) e = Nr(u).getClientRects(); else continue; for (let f = 0; f < e.length; f++) { let p = e[f]; if (p.top <= o && p.bottom >= s) { o = Math.max(p.bottom, o), s = Math.min(p.top, s); let e = p.left > t.left ? p.left - t.left : p.right < t.left ? t.left - p.right : 0; if (e < r) { n = u, r = e, i = e && n.nodeType == 3 ? { left: p.right < t.left ? p.right : p.left, top: t.top } : t, u.nodeType == 1 && e && (a = d + +(t.left >= (p.left + p.right) / 2)); continue; } } else p.top > t.top && !c && p.left <= t.left && p.right >= t.left && (c = u, l = { left: Math.max(p.left, Math.min(p.right, t.left)), top: p.top }); !n && (t.left >= p.right && t.top >= p.top || t.left >= p.left && t.top >= p.bottom) && (a = d + 1); } } return !n && c && (n = c, i = l, r = 0), n && n.nodeType == 3 ? xi(n, i) : !n || r && n.nodeType == 1 ? { node: e, offset: a } : bi(n, i); } function xi(e, t) { let n = e.nodeValue.length, r = document.createRange(), i; for (let a = 0; a < n; a++) { r.setEnd(e, a + 1), r.setStart(e, a); let n = ki(r, 1); if (n.top != n.bottom && Si(t, n)) { i = { node: e, offset: a + +(t.left >= (n.left + n.right) / 2) }; break; } } return r.detach(), i || { node: e, offset: 0 }; } function Si(e, t) { return e.left >= t.left - 1 && e.left <= t.right + 1 && e.top >= t.top - 1 && e.top <= t.bottom + 1; } function Ci(e, t) { let n = e.parentNode; return n && /^li$/i.test(n.nodeName) && t.left < e.getBoundingClientRect().left ? n : e; } function wi(e, t, n) { let { node: r, offset: i } = bi(t, n), a = -1; if (r.nodeType == 1 && !r.firstChild) { let e = r.getBoundingClientRect(); a = e.left != e.right && n.left > (e.left + e.right) / 2 ? 1 : -1; } return e.docView.posFromDOM(r, i, a); } function Ti(e, t, n, r) { let i = -1; for (let n = t, a = !1; n != e.dom;) { let t = e.docView.nearestDesc(n, !0), o; if (!t) return null; if (t.dom.nodeType == 1 && (t.node.isBlock && t.parent || !t.contentDOM) && ((o = t.dom.getBoundingClientRect()).width || o.height) && (t.node.isBlock && t.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(t.dom.nodeName) && (!a && o.left > r.left || o.top > r.top ? i = t.posBefore : (!a && o.right < r.left || o.bottom < r.top) && (i = t.posAfter), a = !0), !t.contentDOM && i < 0 && !t.node.isText)) return (t.node.isBlock ? r.top < (o.top + o.bottom) / 2 : r.left < (o.left + o.right) / 2) ? t.posBefore : t.posAfter; n = t.dom.parentNode; } return i > -1 ? i : e.docView.posFromDOM(t, n, -1); } function Ei(e, t, n) { let r = e.childNodes.length; if (r && n.top < n.bottom) for (let i = Math.max(0, Math.min(r - 1, Math.floor(r * (t.top - n.top) / (n.bottom - n.top)) - 2)), a = i;;) { let n = e.childNodes[a]; if (n.nodeType == 1) { let e = n.getClientRects(); for (let r = 0; r < e.length; r++) { let i = e[r]; if (Si(t, i)) return Ei(n, t, i); } } if ((a = (a + 1) % r) == i) break; } return e; } function Di(e, t) { let n = e.dom.ownerDocument, r, i = 0, a = Kr(n, t.left, t.top); a && ({node: r, offset: i} = a); let o = (e.root.elementFromPoint ? e.root : n).elementFromPoint(t.left, t.top), s; if (!o || !e.dom.contains(o.nodeType == 1 ? o : o.parentNode)) { let n = e.dom.getBoundingClientRect(); if (!Si(t, n) || (o = Ei(e.dom, t, n), !o)) return null; } if (O) for (let e = o; r && e; e = jr(e)) e.draggable && (r = void 0); if (o = Ci(o, t), r) { if (ti && r.nodeType == 1 && (i = Math.min(i, r.childNodes.length), i < r.childNodes.length)) { let e = r.childNodes[i], n; e.nodeName == "IMG" && (n = e.getBoundingClientRect()).right <= t.left && n.bottom > t.top && i++; } let n; ci && i && r.nodeType == 1 && (n = r.childNodes[i - 1]).nodeType == 1 && n.contentEditable == "false" && n.getBoundingClientRect().top >= t.top && i--, r == e.dom && i == r.childNodes.length - 1 && r.lastChild.nodeType == 1 && t.top > r.lastChild.getBoundingClientRect().bottom ? s = e.state.doc.content.size : (i == 0 || r.nodeType != 1 || r.childNodes[i - 1].nodeName != "BR") && (s = Ti(e, r, i, t)); } s ??= wi(e, o, t); let c = e.docView.nearestDesc(o, !0); return { pos: s, inside: c ? c.posAtStart - c.border : -1 }; } function Oi(e) { return e.top < e.bottom || e.left < e.right; } function ki(e, t) { let n = e.getClientRects(); if (n.length) { let e = n[t < 0 ? 0 : n.length - 1]; if (Oi(e)) return e; } return Array.prototype.find.call(n, Oi) || e.getBoundingClientRect(); } var Ai = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; function ji(e, t, n) { let { node: r, offset: i, atom: a } = e.docView.domFromPos(t, n < 0 ? -1 : 1), o = ci || ti; if (r.nodeType == 3) if (o && (Ai.test(r.nodeValue) || (n < 0 ? !i : i == r.nodeValue.length))) { let e = ki(Nr(r, i, i), n); if (ti && i && /\s/.test(r.nodeValue[i - 1]) && i < r.nodeValue.length) { let t = ki(Nr(r, i - 1, i - 1), -1); if (t.top == e.top) { let n = ki(Nr(r, i, i + 1), -1); if (n.top != e.top) return Mi(n, n.left < t.left); } } return e; } else { let e = i, t = i, a = n < 0 ? 1 : -1; return n < 0 && !i ? (t++, a = -1) : n >= 0 && i == r.nodeValue.length ? (e--, a = 1) : n < 0 ? e-- : t++, Mi(ki(Nr(r, e, t), a), a < 0); } if (!e.state.doc.resolve(t - (a || 0)).parent.inlineContent) { if (a == null && i && (n < 0 || i == Rr(r))) { let e = r.childNodes[i - 1]; if (e.nodeType == 1) return Ni(e.getBoundingClientRect(), !1); } if (a == null && i < Rr(r)) { let e = r.childNodes[i]; if (e.nodeType == 1) return Ni(e.getBoundingClientRect(), !0); } return Ni(r.getBoundingClientRect(), n >= 0); } if (a == null && i && (n < 0 || i == Rr(r))) { let e = r.childNodes[i - 1], t = e.nodeType == 3 ? Nr(e, Rr(e) - +!o) : e.nodeType == 1 && (e.nodeName != "BR" || !e.nextSibling) ? e : null; if (t) return Mi(ki(t, 1), !1); } if (a == null && i < Rr(r)) { let e = r.childNodes[i]; for (; e.pmViewDesc && e.pmViewDesc.ignoreForCoords;) e = e.nextSibling; let t = e ? e.nodeType == 3 ? Nr(e, 0, +!o) : e.nodeType == 1 ? e : null : null; if (t) return Mi(ki(t, -1), !0); } return Mi(ki(r.nodeType == 3 ? Nr(r) : r, -n), n >= 0); } function Mi(e, t) { if (e.width == 0) return e; let n = t ? e.left : e.right; return { top: e.top, bottom: e.bottom, left: n, right: n }; } function Ni(e, t) { if (e.height == 0) return e; let n = t ? e.top : e.bottom; return { top: n, bottom: n, left: e.left, right: e.right }; } function Pi(e, t, n) { let r = e.state, i = e.root.activeElement; r != t && e.updateState(t), i != e.dom && e.focus(); try { return n(); } finally { r != t && e.updateState(r), i != e.dom && i && i.focus(); } } function Fi(e, t, n) { let r = t.selection, i = n == "up" ? r.$from : r.$to; return Pi(e, t, () => { let { node: t } = e.docView.domFromPos(i.pos, n == "up" ? -1 : 1); for (;;) { let n = e.docView.nearestDesc(t, !0); if (!n) break; if (n.node.isBlock) { t = n.contentDOM || n.dom; break; } t = n.dom.parentNode; } let r = ji(e, i.pos, 1); for (let e = t.firstChild; e; e = e.nextSibling) { let t; if (e.nodeType == 1) t = e.getClientRects(); else if (e.nodeType == 3) t = Nr(e, 0, e.nodeValue.length).getClientRects(); else continue; for (let e = 0; e < t.length; e++) { let i = t[e]; if (i.bottom > i.top + 1 && (n == "up" ? r.top - i.top > (i.bottom - r.top) * 2 : i.bottom - r.bottom > (r.bottom - i.top) * 2)) return !1; } } return !0; }); } var Ii = /[\u0590-\u08ac]/; function Li(e, t, n) { let { $head: r } = t.selection; if (!r.parent.isTextblock) return !1; let i = r.parentOffset, a = !i, o = i == r.parent.content.size, s = e.domSelection(); return s ? !Ii.test(r.parent.textContent) || !s.modify ? n == "left" || n == "backward" ? a : o : Pi(e, t, () => { let { focusNode: t, focusOffset: i, anchorNode: a, anchorOffset: o } = e.domSelectionRange(), c = s.caretBidiLevel; s.modify("move", n, "character"); let l = r.depth ? e.docView.domAfterPos(r.before()) : e.dom, { focusNode: u, focusOffset: d } = e.domSelectionRange(), f = u && !l.contains(u.nodeType == 1 ? u : u.parentNode) || t == u && i == d; try { s.collapse(a, o), t && (t != a || i != o) && s.extend && s.extend(t, i); } catch {} return c != null && (s.caretBidiLevel = c), f; }) : r.pos == r.start() || r.pos == r.end(); } var Ri = null, zi = null, Bi = !1; function Vi(e, t, n) { return Ri == t && zi == n ? Bi : (Ri = t, zi = n, Bi = n == "up" || n == "down" ? Fi(e, t, n) : Li(e, t, n)); } var Hi = 0, Ui = 1, Wi = 2, Gi = 3, Ki = class { constructor(e, t, n, r) { this.parent = e, this.children = t, this.dom = n, this.contentDOM = r, this.dirty = Hi, n.pmViewDesc = this; } matchesWidget(e) { return !1; } matchesMark(e) { return !1; } matchesNode(e, t, n) { return !1; } matchesHack(e) { return !1; } parseRule() { return null; } stopEvent(e) { return !1; } get size() { let e = 0; for (let t = 0; t < this.children.length; t++) e += this.children[t].size; return e; } get border() { return 0; } destroy() { this.parent = void 0, this.dom.pmViewDesc == this && (this.dom.pmViewDesc = void 0); for (let e = 0; e < this.children.length; e++) this.children[e].destroy(); } posBeforeChild(e) { for (let t = 0, n = this.posAtStart;; t++) { let r = this.children[t]; if (r == e) return n; n += r.size; } } get posBefore() { return this.parent.posBeforeChild(this); } get posAtStart() { return this.parent ? this.parent.posBeforeChild(this) + this.border : 0; } get posAfter() { return this.posBefore + this.size; } get posAtEnd() { return this.posAtStart + this.size - 2 * this.border; } localPosFromDOM(e, t, n) { if (this.contentDOM && this.contentDOM.contains(e.nodeType == 1 ? e : e.parentNode)) if (n < 0) { let n, r; if (e == this.contentDOM) n = e.childNodes[t - 1]; else { for (; e.parentNode != this.contentDOM;) e = e.parentNode; n = e.previousSibling; } for (; n && !((r = n.pmViewDesc) && r.parent == this);) n = n.previousSibling; return n ? this.posBeforeChild(r) + r.size : this.posAtStart; } else { let n, r; if (e == this.contentDOM) n = e.childNodes[t]; else { for (; e.parentNode != this.contentDOM;) e = e.parentNode; n = e.nextSibling; } for (; n && !((r = n.pmViewDesc) && r.parent == this);) n = n.nextSibling; return n ? this.posBeforeChild(r) : this.posAtEnd; } let r; if (e == this.dom && this.contentDOM) r = t > E(this.contentDOM); else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) r = e.compareDocumentPosition(this.contentDOM) & 2; else if (this.dom.firstChild) { if (t == 0) for (let t = e;; t = t.parentNode) { if (t == this.dom) { r = !1; break; } if (t.previousSibling) break; } if (r == null && t == e.childNodes.length) for (let t = e;; t = t.parentNode) { if (t == this.dom) { r = !0; break; } if (t.nextSibling) break; } } return r ?? n > 0 ? this.posAtEnd : this.posAtStart; } nearestDesc(e, t = !1) { for (let n = !0, r = e; r; r = r.parentNode) { let i = this.getDesc(r), a; if (i && (!t || i.node)) if (n && (a = i.nodeDOM) && !(a.nodeType == 1 ? a.contains(e.nodeType == 1 ? e : e.parentNode) : a == e)) n = !1; else return i; } } getDesc(e) { let t = e.pmViewDesc; for (let e = t; e; e = e.parent) if (e == this) return t; } posFromDOM(e, t, n) { for (let r = e; r; r = r.parentNode) { let i = this.getDesc(r); if (i) return i.localPosFromDOM(e, t, n); } return -1; } descAt(e) { for (let t = 0, n = 0; t < this.children.length; t++) { let r = this.children[t], i = n + r.size; if (n == e && i != n) { for (; !r.border && r.children.length;) for (let e = 0; e < r.children.length; e++) { let t = r.children[e]; if (t.size) { r = t; break; } } return r; } if (e < i) return r.descAt(e - n - r.border); n = i; } } domFromPos(e, t) { if (!this.contentDOM) return { node: this.dom, offset: 0, atom: e + 1 }; let n = 0, r = 0; for (let t = 0; n < this.children.length; n++) { let i = this.children[n], a = t + i.size; if (a > e || i instanceof $i) { r = e - t; break; } t = a; } if (r) return this.children[n].domFromPos(r - this.children[n].border, t); for (let e; n && !(e = this.children[n - 1]).size && e instanceof qi && e.side >= 0; n--); if (t <= 0) { let e, r = !0; for (; e = n ? this.children[n - 1] : null, !(!e || e.dom.parentNode == this.contentDOM); n--, r = !1); return e && t && r && !e.border && !e.domAtom ? e.domFromPos(e.size, t) : { node: this.contentDOM, offset: e ? E(e.dom) + 1 : 0 }; } else { let e, r = !0; for (; e = n < this.children.length ? this.children[n] : null, !(!e || e.dom.parentNode == this.contentDOM); n++, r = !1); return e && r && !e.border && !e.domAtom ? e.domFromPos(0, t) : { node: this.contentDOM, offset: e ? E(e.dom) : this.contentDOM.childNodes.length }; } } parseRange(e, t, n = 0) { if (this.children.length == 0) return { node: this.contentDOM, from: e, to: t, fromOffset: 0, toOffset: this.contentDOM.childNodes.length }; let r = -1, i = -1; for (let a = n, o = 0;; o++) { let n = this.children[o], s = a + n.size; if (r == -1 && e <= s) { let i = a + n.border; if (e >= i && t <= s - n.border && n.node && n.contentDOM && this.contentDOM.contains(n.contentDOM)) return n.parseRange(e, t, i); e = a; for (let t = o; t > 0; t--) { let n = this.children[t - 1]; if (n.size && n.dom.parentNode == this.contentDOM && !n.emptyChildAt(1)) { r = E(n.dom) + 1; break; } e -= n.size; } r == -1 && (r = 0); } if (r > -1 && (s > t || o == this.children.length - 1)) { t = s; for (let e = o + 1; e < this.children.length; e++) { let n = this.children[e]; if (n.size && n.dom.parentNode == this.contentDOM && !n.emptyChildAt(-1)) { i = E(n.dom); break; } t += n.size; } i == -1 && (i = this.contentDOM.childNodes.length); break; } a = s; } return { node: this.contentDOM, from: e, to: t, fromOffset: r, toOffset: i }; } emptyChildAt(e) { if (this.border || !this.contentDOM || !this.children.length) return !1; let t = this.children[e < 0 ? 0 : this.children.length - 1]; return t.size == 0 || t.emptyChildAt(e); } domAfterPos(e) { let { node: t, offset: n } = this.domFromPos(e, 0); if (t.nodeType != 1 || n == t.childNodes.length) throw RangeError("No node after pos " + e); return t.childNodes[n]; } setSelection(e, t, n, r = !1) { let i = Math.min(e, t), a = Math.max(e, t); for (let o = 0, s = 0; o < this.children.length; o++) { let c = this.children[o], l = s + c.size; if (i > s && a < l) return c.setSelection(e - s - c.border, t - s - c.border, n, r); s = l; } let o = this.domFromPos(e, e ? -1 : 1), s = t == e ? o : this.domFromPos(t, t ? -1 : 1), c = n.root.getSelection(), l = n.domSelectionRange(), u = !1; if ((ti || O) && e == t) { let { node: e, offset: t } = o; if (e.nodeType == 3) { if (u = !!(t && e.nodeValue[t - 1] == "\n"), u && t == e.nodeValue.length) for (let t = e, n; t; t = t.parentNode) { if (n = t.nextSibling) { n.nodeName == "BR" && (o = s = { node: n.parentNode, offset: E(n) + 1 }); break; } let e = t.pmViewDesc; if (e && e.node && e.node.isBlock) break; } } else { let n = e.childNodes[t - 1]; u = n && (n.nodeName == "BR" || n.contentEditable == "false"); } } if (ti && l.focusNode && l.focusNode != s.node && l.focusNode.nodeType == 1) { let e = l.focusNode.childNodes[l.focusOffset]; e && e.contentEditable == "false" && (r = !0); } if (!(r || u && O) && Fr(o.node, o.offset, l.anchorNode, l.anchorOffset) && Fr(s.node, s.offset, l.focusNode, l.focusOffset)) return; let d = !1; if ((c.extend || e == t) && !(u && ti)) { c.collapse(o.node, o.offset); try { e != t && c.extend(s.node, s.offset), d = !0; } catch {} } if (!d) { if (e > t) { let e = o; o = s, s = e; } let n = document.createRange(); n.setEnd(s.node, s.offset), n.setStart(o.node, o.offset), c.removeAllRanges(), c.addRange(n); } } ignoreMutation(e) { return !this.contentDOM && e.type != "selection"; } get contentLost() { return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM); } markDirty(e, t) { for (let n = 0, r = 0; r < this.children.length; r++) { let i = this.children[r], a = n + i.size; if (n == a ? e <= a && t >= n : e < a && t > n) { let r = n + i.border, o = a - i.border; if (e >= r && t <= o) { this.dirty = e == n || t == a ? Wi : Ui, e == r && t == o && (i.contentLost || i.dom.parentNode != this.contentDOM) ? i.dirty = Gi : i.markDirty(e - r, t - r); return; } else i.dirty = i.dom == i.contentDOM && i.dom.parentNode == this.contentDOM && !i.children.length ? Wi : Gi; } n = a; } this.dirty = Wi; } markParentsDirty() { let e = 1; for (let t = this.parent; t; t = t.parent, e++) { let n = e == 1 ? Wi : Ui; t.dirty < n && (t.dirty = n); } } get domAtom() { return !1; } get ignoreForCoords() { return !1; } get ignoreForSelection() { return !1; } isText(e) { return !1; } }, qi = class extends Ki { constructor(e, t, n, r) { let i, a = t.type.toDOM; if (typeof a == "function" && (a = a(n, () => { if (!i) return r; if (i.parent) return i.parent.posBeforeChild(i); })), !t.type.spec.raw) { if (a.nodeType != 1) { let e = document.createElement("span"); e.appendChild(a), a = e; } a.contentEditable = "false", a.classList.add("ProseMirror-widget"); } super(e, [], a, null), this.widget = t, this.widget = t, i = this; } matchesWidget(e) { return this.dirty == Hi && e.type.eq(this.widget.type); } parseRule() { return { ignore: !0 }; } stopEvent(e) { let t = this.widget.spec.stopEvent; return t ? t(e) : !1; } ignoreMutation(e) { return e.type != "selection" || this.widget.spec.ignoreSelection; } destroy() { this.widget.type.destroy(this.dom), super.destroy(); } get domAtom() { return !0; } get ignoreForSelection() { return !!this.widget.type.spec.relaxedSide; } get side() { return this.widget.type.side; } }, Ji = class extends Ki { constructor(e, t, n, r) { super(e, [], t, null), this.textDOM = n, this.text = r; } get size() { return this.text.length; } localPosFromDOM(e, t) { return e == this.textDOM ? this.posAtStart + t : this.posAtStart + (t ? this.size : 0); } domFromPos(e) { return { node: this.textDOM, offset: e }; } ignoreMutation(e) { return e.type === "characterData" && e.target.nodeValue == e.oldValue; } }, Yi = class e extends Ki { constructor(e, t, n, r, i) { super(e, [], n, r), this.mark = t, this.spec = i; } static create(t, n, r, i) { let a = i.nodeViews[n.type.name], o = a && a(n, i, r); return (!o || !o.dom) && (o = $e.renderSpec(document, n.type.spec.toDOM(n, r), null, n.attrs)), new e(t, n, o.dom, o.contentDOM || o.dom, o); } parseRule() { return this.dirty & Gi || this.mark.type.spec.reparseInView ? null : { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM }; } matchesMark(e) { return this.dirty != Gi && this.mark.eq(e); } markDirty(e, t) { if (super.markDirty(e, t), this.dirty != Hi) { let e = this.parent; for (; !e.node;) e = e.parent; e.dirty < this.dirty && (e.dirty = this.dirty), this.dirty = Hi; } } slice(t, n, r) { let i = e.create(this.parent, this.mark, !0, r), a = this.children, o = this.size; n < o && (a = ga(a, n, o, r)), t > 0 && (a = ga(a, 0, t, r)); for (let e = 0; e < a.length; e++) a[e].parent = i; return i.children = a, i; } ignoreMutation(e) { return this.spec.ignoreMutation ? this.spec.ignoreMutation(e) : super.ignoreMutation(e); } destroy() { this.spec.destroy && this.spec.destroy(), super.destroy(); } }, Xi = class e extends Ki { constructor(e, t, n, r, i, a, o, s, c) { super(e, [], i, a), this.node = t, this.outerDeco = n, this.innerDeco = r, this.nodeDOM = o; } static create(t, n, r, i, a, o) { let s = a.nodeViews[n.type.name], c, l = s && s(n, a, () => { if (!c) return o; if (c.parent) return c.parent.posBeforeChild(c); }, r, i), u = l && l.dom, d = l && l.contentDOM; if (n.isText) { if (!u) u = document.createTextNode(n.text); else if (u.nodeType != 3) throw RangeError("Text must be rendered as a DOM text node"); } else if (!u) { let e = $e.renderSpec(document, n.type.spec.toDOM(n), null, n.attrs); ({dom: u, contentDOM: d} = e); } !d && !n.isText && u.nodeName != "BR" && (u.hasAttribute("contenteditable") || (u.contentEditable = "false"), n.type.spec.draggable && (u.draggable = !0)); let f = u; return u = sa(u, r, n), l ? c = new ea(t, n, r, i, u, d || null, f, l, a, o + 1) : n.isText ? new Qi(t, n, r, i, u, f, a) : new e(t, n, r, i, u, d || null, f, a, o + 1); } parseRule() { if (this.node.type.spec.reparseInView) return null; let e = { node: this.node.type.name, attrs: this.node.attrs }; if (this.node.type.whitespace == "pre" && (e.preserveWhitespace = "full"), !this.contentDOM) e.getContent = () => this.node.content; else if (!this.contentLost) e.contentElement = this.contentDOM; else { for (let t = this.children.length - 1; t >= 0; t--) { let n = this.children[t]; if (this.dom.contains(n.dom.parentNode)) { e.contentElement = n.dom.parentNode; break; } } e.contentElement || (e.getContent = () => a.empty); } return e; } matchesNode(e, t, n) { return this.dirty == Hi && e.eq(this.node) && ca(t, this.outerDeco) && n.eq(this.innerDeco); } get size() { return this.node.nodeSize; } get border() { return +!this.node.isLeaf; } updateChildren(e, t) { let n = this.node.inlineContent, r = t, i = e.composing ? this.localCompositionInfo(e, t) : null, a = i && i.pos > -1 ? i : null, o = i && i.pos < 0, s = new ua(this, a && a.node, e); pa(this.node, this.innerDeco, (t, i, a) => { t.spec.marks ? s.syncToMarks(t.spec.marks, n, e, i) : t.type.side >= 0 && !a && s.syncToMarks(i == this.node.childCount ? l.none : this.node.child(i).marks, n, e, i), s.placeWidget(t, e, r); }, (t, a, c, l) => { s.syncToMarks(t.marks, n, e, l); let u; s.findNodeMatch(t, a, c, l) || o && e.state.selection.from > r && e.state.selection.to < r + t.nodeSize && (u = s.findIndexWithChild(i.node)) > -1 && s.updateNodeAt(t, a, c, u, e) || s.updateNextNode(t, a, c, e, l, r) || s.addNode(t, a, c, e, r), r += t.nodeSize; }), s.syncToMarks([], n, e, 0), this.node.isTextblock && s.addTextblockHacks(), s.destroyRest(), (s.changed || this.dirty == Wi) && (a && this.protectLocalComposition(e, a), ta(this.contentDOM, this.children, e), ii && ma(this.dom)); } localCompositionInfo(e, t) { let { from: n, to: r } = e.state.selection; if (!(e.state.selection instanceof S) || n < t || r > t + this.node.content.size) return null; let i = e.input.compositionNode; if (!i || !this.dom.contains(i.parentNode)) return null; if (this.node.inlineContent) { let e = i.nodeValue, a = ha(this.node.content, e, n - t, r - t); return a < 0 ? null : { node: i, pos: a, text: e }; } else return { node: i, pos: -1, text: "" }; } protectLocalComposition(e, { node: t, pos: n, text: r }) { if (this.getDesc(t)) return; let i = t; for (; i.parentNode != this.contentDOM; i = i.parentNode) { for (; i.previousSibling;) i.parentNode.removeChild(i.previousSibling); for (; i.nextSibling;) i.parentNode.removeChild(i.nextSibling); i.pmViewDesc &&= void 0; } let a = new Ji(this, i, t, r); e.input.compositionNodes.push(a), this.children = ga(this.children, n, n + r.length, e, a); } update(e, t, n, r) { return this.dirty == Gi || !e.sameMarkup(this.node) ? !1 : (this.updateInner(e, t, n, r), !0); } updateInner(e, t, n, r) { this.updateOuterDeco(t), this.node = e, this.innerDeco = n, this.contentDOM && this.updateChildren(r, this.posAtStart), this.dirty = Hi; } updateOuterDeco(e) { if (ca(e, this.outerDeco)) return; let t = this.nodeDOM.nodeType != 1, n = this.dom; this.dom = aa(this.dom, this.nodeDOM, ia(this.outerDeco, this.node, t), ia(e, this.node, t)), this.dom != n && (n.pmViewDesc = void 0, this.dom.pmViewDesc = this), this.outerDeco = e; } selectNode() { this.nodeDOM.nodeType == 1 && (this.nodeDOM.classList.add("ProseMirror-selectednode"), (this.contentDOM || !this.node.type.spec.draggable) && (this.nodeDOM.draggable = !0)); } deselectNode() { this.nodeDOM.nodeType == 1 && (this.nodeDOM.classList.remove("ProseMirror-selectednode"), (this.contentDOM || !this.node.type.spec.draggable) && this.nodeDOM.removeAttribute("draggable")); } get domAtom() { return this.node.isAtom; } }; function Zi(e, t, n, r, i) { sa(r, t, e); let a = new Xi(void 0, e, t, n, r, r, r, i, 0); return a.contentDOM && a.updateChildren(i, 0), a; } var Qi = class e extends Xi { constructor(e, t, n, r, i, a, o) { super(e, t, n, r, i, null, a, o, 0); } parseRule() { let e = this.nodeDOM.parentNode; for (; e && e != this.dom && !e.pmIsDeco;) e = e.parentNode; return { skip: e || !0 }; } update(e, t, n, r) { return this.dirty == Gi || this.dirty != Hi && !this.inParent() || !e.sameMarkup(this.node) ? !1 : (this.updateOuterDeco(t), (this.dirty != Hi || e.text != this.node.text) && e.text != this.nodeDOM.nodeValue && (this.nodeDOM.nodeValue = e.text, r.trackWrites == this.nodeDOM && (r.trackWrites = null)), this.node = e, this.dirty = Hi, !0); } inParent() { let e = this.parent.contentDOM; for (let t = this.nodeDOM; t; t = t.parentNode) if (t == e) return !0; return !1; } domFromPos(e) { return { node: this.nodeDOM, offset: e }; } localPosFromDOM(e, t, n) { return e == this.nodeDOM ? this.posAtStart + Math.min(t, this.node.text.length) : super.localPosFromDOM(e, t, n); } ignoreMutation(e) { return e.type != "characterData" && e.type != "selection"; } slice(t, n, r) { let i = this.node.cut(t, n), a = document.createTextNode(i.text); return new e(this.parent, i, this.outerDeco, this.innerDeco, a, a, r); } markDirty(e, t) { super.markDirty(e, t), this.dom != this.nodeDOM && (e == 0 || t == this.nodeDOM.nodeValue.length) && (this.dirty = Gi); } get domAtom() { return !1; } isText(e) { return this.node.text == e; } }, $i = class extends Ki { parseRule() { return { ignore: !0 }; } matchesHack(e) { return this.dirty == Hi && this.dom.nodeName == e; } get domAtom() { return !0; } get ignoreForCoords() { return this.dom.nodeName == "IMG"; } }, ea = class extends Xi { constructor(e, t, n, r, i, a, o, s, c, l) { super(e, t, n, r, i, a, o, c, l), this.spec = s; } update(e, t, n, r) { if (this.dirty == Gi) return !1; if (this.spec.update && (this.node.type == e.type || this.spec.multiType)) { let i = this.spec.update(e, t, n); return i && this.updateInner(e, t, n, r), i; } else if (!this.contentDOM && !e.isLeaf) return !1; else return super.update(e, t, n, r); } selectNode() { this.spec.selectNode ? this.spec.selectNode() : super.selectNode(); } deselectNode() { this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode(); } setSelection(e, t, n, r) { this.spec.setSelection ? this.spec.setSelection(e, t, n.root) : super.setSelection(e, t, n, r); } destroy() { this.spec.destroy && this.spec.destroy(), super.destroy(); } stopEvent(e) { return this.spec.stopEvent ? this.spec.stopEvent(e) : !1; } ignoreMutation(e) { return this.spec.ignoreMutation ? this.spec.ignoreMutation(e) : super.ignoreMutation(e); } }; function ta(e, t, n) { let r = e.firstChild, i = !1; for (let a = 0; a < t.length; a++) { let o = t[a], s = o.dom; if (s.parentNode == e) { for (; s != r;) r = la(r), i = !0; r = r.nextSibling; } else i = !0, e.insertBefore(s, r); if (o instanceof Yi) { let t = r ? r.previousSibling : e.lastChild; ta(o.contentDOM, o.children, n), r = t ? t.nextSibling : e.firstChild; } } for (; r;) r = la(r), i = !0; i && n.trackWrites == e && (n.trackWrites = null); } var na = function(e) { e && (this.nodeName = e); }; na.prototype = Object.create(null); var ra = [new na()]; function ia(e, t, n) { if (e.length == 0) return ra; let r = n ? ra[0] : new na(), i = [r]; for (let a = 0; a < e.length; a++) { let o = e[a].type.attrs; if (o) { o.nodeName && i.push(r = new na(o.nodeName)); for (let e in o) { let a = o[e]; a != null && (n && i.length == 1 && i.push(r = new na(t.isInline ? "span" : "div")), e == "class" ? r.class = (r.class ? r.class + " " : "") + a : e == "style" ? r.style = (r.style ? r.style + ";" : "") + a : e != "nodeName" && (r[e] = a)); } } } return i; } function aa(e, t, n, r) { if (n == ra && r == ra) return t; let i = t; for (let t = 0; t < r.length; t++) { let a = r[t], o = n[t]; if (t) { let t; o && o.nodeName == a.nodeName && i != e && (t = i.parentNode) && t.nodeName.toLowerCase() == a.nodeName ? i = t : (t = document.createElement(a.nodeName), t.pmIsDeco = !0, t.appendChild(i), o = ra[0], i = t); } oa(i, o || ra[0], a); } return i; } function oa(e, t, n) { for (let r in t) r != "class" && r != "style" && r != "nodeName" && !(r in n) && e.removeAttribute(r); for (let r in n) r != "class" && r != "style" && r != "nodeName" && n[r] != t[r] && e.setAttribute(r, n[r]); if (t.class != n.class) { let r = t.class ? t.class.split(" ").filter(Boolean) : [], i = n.class ? n.class.split(" ").filter(Boolean) : []; for (let t = 0; t < r.length; t++) i.indexOf(r[t]) == -1 && e.classList.remove(r[t]); for (let t = 0; t < i.length; t++) r.indexOf(i[t]) == -1 && e.classList.add(i[t]); e.classList.length == 0 && e.removeAttribute("class"); } if (t.style != n.style) { if (t.style) { let n = /\s*([\w\-\xa1-\uffff]+)\s*:(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*'|\(.*?\)|[^;])*/g, r; for (; r = n.exec(t.style);) e.style.removeProperty(r[1]); } n.style && (e.style.cssText += n.style); } } function sa(e, t, n) { return aa(e, e, ra, ia(t, n, e.nodeType != 1)); } function ca(e, t) { if (e.length != t.length) return !1; for (let n = 0; n < e.length; n++) if (!e[n].type.eq(t[n].type)) return !1; return !0; } function la(e) { let t = e.nextSibling; return e.parentNode.removeChild(e), t; } var ua = class { constructor(e, t, n) { this.lock = t, this.view = n, this.index = 0, this.stack = [], this.changed = !1, this.top = e, this.preMatch = da(e.node.content, e); } destroyBetween(e, t) { if (e != t) { for (let n = e; n < t; n++) this.top.children[n].destroy(); this.top.children.splice(e, t - e), this.changed = !0; } } destroyRest() { this.destroyBetween(this.index, this.top.children.length); } syncToMarks(e, t, n, r) { let i = 0, a = this.stack.length >> 1, o = Math.min(a, e.length); for (; i < o && (i == a - 1 ? this.top : this.stack[i + 1 << 1]).matchesMark(e[i]) && e[i].type.spec.spanning !== !1;) i++; for (; i < a;) this.destroyRest(), this.top.dirty = Hi, this.index = this.stack.pop(), this.top = this.stack.pop(), a--; for (; a < e.length;) { this.stack.push(this.top, this.index + 1); let i = -1, o = this.top.children.length; r < this.preMatch.index && (o = Math.min(this.index + 3, o)); for (let t = this.index; t < o; t++) { let n = this.top.children[t]; if (n.matchesMark(e[a]) && !this.isLocked(n.dom)) { i = t; break; } } if (i > -1) i > this.index && (this.changed = !0, this.destroyBetween(this.index, i)), this.top = this.top.children[this.index]; else { let r = Yi.create(this.top, e[a], t, n); this.top.children.splice(this.index, 0, r), this.top = r, this.changed = !0; } this.index = 0, a++; } } findNodeMatch(e, t, n, r) { let i = -1, a; if (r >= this.preMatch.index && (a = this.preMatch.matches[r - this.preMatch.index]).parent == this.top && a.matchesNode(e, t, n)) i = this.top.children.indexOf(a, this.index); else for (let r = this.index, a = Math.min(this.top.children.length, r + 5); r < a; r++) { let a = this.top.children[r]; if (a.matchesNode(e, t, n) && !this.preMatch.matched.has(a)) { i = r; break; } } return i < 0 ? !1 : (this.destroyBetween(this.index, i), this.index++, !0); } updateNodeAt(e, t, n, r, i) { let a = this.top.children[r]; return a.dirty == Gi && a.dom == a.contentDOM && (a.dirty = Wi), a.update(e, t, n, i) ? (this.destroyBetween(this.index, r), this.index++, !0) : !1; } findIndexWithChild(e) { for (;;) { let t = e.parentNode; if (!t) return -1; if (t == this.top.contentDOM) { let t = e.pmViewDesc; if (t) { for (let e = this.index; e < this.top.children.length; e++) if (this.top.children[e] == t) return e; } return -1; } e = t; } } updateNextNode(e, t, n, r, i, a) { for (let o = this.index; o < this.top.children.length; o++) { let s = this.top.children[o]; if (s instanceof Xi) { let c = this.preMatch.matched.get(s); if (c != null && c != i) return !1; let l = s.dom, u, d = this.isLocked(l) && !(e.isText && s.node && s.node.isText && s.nodeDOM.nodeValue == e.text && s.dirty != Gi && ca(t, s.outerDeco)); if (!d && s.update(e, t, n, r)) return this.destroyBetween(this.index, o), s.dom != l && (this.changed = !0), this.index++, !0; if (!d && (u = this.recreateWrapper(s, e, t, n, r, a))) return this.destroyBetween(this.index, o), this.top.children[this.index] = u, u.contentDOM && (u.dirty = Wi, u.updateChildren(r, a + 1), u.dirty = Hi), this.changed = !0, this.index++, !0; break; } } return !1; } recreateWrapper(e, t, n, r, i, a) { if (e.dirty || t.isAtom || !e.children.length || !e.node.content.eq(t.content) || !ca(n, e.outerDeco) || !r.eq(e.innerDeco)) return null; let o = Xi.create(this.top, t, n, r, i, a); if (o.contentDOM) { o.children = e.children, e.children = []; for (let e of o.children) e.parent = o; } return e.destroy(), o; } addNode(e, t, n, r, i) { let a = Xi.create(this.top, e, t, n, r, i); a.contentDOM && a.updateChildren(r, i + 1), this.top.children.splice(this.index++, 0, a), this.changed = !0; } placeWidget(e, t, n) { let r = this.index < this.top.children.length ? this.top.children[this.index] : null; if (r && r.matchesWidget(e) && (e == r.widget || !r.widget.type.toDOM.parentNode)) this.index++; else { let r = new qi(this.top, e, t, n); this.top.children.splice(this.index++, 0, r), this.changed = !0; } } addTextblockHacks() { let e = this.top.children[this.index - 1], t = this.top; for (; e instanceof Yi;) t = e, e = t.children[t.children.length - 1]; (!e || !(e instanceof Qi) || /\n$/.test(e.node.text) || this.view.requiresGeckoHackNode && /\s$/.test(e.node.text)) && ((O || D) && e && e.dom.contentEditable == "false" && this.addHackNode("IMG", t), this.addHackNode("BR", this.top)); } addHackNode(e, t) { if (t == this.top && this.index < t.children.length && t.children[this.index].matchesHack(e)) this.index++; else { let n = document.createElement(e); e == "IMG" && (n.className = "ProseMirror-separator", n.alt = ""), e == "BR" && (n.className = "ProseMirror-trailingBreak"); let r = new $i(this.top, [], n, null); t == this.top ? t.children.splice(this.index++, 0, r) : t.children.push(r), this.changed = !0; } } isLocked(e) { return this.lock && (e == this.lock || e.nodeType == 1 && e.contains(this.lock.parentNode)); } }; function da(e, t) { let n = t, r = n.children.length, i = e.childCount, a = /* @__PURE__ */ new Map(), o = []; outer: for (; i > 0;) { let s; for (;;) if (r) { let e = n.children[r - 1]; if (e instanceof Yi) n = e, r = e.children.length; else { s = e, r--; break; } } else if (n == t) break outer; else r = n.parent.children.indexOf(n), n = n.parent; let c = s.node; if (c) { if (c != e.child(i - 1)) break; --i, a.set(s, i), o.push(s); } } return { index: i, matched: a, matches: o.reverse() }; } function fa(e, t) { return e.type.side - t.type.side; } function pa(e, t, n, r) { let i = t.locals(e), a = 0; if (i.length == 0) { for (let n = 0; n < e.childCount; n++) { let o = e.child(n); r(o, i, t.forChild(a, o), n), a += o.nodeSize; } return; } let o = 0, s = [], c = null; for (let l = 0;;) { let u, d; for (; o < i.length && i[o].to == a;) { let e = i[o++]; e.widget && (u ? (d ||= [u]).push(e) : u = e); } if (u) if (d) { d.sort(fa); for (let e = 0; e < d.length; e++) n(d[e], l, !!c); } else n(u, l, !!c); let f, p; if (c) p = -1, f = c, c = null; else if (l < e.childCount) p = l, f = e.child(l++); else break; for (let e = 0; e < s.length; e++) s[e].to <= a && s.splice(e--, 1); for (; o < i.length && i[o].from <= a && i[o].to > a;) s.push(i[o++]); let m = a + f.nodeSize; if (f.isText) { let e = m; o < i.length && i[o].from < e && (e = i[o].from); for (let t = 0; t < s.length; t++) s[t].to < e && (e = s[t].to); e < m && (c = f.cut(e - a), f = f.cut(0, e - a), m = e, p = -1); } else for (; o < i.length && i[o].to < m;) o++; let h = f.isInline && !f.isLeaf ? s.filter((e) => !e.inline) : s.slice(); r(f, h, t.forChild(a, f), p), a = m; } } function ma(e) { if (e.nodeName == "UL" || e.nodeName == "OL") { let t = e.style.cssText; e.style.cssText = t + "; list-style: square !important", window.getComputedStyle(e).listStyle, e.style.cssText = t; } } function ha(e, t, n, r) { for (let i = 0, a = 0; i < e.childCount && a <= r;) { let o = e.child(i++), s = a; if (a += o.nodeSize, !o.isText) continue; let c = o.text; for (; i < e.childCount;) { let t = e.child(i++); if (a += t.nodeSize, !t.isText) break; c += t.text; } if (a >= n) { if (a >= r && c.slice(r - t.length - s, r - s) == t) return r - t.length; let e = s < r ? c.lastIndexOf(t, r - s - 1) : -1; if (e >= 0 && e + t.length + s >= n) return s + e; if (n == r && c.length >= r + t.length - s && c.slice(r - s, r - s + t.length) == t) return r; } } return -1; } function ga(e, t, n, r, i) { let a = []; for (let o = 0, s = 0; o < e.length; o++) { let c = e[o], l = s, u = s += c.size; l >= n || u <= t ? a.push(c) : (l < t && a.push(c.slice(0, t - l, r)), i &&= (a.push(i), void 0), u > n && a.push(c.slice(n - l, c.size, r))); } return a; } function _a(e, t = null) { let n = e.domSelectionRange(), r = e.state.doc; if (!n.focusNode) return null; let i = e.docView.nearestDesc(n.focusNode), a = i && i.size == 0, o = e.docView.posFromDOM(n.focusNode, n.focusOffset, 1); if (o < 0) return null; let s = r.resolve(o), c, l; if (Ur(n)) { for (c = o; i && !i.node;) i = i.parent; let e = i.node; if (i && e.isAtom && C.isSelectable(e) && i.parent && !(e.isInline && Vr(n.focusNode, n.focusOffset, i.dom))) { let e = i.posBefore; l = new C(o == e ? s : r.resolve(e)); } } else { if (n instanceof e.dom.ownerDocument.defaultView.Selection && n.rangeCount > 1) { let t = o, i = o; for (let r = 0; r < n.rangeCount; r++) { let a = n.getRangeAt(r); t = Math.min(t, e.docView.posFromDOM(a.startContainer, a.startOffset, 1)), i = Math.max(i, e.docView.posFromDOM(a.endContainer, a.endOffset, -1)); } if (t < 0) return null; [c, o] = i == e.state.selection.anchor ? [i, t] : [t, i], s = r.resolve(o); } else c = e.docView.posFromDOM(n.anchorNode, n.anchorOffset, 1); if (c < 0) return null; } let u = r.resolve(c); if (!l) { let n = t == "pointer" || e.state.selection.head < s.pos && !a ? 1 : -1; l = Oa(e, u, s, n); } return l; } function va(e) { return e.editable ? e.hasFocus() : Aa(e) && document.activeElement && document.activeElement.contains(e.dom); } function ya(e, t = !1) { let n = e.state.selection; if (Ea(e, n), !va(e)) return; let r = e.input.mouseDown; if (!t && D && r) { let t = e.domSelectionRange(), n = e.domObserver.currentSelection; if (t.anchorNode && n.anchorNode && Fr(t.anchorNode, t.anchorOffset, n.anchorNode, n.anchorOffset) && r.delaySelUpdate()) { e.domObserver.setCurSelection(); return; } } if (e.domObserver.disconnectSelection(), e.cursorWrapper) Ta(e); else { let { anchor: r, head: i } = n, a, o; ba && !(n instanceof S) && (n.$from.parent.inlineContent || (a = xa(e, n.from)), !n.empty && !n.$from.parent.inlineContent && (o = xa(e, n.to))), e.docView.setSelection(r, i, e, t), ba && (a && Ca(a), o && Ca(o)), n.visible ? e.dom.classList.remove("ProseMirror-hideselection") : (e.dom.classList.add("ProseMirror-hideselection"), "onselectionchange" in document && wa(e)); } e.domObserver.setCurSelection(), e.domObserver.connectSelection(); } var ba = O || D && ri < 63; function xa(e, t) { let { node: n, offset: r } = e.docView.domFromPos(t, 0), i = r < n.childNodes.length ? n.childNodes[r] : null, a = r ? n.childNodes[r - 1] : null; if (O && i && i.contentEditable == "false") return Sa(i); if ((!i || i.contentEditable == "false") && (!a || a.contentEditable == "false")) { if (i) return Sa(i); if (a) return Sa(a); } } function Sa(e) { return e.contentEditable = "true", O && e.draggable && (e.draggable = !1, e.wasDraggable = !0), e; } function Ca(e) { e.contentEditable = "false", e.wasDraggable &&= (e.draggable = !0, null); } function wa(e) { let t = e.dom.ownerDocument; t.removeEventListener("selectionchange", e.input.hideSelectionGuard); let n = e.domSelectionRange(), r = n.anchorNode, i = n.anchorOffset; t.addEventListener("selectionchange", e.input.hideSelectionGuard = () => { (n.anchorNode != r || n.anchorOffset != i) && (t.removeEventListener("selectionchange", e.input.hideSelectionGuard), setTimeout(() => { (!va(e) || e.state.selection.visible) && e.dom.classList.remove("ProseMirror-hideselection"); }, 20)); }); } function Ta(e) { let t = e.domSelection(); if (!t) return; let n = e.cursorWrapper.dom, r = n.nodeName == "IMG"; r ? t.collapse(n.parentNode, E(n) + 1) : t.collapse(n, 0), !r && !e.state.selection.visible && $r && ei <= 11 && (n.disabled = !0, n.disabled = !1); } function Ea(e, t) { if (t instanceof C) { let n = e.docView.descAt(t.from); n != e.lastSelectedViewDesc && (Da(e), n && n.selectNode(), e.lastSelectedViewDesc = n); } else Da(e); } function Da(e) { e.lastSelectedViewDesc &&= (e.lastSelectedViewDesc.parent && e.lastSelectedViewDesc.deselectNode(), void 0); } function Oa(e, t, n, r) { return e.someProp("createSelectionBetween", (r) => r(e, t, n)) || S.between(t, n, r); } function ka(e) { return e.editable && !e.hasFocus() ? !1 : Aa(e); } function Aa(e) { let t = e.domSelectionRange(); if (!t.anchorNode) return !1; try { return e.dom.contains(t.anchorNode.nodeType == 3 ? t.anchorNode.parentNode : t.anchorNode) && (e.editable || e.dom.contains(t.focusNode.nodeType == 3 ? t.focusNode.parentNode : t.focusNode)); } catch { return !1; } } function ja(e) { let t = e.docView.domFromPos(e.state.selection.anchor, 0), n = e.domSelectionRange(); return Fr(t.node, t.offset, n.anchorNode, n.anchorOffset); } function Ma(e, t) { let { $anchor: n, $head: r } = e.selection, i = t > 0 ? n.max(r) : n.min(r), a = i.parent.inlineContent ? i.depth ? e.doc.resolve(t > 0 ? i.after() : i.before()) : null : i; return a && x.findFrom(a, t); } function Na(e, t) { return e.dispatch(e.state.tr.setSelection(t).scrollIntoView()), !0; } function Pa(e, t, n) { let r = e.state.selection; if (r instanceof S) { if (n.indexOf("s") > -1) { let { $head: n } = r, i = n.textOffset ? null : t < 0 ? n.nodeBefore : n.nodeAfter; if (!i || i.isText || !i.isLeaf) return !1; let a = e.state.doc.resolve(n.pos + i.nodeSize * (t < 0 ? -1 : 1)); return Na(e, new S(r.$anchor, a)); } else if (!r.empty) return !1; else if (e.endOfTextblock(t > 0 ? "forward" : "backward")) { let n = Ma(e.state, t); return n && n instanceof C ? Na(e, n) : !1; } else if (!(ai && n.indexOf("m") > -1)) { let n = r.$head, i = n.textOffset ? null : t < 0 ? n.nodeBefore : n.nodeAfter, a; if (!i || i.isText) return !1; let o = t < 0 ? n.pos - i.nodeSize : n.pos; return i.isAtom || (a = e.docView.descAt(o)) && !a.contentDOM ? C.isSelectable(i) ? Na(e, new C(t < 0 ? e.state.doc.resolve(n.pos - i.nodeSize) : n)) : ci ? Na(e, new S(e.state.doc.resolve(t < 0 ? o : o + i.nodeSize))) : !1 : !1; } } else if (r instanceof C && r.node.isInline) return Na(e, new S(t > 0 ? r.$to : r.$from)); else { let n = Ma(e.state, t); return n ? Na(e, n) : !1; } } function Fa(e) { return e.nodeType == 3 ? e.nodeValue.length : e.childNodes.length; } function Ia(e, t) { let n = e.pmViewDesc; return n && n.size == 0 && (t < 0 || e.nextSibling || e.nodeName != "BR"); } function La(e, t) { return t < 0 ? Ra(e) : za(e); } function Ra(e) { let t = e.domSelectionRange(), n = t.focusNode, r = t.focusOffset; if (!n) return; let i, a, o = !1; for (ti && n.nodeType == 1 && r < Fa(n) && Ia(n.childNodes[r], -1) && (o = !0);;) if (r > 0) { if (n.nodeType != 1) break; { let e = n.childNodes[r - 1]; if (Ia(e, -1)) i = n, a = --r; else if (e.nodeType == 3) n = e, r = n.nodeValue.length; else break; } } else if (Ba(n)) break; else { let t = n.previousSibling; for (; t && Ia(t, -1);) i = n.parentNode, a = E(t), t = t.previousSibling; if (t) n = t, r = Fa(n); else { if (n = n.parentNode, n == e.dom) break; r = 0; } } o ? Ua(e, n, r) : i && Ua(e, i, a); } function za(e) { let t = e.domSelectionRange(), n = t.focusNode, r = t.focusOffset; if (!n) return; let i = Fa(n), a, o; for (;;) if (r < i) { if (n.nodeType != 1) break; let e = n.childNodes[r]; if (Ia(e, 1)) a = n, o = ++r; else break; } else if (Ba(n)) break; else { let t = n.nextSibling; for (; t && Ia(t, 1);) a = t.parentNode, o = E(t) + 1, t = t.nextSibling; if (t) n = t, r = 0, i = Fa(n); else { if (n = n.parentNode, n == e.dom) break; r = i = 0; } } a && Ua(e, a, o); } function Ba(e) { let t = e.pmViewDesc; return t && t.node && t.node.isBlock; } function Va(e, t) { for (; e && t == e.childNodes.length && !Hr(e);) t = E(e) + 1, e = e.parentNode; for (; e && t < e.childNodes.length;) { let n = e.childNodes[t]; if (n.nodeType == 3) return n; if (n.nodeType == 1 && n.contentEditable == "false") break; e = n, t = 0; } } function Ha(e, t) { for (; e && !t && !Hr(e);) t = E(e), e = e.parentNode; for (; e && t;) { let n = e.childNodes[t - 1]; if (n.nodeType == 3) return n; if (n.nodeType == 1 && n.contentEditable == "false") break; e = n, t = e.childNodes.length; } } function Ua(e, t, n) { if (t.nodeType != 3) { let e, r; (r = Va(t, n)) ? (t = r, n = 0) : (e = Ha(t, n)) && (t = e, n = e.nodeValue.length); } let r = e.domSelection(); if (!r) return; if (Ur(r)) { let e = document.createRange(); e.setEnd(t, n), e.setStart(t, n), r.removeAllRanges(), r.addRange(e); } else r.extend && r.extend(t, n); e.domObserver.setCurSelection(); let { state: i } = e; setTimeout(() => { e.state == i && ya(e); }, 50); } function Wa(e, t) { let n = e.state.doc.resolve(t); if (!(D || oi) && n.parent.inlineContent) { let r = e.coordsAtPos(t); if (t > n.start()) { let n = e.coordsAtPos(t - 1), i = (n.top + n.bottom) / 2; if (i > r.top && i < r.bottom && Math.abs(n.left - r.left) > 1) return n.left < r.left ? "ltr" : "rtl"; } if (t < n.end()) { let n = e.coordsAtPos(t + 1), i = (n.top + n.bottom) / 2; if (i > r.top && i < r.bottom && Math.abs(n.left - r.left) > 1) return n.left > r.left ? "ltr" : "rtl"; } } return getComputedStyle(e.dom).direction == "rtl" ? "rtl" : "ltr"; } function Ga(e, t, n) { let r = e.state.selection; if (r instanceof S && !r.empty || n.indexOf("s") > -1 || ai && n.indexOf("m") > -1) return !1; let { $from: i, $to: a } = r; if (!i.parent.inlineContent || e.endOfTextblock(t < 0 ? "up" : "down")) { let n = Ma(e.state, t); if (n && n instanceof C) return Na(e, n); } if (!i.parent.inlineContent) { let n = t < 0 ? i : a, o = r instanceof Tn ? x.near(n, t) : x.findFrom(n, t); return o ? Na(e, o) : !1; } return !1; } function Ka(e, t) { if (!(e.state.selection instanceof S)) return !0; let { $head: n, $anchor: r, empty: i } = e.state.selection; if (!n.sameParent(r)) return !0; if (!i) return !1; if (e.endOfTextblock(t > 0 ? "forward" : "backward")) return !0; let a = !n.textOffset && (t < 0 ? n.nodeBefore : n.nodeAfter); if (a && !a.isText) { let r = e.state.tr; return t < 0 ? r.delete(n.pos - a.nodeSize, n.pos) : r.delete(n.pos, n.pos + a.nodeSize), e.dispatch(r), !0; } return !1; } function qa(e, t, n) { e.domObserver.stop(), t.contentEditable = n, e.domObserver.start(); } function Ja(e) { if (!O || e.state.selection.$head.parentOffset > 0) return !1; let { focusNode: t, focusOffset: n } = e.domSelectionRange(); if (t && t.nodeType == 1 && n == 0 && t.firstChild && t.firstChild.contentEditable == "false") { let n = t.firstChild; qa(e, n, "true"), setTimeout(() => qa(e, n, "false"), 20); } return !1; } function Ya(e) { let t = ""; return e.ctrlKey && (t += "c"), e.metaKey && (t += "m"), e.altKey && (t += "a"), e.shiftKey && (t += "s"), t; } function Xa(e, t) { let n = t.keyCode, r = Ya(t); if (n == 8 || ai && n == 72 && r == "c") return Ka(e, -1) || La(e, -1); if (n == 46 && !t.shiftKey || ai && n == 68 && r == "c") return Ka(e, 1) || La(e, 1); if (n == 13 || n == 27) return !0; if (n == 37 || ai && n == 66 && r == "c") { let t = n == 37 ? Wa(e, e.state.selection.from) == "ltr" ? -1 : 1 : -1; return Pa(e, t, r) || La(e, t); } else if (n == 39 || ai && n == 70 && r == "c") { let t = n == 39 ? Wa(e, e.state.selection.from) == "ltr" ? 1 : -1 : 1; return Pa(e, t, r) || La(e, t); } else if (n == 38 || ai && n == 80 && r == "c") return Ga(e, -1, r) || La(e, -1); else if (n == 40 || ai && n == 78 && r == "c") return Ja(e) || Ga(e, 1, r) || La(e, 1); else if (r == (ai ? "m" : "c") && (n == 66 || n == 73 || n == 89 || n == 90)) return !0; return !1; } function Za(e, t) { e.someProp("transformCopied", (n) => { t = n(t, e); }); let n = [], { content: r, openStart: i, openEnd: a } = t; for (; i > 1 && a > 1 && r.childCount == 1 && r.firstChild.childCount == 1;) { i--, a--; let e = r.firstChild; n.push(e.type.name, e.attrs == e.type.defaultAttrs ? null : e.attrs), r = e.content; } let o = e.someProp("clipboardSerializer") || $e.fromSchema(e.state.schema), s = co(), c = s.createElement("div"); c.appendChild(o.serializeFragment(r, { document: s })); let l = c.firstChild, u, d = 0; for (; l && l.nodeType == 1 && (u = oo[l.nodeName.toLowerCase()]);) { for (let e = u.length - 1; e >= 0; e--) { let t = s.createElement(u[e]); for (; c.firstChild;) t.appendChild(c.firstChild); c.appendChild(t), d++; } l = c.firstChild; } return l && l.nodeType == 1 && l.setAttribute("data-pm-slice", `${i} ${a}${d ? ` -${d}` : ""} ${JSON.stringify(n)}`), { dom: c, text: e.someProp("clipboardTextSerializer", (n) => n(t, e)) || t.content.textBetween(0, t.content.size, "\n\n"), slice: t }; } function Qa(e, t, n, r, i) { let o = i.parent.type.spec.code, s, c; if (!n && !t) return null; let l = !!t && (r || o || !n); if (l) { if (e.someProp("transformPastedText", (n) => { t = n(t, o || r, e); }), o) return c = new d(a.from(e.state.schema.text(t.replace(/\r\n?/g, "\n"))), 0, 0), e.someProp("transformPasted", (t) => { c = t(c, e, !0); }), c; let n = e.someProp("clipboardTextParser", (n) => n(t, i, r, e)); if (n) c = n; else { let n = i.marks(), { schema: r } = e.state, a = $e.fromSchema(r); s = document.createElement("div"), t.split(/(?:\r\n?|\n)+/).forEach((e) => { let t = s.appendChild(document.createElement("p")); e && t.appendChild(a.serializeNode(r.text(e, n))); }); } } else e.someProp("transformPastedHTML", (t) => { n = t(n, e); }), s = fo(n), ci && po(s); let u = s && s.querySelector("[data-pm-slice]"), f = u && /^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(u.getAttribute("data-pm-slice") || ""); if (f && f[3]) for (let e = +f[3]; e > 0; e--) { let e = s.firstChild; for (; e && e.nodeType != 1;) e = e.nextSibling; if (!e) break; s = e; } if (c ||= (e.someProp("clipboardParser") || e.someProp("domParser") || ze.fromSchema(e.state.schema)).parseSlice(s, { preserveWhitespace: !!(l || f), context: i, ruleFromNode(e) { return e.nodeName == "BR" && !e.nextSibling && e.parentNode && !$a.test(e.parentNode.nodeName) ? { ignore: !0 } : null; } }), f) c = mo(ao(c, +f[1], +f[2]), f[4]); else if (c = d.maxOpen(eo(c.content, i), !0), c.openStart || c.openEnd) { let e = 0, t = 0; for (let t = c.content.firstChild; e < c.openStart && !t.type.spec.isolating; e++, t = t.firstChild); for (let e = c.content.lastChild; t < c.openEnd && !e.type.spec.isolating; t++, e = e.lastChild); c = ao(c, e, t); } return e.someProp("transformPasted", (t) => { c = t(c, e, l); }), c; } var $a = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i; function eo(e, t) { if (e.childCount < 2) return e; for (let n = t.depth; n >= 0; n--) { let r = t.node(n).contentMatchAt(t.index(n)), i, o = []; if (e.forEach((e) => { if (!o) return; let t = r.findWrapping(e.type), n; if (!t) return o = null; if (n = o.length && i.length && no(t, i, e, o[o.length - 1], 0)) o[o.length - 1] = n; else { o.length && (o[o.length - 1] = ro(o[o.length - 1], i.length)); let n = to(e, t); o.push(n), r = r.matchType(n.type), i = t; } }), o) return a.from(o); } return e; } function to(e, t, n = 0) { for (let r = t.length - 1; r >= n; r--) e = t[r].create(null, a.from(e)); return e; } function no(e, t, n, r, i) { if (i < e.length && i < t.length && e[i] == t[i]) { let o = no(e, t, n, r.lastChild, i + 1); if (o) return r.copy(r.content.replaceChild(r.childCount - 1, o)); if (r.contentMatchAt(r.childCount).matchType(i == e.length - 1 ? n.type : e[i + 1])) return r.copy(r.content.append(a.from(to(n, e, i + 1)))); } } function ro(e, t) { if (t == 0) return e; let n = e.content.replaceChild(e.childCount - 1, ro(e.lastChild, t - 1)), r = e.contentMatchAt(e.childCount).fillBefore(a.empty, !0); return e.copy(n.append(r)); } function io(e, t, n, r, i, o) { let s = t < 0 ? e.firstChild : e.lastChild, c = s.content; return e.childCount > 1 && (o = 0), i < r - 1 && (c = io(c, t, n, r, i + 1, o)), i >= n && (c = t < 0 ? s.contentMatchAt(0).fillBefore(c, o <= i).append(c) : c.append(s.contentMatchAt(s.childCount).fillBefore(a.empty, !0))), e.replaceChild(t < 0 ? 0 : e.childCount - 1, s.copy(c)); } function ao(e, t, n) { return t < e.openStart && (e = new d(io(e.content, -1, t, e.openStart, 0, e.openEnd), t, e.openEnd)), n < e.openEnd && (e = new d(io(e.content, 1, n, e.openEnd, 0, 0), e.openStart, n)), e; } var oo = { thead: ["table"], tbody: ["table"], tfoot: ["table"], caption: ["table"], colgroup: ["table"], col: ["table", "colgroup"], tr: ["table", "tbody"], td: [ "table", "tbody", "tr" ], th: [ "table", "tbody", "tr" ] }, so = null; function co() { return so ||= document.implementation.createHTMLDocument("title"); } var lo = null; function uo(e) { let t = window.trustedTypes; return t ? (lo ||= t.defaultPolicy || t.createPolicy("ProseMirrorClipboard", { createHTML: (e) => e }), lo.createHTML(e)) : e; } function fo(e) { let t = /^(\s*]*>)*/.exec(e); t && (e = e.slice(t[0].length)); let n = co().createElement("div"), r = /<([a-z][^>\s]+)/i.exec(e), i; if ((i = r && oo[r[1].toLowerCase()]) && (e = i.map((e) => "<" + e + ">").join("") + e + i.map((e) => "" + e + ">").reverse().join("")), n.innerHTML = uo(e), i) for (let e = 0; e < i.length; e++) n = n.querySelector(i[e]) || n; return n; } function po(e) { let t = e.querySelectorAll(D ? "span:not([class]):not([style])" : "span.Apple-converted-space"); for (let n = 0; n < t.length; n++) { let r = t[n]; r.childNodes.length == 1 && r.textContent == "\xA0" && r.parentNode && r.parentNode.replaceChild(e.ownerDocument.createTextNode(" "), r); } } function mo(e, t) { if (!e.size) return e; let n = e.content.firstChild.type.schema, r; try { r = JSON.parse(t); } catch { return e; } let { content: i, openStart: o, openEnd: s } = e; for (let e = r.length - 2; e >= 0; e -= 2) { let t = n.nodes[r[e]]; if (!t || t.hasRequiredAttrs()) break; i = a.from(t.create(r[e + 1], i)), o++, s++; } return new d(i, o, s); } var ho = {}, go = {}, _o = { touchstart: !0, touchmove: !0 }, vo = class { constructor() { this.shiftKey = !1, this.mouseDown = null, this.lastKeyCode = null, this.lastKeyCodeTime = 0, this.lastClick = { time: 0, x: 0, y: 0, type: "", button: 0 }, this.lastSelectionOrigin = null, this.lastSelectionTime = 0, this.lastIOSEnter = 0, this.lastIOSEnterFallbackTimeout = -1, this.lastFocus = 0, this.lastTouch = 0, this.lastChromeDelete = 0, this.composing = !1, this.compositionNode = null, this.composingTimeout = -1, this.compositionNodes = [], this.compositionEndedAt = -2e8, this.compositionID = 1, this.badSafariComposition = !1, this.compositionPendingChanges = 0, this.domChangeCount = 0, this.eventHandlers = Object.create(null), this.hideSelectionGuard = null; } }; function yo(e) { for (let t in ho) { let n = ho[t]; e.dom.addEventListener(t, e.input.eventHandlers[t] = (t) => { wo(e, t) && !Co(e, t) && (e.editable || !(t.type in go)) && n(e, t); }, _o[t] ? { passive: !0 } : void 0); } O && e.dom.addEventListener("input", () => null), So(e); } function bo(e, t) { e.input.lastSelectionOrigin = t, e.input.lastSelectionTime = Date.now(); } function xo(e) { e.input.mouseDown && e.input.mouseDown.done(), e.domObserver.stop(); for (let t in e.input.eventHandlers) e.dom.removeEventListener(t, e.input.eventHandlers[t]); clearTimeout(e.input.composingTimeout), clearTimeout(e.input.lastIOSEnterFallbackTimeout); } function So(e) { e.someProp("handleDOMEvents", (t) => { for (let n in t) e.input.eventHandlers[n] || e.dom.addEventListener(n, e.input.eventHandlers[n] = (t) => Co(e, t)); }); } function Co(e, t) { return e.someProp("handleDOMEvents", (n) => { let r = n[t.type]; return r ? r(e, t) || t.defaultPrevented : !1; }); } function wo(e, t) { if (!t.bubbles) return !0; if (t.defaultPrevented) return !1; for (let n = t.target; n != e.dom; n = n.parentNode) if (!n || n.nodeType == 11 || n.pmViewDesc && n.pmViewDesc.stopEvent(t)) return !1; return !0; } function To(e, t) { !Co(e, t) && ho[t.type] && (e.editable || !(t.type in go)) && ho[t.type](e, t); } go.keydown = (e, t) => { let n = t; if (e.input.shiftKey = n.keyCode == 16 || n.shiftKey, !Ho(e) && (e.input.lastKeyCode = n.keyCode, e.input.lastKeyCodeTime = Date.now(), !(si && D && n.keyCode == 13))) if (n.keyCode != 229 && e.domObserver.forceFlush(), ii && n.keyCode == 13 && !n.ctrlKey && !n.altKey && !n.metaKey) { let t = Date.now(); e.input.lastIOSEnter = t, e.input.lastIOSEnterFallbackTimeout = setTimeout(() => { e.input.lastIOSEnter == t && (e.someProp("handleKeyDown", (t) => t(e, Wr(13, "Enter"))), e.input.lastIOSEnter = 0); }, 200); } else e.someProp("handleKeyDown", (t) => t(e, n)) || Xa(e, n) ? n.preventDefault() : bo(e, "key"); }, go.keyup = (e, t) => { t.keyCode == 16 && (e.input.shiftKey = !1); }, go.keypress = (e, t) => { let n = t; if (Ho(e) || !n.charCode || n.ctrlKey && !n.altKey || ai && n.metaKey) return; if (e.someProp("handleKeyPress", (t) => t(e, n))) { n.preventDefault(); return; } let r = e.state.selection; if (!(r instanceof S) || !r.$from.sameParent(r.$to)) { let t = String.fromCharCode(n.charCode), i = () => e.state.tr.insertText(t).scrollIntoView(); !/[\r\n]/.test(t) && !e.someProp("handleTextInput", (n) => n(e, r.$from.pos, r.$to.pos, t, i)) && e.dispatch(i()), n.preventDefault(); } }; function Eo(e) { return { left: e.clientX, top: e.clientY }; } function Do(e, t) { let n = t.x - e.clientX, r = t.y - e.clientY; return n * n + r * r < 100; } function Oo(e, t, n, r, i) { if (r == -1) return !1; let a = e.state.doc.resolve(r); for (let r = a.depth + 1; r > 0; r--) if (e.someProp(t, (t) => r > a.depth ? t(e, n, a.nodeAfter, a.before(r), i, !0) : t(e, n, a.node(r), a.before(r), i, !1))) return !0; return !1; } function ko(e, t, n) { if (e.focused || e.focus(), e.state.selection.eq(t)) return; let r = e.state.tr.setSelection(t); n == "pointer" && r.setMeta("pointer", !0), e.dispatch(r); } function Ao(e, t) { if (t == -1) return !1; let n = e.state.doc.resolve(t), r = n.nodeAfter; return r && r.isAtom && C.isSelectable(r) ? (ko(e, new C(n), "pointer"), !0) : !1; } function jo(e, t) { if (t == -1) return !1; let n = e.state.selection, r, i; n instanceof C && (r = n.node); let a = e.state.doc.resolve(t); for (let e = a.depth + 1; e > 0; e--) { let t = e > a.depth ? a.nodeAfter : a.node(e); if (C.isSelectable(t)) { i = r && n.$from.depth > 0 && e >= n.$from.depth && a.before(n.$from.depth + 1) == n.$from.pos ? a.before(n.$from.depth) : a.before(e); break; } } return i == null ? !1 : (ko(e, C.create(e.state.doc, i), "pointer"), !0); } function Mo(e, t, n, r, i) { return Oo(e, "handleClickOn", t, n, r) || e.someProp("handleClick", (n) => n(e, t, r)) || (i ? jo(e, n) : Ao(e, n)); } function No(e, t, n, r) { return Oo(e, "handleDoubleClickOn", t, n, r) || e.someProp("handleDoubleClick", (n) => n(e, t, r)); } function Po(e, t, n, r) { return Oo(e, "handleTripleClickOn", t, n, r) || e.someProp("handleTripleClick", (n) => n(e, t, r)) || Fo(e, n, r); } function Fo(e, t, n) { if (n.button != 0) return !1; let r = Io(e, t, !0), i = e.state.doc; return r ? (ko(e, r, "pointer"), r instanceof S && i.eq(e.state.doc) && (e.input.mouseDown = new Vo(e, r)), !0) : !1; } function Io(e, t, n) { let r = e.state.doc; if (t == -1) return r.inlineContent ? S.create(r, 0, r.content.size) : null; let i = r.resolve(t); for (let e = i.depth + 1; e > 0; e--) { let t = e > i.depth ? i.nodeAfter : i.node(e), a = i.before(e); if (t.inlineContent) return S.create(r, a + 1, a + 1 + t.content.size); if (n && C.isSelectable(t)) return C.create(r, a); } return null; } function Lo(e) { return Jo(e); } var Ro = ai ? "metaKey" : "ctrlKey"; ho.mousedown = (e, t) => { let n = t; e.input.shiftKey = n.shiftKey; let r = Lo(e), i = Date.now(), a = "singleClick"; i - e.input.lastClick.time < 500 && Do(n, e.input.lastClick) && !n[Ro] && e.input.lastClick.button == n.button && (e.input.lastClick.type == "singleClick" ? a = "doubleClick" : e.input.lastClick.type == "doubleClick" && (a = "tripleClick")), e.input.lastClick = { time: i, x: n.clientX, y: n.clientY, type: a, button: n.button }, e.input.mouseDown && e.input.mouseDown.done(); let o = e.posAtCoords(Eo(n)); o && (a == "singleClick" ? e.input.mouseDown = new Bo(e, o, n, !!r) : (a == "doubleClick" ? No : Po)(e, o.pos, o.inside, n) ? n.preventDefault() : bo(e, "pointer")); }; var zo = class { constructor(e) { this.view = e, this.mightDrag = null, e.root.addEventListener("mouseup", this.up = this.up.bind(this)), e.root.addEventListener("mousemove", this.move = this.move.bind(this)); } up(e) { this.done(); } move(e) { e.buttons == 0 && this.done(); } done() { this.view.root.removeEventListener("mouseup", this.up), this.view.root.removeEventListener("mousemove", this.move), this.view.input.mouseDown == this && (this.view.input.mouseDown = null); } delaySelUpdate() { return !1; } }, Bo = class extends zo { constructor(e, t, n, r) { super(e), this.pos = t, this.event = n, this.flushed = r, this.delayedSelectionSync = !1, this.startDoc = e.state.doc, this.selectNode = !!n[Ro], this.allowDefault = n.shiftKey; let i, a; if (t.inside > -1) i = e.state.doc.nodeAt(t.inside), a = t.inside; else { let n = e.state.doc.resolve(t.pos); i = n.parent, a = n.depth ? n.before() : 0; } let o = r ? null : n.target, s = o ? e.docView.nearestDesc(o, !0) : null; this.target = s && s.nodeDOM.nodeType == 1 ? s.nodeDOM : null; let { selection: c } = e.state; n.button == 0 && (i.type.spec.draggable && i.type.spec.selectable !== !1 || c instanceof C && c.from <= a && c.to > a) && (this.mightDrag = { node: i, pos: a, addAttr: !!(this.target && !this.target.draggable), setUneditable: !!(this.target && ti && !this.target.hasAttribute("contentEditable")) }), this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable) && (this.view.domObserver.stop(), this.mightDrag.addAttr && (this.target.draggable = !0), this.mightDrag.setUneditable && setTimeout(() => { this.view.input.mouseDown == this && this.target.setAttribute("contentEditable", "false"); }, 20), this.view.domObserver.start()), bo(e, "pointer"); } done() { super.done(), this.mightDrag && this.target && (this.view.domObserver.stop(), this.mightDrag.addAttr && this.target.removeAttribute("draggable"), this.mightDrag.setUneditable && this.target.removeAttribute("contentEditable"), this.view.domObserver.start()), this.delayedSelectionSync && setTimeout(() => { this.view.isDestroyed || ya(this.view); }); } up(e) { if (this.done(), !this.view.dom.contains(e.target)) return; let t = this.pos; this.view.state.doc != this.startDoc && (t = this.view.posAtCoords(Eo(e))), this.updateAllowDefault(e), this.allowDefault || !t ? bo(this.view, "pointer") : Mo(this.view, t.pos, t.inside, e, this.selectNode) ? e.preventDefault() : e.button == 0 && (this.flushed || O && this.mightDrag && !this.mightDrag.node.isAtom || D && !this.view.state.selection.visible && Math.min(Math.abs(t.pos - this.view.state.selection.from), Math.abs(t.pos - this.view.state.selection.to)) <= 2) ? (ko(this.view, x.near(this.view.state.doc.resolve(t.pos)), "pointer"), e.preventDefault()) : bo(this.view, "pointer"); } move(e) { this.updateAllowDefault(e), bo(this.view, "pointer"), super.move(e); } updateAllowDefault(e) { !this.allowDefault && (Math.abs(this.event.x - e.clientX) > 4 || Math.abs(this.event.y - e.clientY) > 4) && (this.allowDefault = !0); } delaySelUpdate() { return this.allowDefault ? (this.delayedSelectionSync = !0, !0) : !1; } }, Vo = class extends zo { constructor(e, t) { super(e), this.startSelection = t, this.startDoc = e.state.doc; } move(e) { if (e.buttons == 0 || this.view.isDestroyed || !this.view.state.doc.eq(this.startDoc)) { this.done(); return; } e.preventDefault(), bo(this.view, "pointer"); let t = this.view.posAtCoords(Eo(e)), n = t && Io(this.view, t.inside, !1); if (!n) return; let { doc: r } = this.view.state, i = this.startSelection, [a, o] = n.from < i.from ? [i.to, n.from] : [i.from, n.to]; ko(this.view, S.create(r, a, o), "pointer"); } }; ho.touchstart = (e) => { e.input.lastTouch = Date.now(), Lo(e), bo(e, "pointer"); }, ho.touchmove = (e) => { e.input.lastTouch = Date.now(), bo(e, "pointer"); }, ho.contextmenu = (e) => Lo(e); function Ho(e, t) { return e.composing ? !0 : O && Math.abs(Date.now() - e.input.compositionEndedAt) < 500 ? (e.input.compositionEndedAt = -2e8, !0) : !1; } var Uo = si ? 5e3 : -1; go.compositionstart = go.compositionupdate = (e) => { if (!e.composing) { e.domObserver.flush(); let { state: t } = e, n = t.selection.$to; if (t.selection instanceof S && (t.storedMarks || !n.textOffset && n.parentOffset && n.nodeBefore.marks.some((e) => e.type.spec.inclusive === !1) || D && oi && Wo(e))) e.markCursor = e.state.storedMarks || n.marks(), Jo(e, !0), e.markCursor = null; else if (Jo(e, !t.selection.empty), ti && t.selection.empty && n.parentOffset && !n.textOffset && n.nodeBefore.marks.length) { let t = e.domSelectionRange(); for (let n = t.focusNode, r = t.focusOffset; n && n.nodeType == 1 && r != 0;) { let t = r < 0 ? n.lastChild : n.childNodes[r - 1]; if (!t) break; if (t.nodeType == 3) { let n = e.domSelection(); n && n.collapse(t, t.nodeValue.length); break; } else n = t, r = -1; } } e.input.composing = !0; } Go(e, Uo); }; function Wo(e) { let { focusNode: t, focusOffset: n } = e.domSelectionRange(); if (!t || t.nodeType != 1 || n >= t.childNodes.length) return !1; let r = t.childNodes[n]; return r.nodeType == 1 && r.contentEditable == "false"; } go.compositionend = (e, t) => { e.composing && (e.input.composing = !1, e.input.compositionEndedAt = Date.now(), e.input.compositionPendingChanges = e.domObserver.pendingRecords().length ? e.input.compositionID : 0, e.input.compositionNode = null, e.input.badSafariComposition ? e.domObserver.forceFlush() : e.input.compositionPendingChanges && Promise.resolve().then(() => e.domObserver.flush()), e.input.compositionID++, Go(e, 20)); }; function Go(e, t) { clearTimeout(e.input.composingTimeout), t > -1 && (e.input.composingTimeout = setTimeout(() => Jo(e), t)); } function Ko(e) { for (e.composing && (e.input.composing = !1, e.input.compositionEndedAt = Date.now()); e.input.compositionNodes.length > 0;) e.input.compositionNodes.pop().markParentsDirty(); } function qo(e) { let t = e.domSelectionRange(); if (!t.focusNode) return null; let n = zr(t.focusNode, t.focusOffset), r = Br(t.focusNode, t.focusOffset); if (n && r && n != r) { let t = r.pmViewDesc, i = e.domObserver.lastChangedTextNode; if (n == i || r == i) return i; if (!t || !t.isText(r.nodeValue)) return r; if (e.input.compositionNode == r) { let e = n.pmViewDesc; if (!(!e || !e.isText(n.nodeValue))) return r; } } return n || r; } function Jo(e, t = !1) { if (!(si && e.domObserver.flushingSoon >= 0)) { if (e.domObserver.forceFlush(), Ko(e), t || e.docView && e.docView.dirty) { let n = _a(e), r = e.state.selection; return n && !n.eq(r) ? e.dispatch(e.state.tr.setSelection(n)) : (e.markCursor || t) && !r.$from.node(r.$from.sharedDepth(r.to)).inlineContent ? e.dispatch(e.state.tr.deleteSelection()) : e.updateState(e.state), !0; } return !1; } } function Yo(e, t) { if (!e.dom.parentNode) return; let n = e.dom.parentNode.appendChild(document.createElement("div")); n.appendChild(t), n.style.cssText = "position: fixed; left: -10000px; top: 10px"; let r = getSelection(), i = document.createRange(); i.selectNodeContents(t), e.dom.blur(), r.removeAllRanges(), r.addRange(i), setTimeout(() => { n.parentNode && n.parentNode.removeChild(n), e.focus(); }, 50); } var Xo = $r && ei < 15 || ii && li < 604; ho.copy = go.cut = (e, t) => { let n = t, r = e.state.selection, i = n.type == "cut"; if (r.empty) return; let a = Xo ? null : n.clipboardData, { dom: o, text: s } = Za(e, r.content()); a ? (n.preventDefault(), a.clearData(), a.setData("text/html", o.innerHTML), a.setData("text/plain", s)) : Yo(e, o), i && e.dispatch(e.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent", "cut")); }; function Zo(e) { return e.openStart == 0 && e.openEnd == 0 && e.content.childCount == 1 ? e.content.firstChild : null; } function Qo(e, t) { if (!e.dom.parentNode) return; let n = e.input.shiftKey || e.state.selection.$from.parent.type.spec.code, r = e.dom.parentNode.appendChild(document.createElement(n ? "textarea" : "div")); n || (r.contentEditable = "true"), r.style.cssText = "position: fixed; left: -10000px; top: 10px", r.focus(); let i = e.input.shiftKey && e.input.lastKeyCode != 45; setTimeout(() => { e.focus(), r.parentNode && r.parentNode.removeChild(r), n ? $o(e, r.value, null, i, t) : $o(e, r.textContent, r.innerHTML, i, t); }, 50); } function $o(e, t, n, r, i) { let a = Qa(e, t, n, r, e.state.selection.$from); if (e.someProp("handlePaste", (t) => t(e, i, a || d.empty))) return !0; if (!a) return !1; let o = Zo(a), s = o ? e.state.tr.replaceSelectionWith(o, r) : e.state.tr.replaceSelection(a); return e.dispatch(s.scrollIntoView().setMeta("paste", !0).setMeta("uiEvent", "paste")), !0; } function es(e) { let t = e.getData("text/plain") || e.getData("Text"); if (t) return t; let n = e.getData("text/uri-list"); return n ? n.replace(/\r?\n/g, " ") : ""; } go.paste = (e, t) => { let n = t; if (e.composing && !si) return; let r = Xo ? null : n.clipboardData, i = e.input.shiftKey && e.input.lastKeyCode != 45; r && $o(e, es(r), r.getData("text/html"), i, n) ? n.preventDefault() : Qo(e, n); }; var ts = class { constructor(e, t, n) { this.slice = e, this.move = t, this.node = n; } }, ns = ai ? "altKey" : "ctrlKey"; function rs(e, t) { let n; return e.someProp("dragCopies", (e) => { n ||= e(t); }), n == null ? !t[ns] : !n; } ho.dragstart = (e, t) => { let n = t, r = e.input.mouseDown; if (r && r.done(), !n.dataTransfer) return; let i = e.state.selection, a = i.empty ? null : e.posAtCoords(Eo(n)), o; if (!(a && a.pos >= i.from && a.pos <= (i instanceof C ? i.to - 1 : i.to))) { if (r && r.mightDrag) o = C.create(e.state.doc, r.mightDrag.pos); else if (n.target && n.target.nodeType == 1) { let t = e.docView.nearestDesc(n.target, !0); t && t.node.type.spec.draggable && t != e.docView && (o = C.create(e.state.doc, t.posBefore)); } } let { dom: s, text: c, slice: l } = Za(e, (o || e.state.selection).content()); (!n.dataTransfer.files.length || !D || ri > 120) && n.dataTransfer.clearData(), n.dataTransfer.setData(Xo ? "Text" : "text/html", s.innerHTML), n.dataTransfer.effectAllowed = "copyMove", Xo || n.dataTransfer.setData("text/plain", c), e.dragging = new ts(l, rs(e, n), o); }, ho.dragend = (e) => { let t = e.dragging; window.setTimeout(() => { e.dragging == t && (e.dragging = null); }, 50); }, go.dragover = go.dragenter = (e, t) => t.preventDefault(), go.drop = (e, t) => { try { is(e, t, e.dragging); } finally { e.dragging = null; } }; function is(e, t, n) { if (!t.dataTransfer) return; let r = e.posAtCoords(Eo(t)); if (!r) return; let i = e.state.doc.resolve(r.pos), a = n && n.slice; a ? e.someProp("transformPasted", (t) => { a = t(a, e, !1); }) : a = Qa(e, es(t.dataTransfer), Xo ? null : t.dataTransfer.getData("text/html"), !1, i); let o = !!(n && rs(e, t)); if (e.someProp("handleDrop", (n) => n(e, t, a || d.empty, o))) { t.preventDefault(); return; } if (!a) return; t.preventDefault(); let s = a ? Qt(e.state.doc, i.pos, a) : i.pos; s ??= i.pos; let c = e.state.tr; if (o) { let { node: e } = n; e ? e.replace(c) : c.deleteSelection(); } let l = c.mapping.map(s), u = a.openStart == 0 && a.openEnd == 0 && a.content.childCount == 1, f = c.doc; if (u ? c.replaceRangeWith(l, l, a.content.firstChild) : c.replaceRange(l, l, a), c.doc.eq(f)) return; let p = c.doc.resolve(l); if (u && C.isSelectable(a.content.firstChild) && p.nodeAfter && p.nodeAfter.sameMarkup(a.content.firstChild)) c.setSelection(new C(p)); else { let t = c.mapping.map(s); c.mapping.maps[c.mapping.maps.length - 1].forEach((e, n, r, i) => t = i), c.setSelection(Oa(e, p, c.doc.resolve(t))); } e.focus(), e.dispatch(c.setMeta("uiEvent", "drop")); } ho.focus = (e) => { e.input.lastFocus = Date.now(), e.focused || (e.domObserver.stop(), e.dom.classList.add("ProseMirror-focused"), e.domObserver.start(), e.focused = !0, setTimeout(() => { e.docView && e.hasFocus() && !e.domObserver.currentSelection.eq(e.domSelectionRange()) && ya(e); }, 20)); }, ho.blur = (e, t) => { let n = t; e.focused &&= (e.domObserver.stop(), e.dom.classList.remove("ProseMirror-focused"), e.domObserver.start(), n.relatedTarget && e.dom.contains(n.relatedTarget) && e.domObserver.currentSelection.clear(), !1); }, ho.beforeinput = (e, t) => { if (D && si && t.inputType == "deleteContentBackward") { e.domObserver.flushSoon(); let { domChangeCount: t } = e.input; setTimeout(() => { if (e.input.domChangeCount != t || (e.dom.blur(), e.focus(), e.someProp("handleKeyDown", (t) => t(e, Wr(8, "Backspace"))))) return; let { $cursor: n } = e.state.selection; n && n.pos > 0 && e.dispatch(e.state.tr.delete(n.pos - 1, n.pos).scrollIntoView()); }, 50); } }; for (let e in go) ho[e] = go[e]; function as(e, t) { if (e == t) return !0; for (let n in e) if (e[n] !== t[n]) return !1; for (let n in t) if (!(n in e)) return !1; return !0; } var ss = class e { constructor(e, t) { this.toDOM = e, this.spec = t || fs, this.side = this.spec.side || 0; } map(e, t, n, r) { let { pos: i, deleted: a } = e.mapResult(t.from + r, this.side < 0 ? -1 : 1); return a ? null : new us(i - n, i - n, this); } valid() { return !0; } eq(t) { return this == t || t instanceof e && (this.spec.key && this.spec.key == t.spec.key || this.toDOM == t.toDOM && as(this.spec, t.spec)); } destroy(e) { this.spec.destroy && this.spec.destroy(e); } }, cs = class e { constructor(e, t) { this.attrs = e, this.spec = t || fs; } map(e, t, n, r) { let i = e.map(t.from + r, this.spec.inclusiveStart ? -1 : 1) - n, a = e.map(t.to + r, this.spec.inclusiveEnd ? 1 : -1) - n; return i >= a ? null : new us(i, a, this); } valid(e, t) { return t.from < t.to; } eq(t) { return this == t || t instanceof e && as(this.attrs, t.attrs) && as(this.spec, t.spec); } static is(t) { return t.type instanceof e; } destroy() {} }, ls = class e { constructor(e, t) { this.attrs = e, this.spec = t || fs; } map(e, t, n, r) { let i = e.mapResult(t.from + r, 1); if (i.deleted) return null; let a = e.mapResult(t.to + r, -1); return a.deleted || a.pos <= i.pos ? null : new us(i.pos - n, a.pos - n, this); } valid(e, t) { let { index: n, offset: r } = e.content.findIndex(t.from), i; return r == t.from && !(i = e.child(n)).isText && r + i.nodeSize == t.to; } eq(t) { return this == t || t instanceof e && as(this.attrs, t.attrs) && as(this.spec, t.spec); } destroy() {} }, us = class e { constructor(e, t, n) { this.from = e, this.to = t, this.type = n; } copy(t, n) { return new e(t, n, this.type); } eq(e, t = 0) { return this.type.eq(e.type) && this.from + t == e.from && this.to + t == e.to; } map(e, t, n) { return this.type.map(e, this, t, n); } static widget(t, n, r) { return new e(t, t, new ss(n, r)); } static inline(t, n, r, i) { return new e(t, n, new cs(r, i)); } static node(t, n, r, i) { return new e(t, n, new ls(r, i)); } get spec() { return this.type.spec; } get inline() { return this.type instanceof cs; } get widget() { return this.type instanceof ss; } }, ds = [], fs = {}, ps = class e { constructor(e, t) { this.local = e.length ? e : ds, this.children = t.length ? t : ds; } static create(e, t) { return t.length ? bs(t, e, 0, fs) : k; } find(e, t, n) { let r = []; return this.findInner(e ?? 0, t ?? 1e9, r, 0, n), r; } findInner(e, t, n, r, i) { for (let a = 0; a < this.local.length; a++) { let o = this.local[a]; o.from <= t && o.to >= e && (!i || i(o.spec)) && n.push(o.copy(o.from + r, o.to + r)); } for (let a = 0; a < this.children.length; a += 3) if (this.children[a] < t && this.children[a + 1] > e) { let o = this.children[a] + 1; this.children[a + 2].findInner(e - o, t - o, n, r + o, i); } } map(e, t, n) { return this == k || e.maps.length == 0 ? this : this.mapInner(e, t, 0, 0, n || fs); } mapInner(t, n, r, i, a) { let o; for (let e = 0; e < this.local.length; e++) { let s = this.local[e].map(t, r, i); s && s.type.valid(n, s) ? (o ||= []).push(s) : a.onRemove && a.onRemove(this.local[e].spec); } return this.children.length ? hs(this.children, o || [], t, n, r, i, a) : o ? new e(o.sort(xs), ds) : k; } add(t, n) { return n.length ? this == k ? e.create(t, n) : this.addInner(t, n, 0) : this; } addInner(t, n, r) { let i, a = 0; t.forEach((e, t) => { let o = t + r, s; if (s = vs(n, e, o)) { for (i ||= this.children.slice(); a < i.length && i[a] < t;) a += 3; i[a] == t ? i[a + 2] = i[a + 2].addInner(e, s, o + 1) : i.splice(a, 0, t, t + e.nodeSize, bs(s, e, o + 1, fs)), a += 3; } }); let o = gs(a ? ys(n) : n, -r); for (let e = 0; e < o.length; e++) o[e].type.valid(t, o[e]) || o.splice(e--, 1); return new e(o.length ? this.local.concat(o).sort(xs) : this.local, i || this.children); } remove(e) { return e.length == 0 || this == k ? this : this.removeInner(e, 0); } removeInner(t, n) { let r = this.children, i = this.local; for (let e = 0; e < r.length; e += 3) { let i, a = r[e] + n, o = r[e + 1] + n; for (let e = 0, n; e < t.length; e++) (n = t[e]) && n.from > a && n.to < o && (t[e] = null, (i ||= []).push(n)); if (!i) continue; r == this.children && (r = this.children.slice()); let s = r[e + 2].removeInner(i, a + 1); s == k ? (r.splice(e, 3), e -= 3) : r[e + 2] = s; } if (i.length) { for (let e = 0, r; e < t.length; e++) if (r = t[e]) for (let e = 0; e < i.length; e++) i[e].eq(r, n) && (i == this.local && (i = this.local.slice()), i.splice(e--, 1)); } return r == this.children && i == this.local ? this : i.length || r.length ? new e(i, r) : k; } forChild(t, n) { if (this == k) return this; if (n.isLeaf) return e.empty; let r, i; for (let e = 0; e < this.children.length; e += 3) if (this.children[e] >= t) { this.children[e] == t && (r = this.children[e + 2]); break; } let a = t + 1, o = a + n.content.size; for (let e = 0; e < this.local.length; e++) { let t = this.local[e]; if (t.from < o && t.to > a && t.type instanceof cs) { let e = Math.max(a, t.from) - a, n = Math.min(o, t.to) - a; e < n && (i ||= []).push(t.copy(e, n)); } } if (i) { let t = new e(i.sort(xs), ds); return r ? new ms([t, r]) : t; } return r || k; } eq(t) { if (this == t) return !0; if (!(t instanceof e) || this.local.length != t.local.length || this.children.length != t.children.length) return !1; for (let e = 0; e < this.local.length; e++) if (!this.local[e].eq(t.local[e])) return !1; for (let e = 0; e < this.children.length; e += 3) if (this.children[e] != t.children[e] || this.children[e + 1] != t.children[e + 1] || !this.children[e + 2].eq(t.children[e + 2])) return !1; return !0; } locals(e) { return Ss(this.localsInner(e)); } localsInner(e) { if (this == k) return ds; if (e.inlineContent || !this.local.some(cs.is)) return this.local; let t = []; for (let e = 0; e < this.local.length; e++) this.local[e].type instanceof cs || t.push(this.local[e]); return t; } forEachSet(e) { e(this); } }; ps.empty = new ps([], []), ps.removeOverlap = Ss; var k = ps.empty, ms = class e { constructor(e) { this.members = e; } map(t, n) { let r = this.members.map((e) => e.map(t, n, fs)); return e.from(r); } forChild(t, n) { if (n.isLeaf) return ps.empty; let r = []; for (let i = 0; i < this.members.length; i++) { let a = this.members[i].forChild(t, n); a != k && (a instanceof e ? r = r.concat(a.members) : r.push(a)); } return e.from(r); } eq(t) { if (!(t instanceof e) || t.members.length != this.members.length) return !1; for (let e = 0; e < this.members.length; e++) if (!this.members[e].eq(t.members[e])) return !1; return !0; } locals(e) { let t, n = !0; for (let r = 0; r < this.members.length; r++) { let i = this.members[r].localsInner(e); if (i.length) if (!t) t = i; else { n &&= (t = t.slice(), !1); for (let e = 0; e < i.length; e++) t.push(i[e]); } } return t ? Ss(n ? t : t.sort(xs)) : ds; } static from(t) { switch (t.length) { case 0: return k; case 1: return t[0]; default: return new e(t.every((e) => e instanceof ps) ? t : t.reduce((e, t) => e.concat(t instanceof ps ? t : t.members), [])); } } forEachSet(e) { for (let t = 0; t < this.members.length; t++) this.members[t].forEachSet(e); } }; function hs(e, t, n, r, i, a, o) { let s = e.slice(); for (let e = 0, t = a; e < n.maps.length; e++) { let r = 0; n.maps[e].forEach((e, n, i, a) => { let o = a - i - (n - e); for (let i = 0; i < s.length; i += 3) { let a = s[i + 1]; if (a < 0 || e > a + t - r) continue; let c = s[i] + t - r; n >= c ? s[i + 1] = e <= c ? -2 : -1 : e >= t && o && (s[i] += o, s[i + 1] += o); } r += o; }), t = n.maps[e].map(t, -1); } let c = !1; for (let t = 0; t < s.length; t += 3) if (s[t + 1] < 0) { if (s[t + 1] == -2) { c = !0, s[t + 1] = -1; continue; } let l = n.map(e[t] + a), u = l - i; if (u < 0 || u >= r.content.size) { c = !0; continue; } let d = n.map(e[t + 1] + a, -1) - i, { index: f, offset: p } = r.content.findIndex(u), m = r.maybeChild(f); if (m && p == u && p + m.nodeSize == d) { let r = s[t + 2].mapInner(n, m, l + 1, e[t] + a + 1, o); r == k ? (s[t + 1] = -2, c = !0) : (s[t] = u, s[t + 1] = d, s[t + 2] = r); } else c = !0; } if (c) { let c = bs(_s(s, e, t, n, i, a, o), r, 0, o); t = c.local; for (let e = 0; e < s.length; e += 3) s[e + 1] < 0 && (s.splice(e, 3), e -= 3); for (let e = 0, t = 0; e < c.children.length; e += 3) { let n = c.children[e]; for (; t < s.length && s[t] < n;) t += 3; s.splice(t, 0, c.children[e], c.children[e + 1], c.children[e + 2]); } } return new ps(t.sort(xs), s); } function gs(e, t) { if (!t || !e.length) return e; let n = []; for (let r = 0; r < e.length; r++) { let i = e[r]; n.push(new us(i.from + t, i.to + t, i.type)); } return n; } function _s(e, t, n, r, i, a, o) { function s(e, t) { for (let a = 0; a < e.local.length; a++) { let s = e.local[a].map(r, i, t); s ? n.push(s) : o.onRemove && o.onRemove(e.local[a].spec); } for (let n = 0; n < e.children.length; n += 3) s(e.children[n + 2], e.children[n] + t + 1); } for (let n = 0; n < e.length; n += 3) e[n + 1] == -1 && s(e[n + 2], t[n] + a + 1); return n; } function vs(e, t, n) { if (t.isLeaf) return null; let r = n + t.nodeSize, i = null; for (let t = 0, a; t < e.length; t++) (a = e[t]) && a.from > n && a.to < r && ((i ||= []).push(a), e[t] = null); return i; } function ys(e) { let t = []; for (let n = 0; n < e.length; n++) e[n] != null && t.push(e[n]); return t; } function bs(e, t, n, r) { let i = [], a = !1; t.forEach((t, o) => { let s = vs(e, t, o + n); if (s) { a = !0; let e = bs(s, t, n + o + 1, r); e != k && i.push(o, o + t.nodeSize, e); } }); let o = gs(a ? ys(e) : e, -n).sort(xs); for (let e = 0; e < o.length; e++) o[e].type.valid(t, o[e]) || (r.onRemove && r.onRemove(o[e].spec), o.splice(e--, 1)); return o.length || i.length ? new ps(o, i) : k; } function xs(e, t) { return e.from - t.from || e.to - t.to; } function Ss(e) { let t = e; for (let n = 0; n < t.length - 1; n++) { let r = t[n]; if (r.from != r.to) for (let i = n + 1; i < t.length; i++) { let a = t[i]; if (a.from == r.from) { a.to != r.to && (t == e && (t = e.slice()), t[i] = a.copy(a.from, r.to), Cs(t, i + 1, a.copy(r.to, a.to))); continue; } else { a.from < r.to && (t == e && (t = e.slice()), t[n] = r.copy(r.from, a.from), Cs(t, i, r.copy(a.from, r.to))); break; } } } return t; } function Cs(e, t, n) { for (; t < e.length && xs(n, e[t]) > 0;) t++; e.splice(t, 0, n); } function ws(e) { let t = []; return e.someProp("decorations", (n) => { let r = n(e.state); r && r != k && t.push(r); }), e.cursorWrapper && t.push(ps.create(e.state.doc, [e.cursorWrapper.deco])), ms.from(t); } var Ts = { childList: !0, characterData: !0, characterDataOldValue: !0, attributes: !0, attributeOldValue: !0, subtree: !0 }, Es = $r && ei <= 11, Ds = class { constructor() { this.anchorNode = null, this.anchorOffset = 0, this.focusNode = null, this.focusOffset = 0; } set(e) { this.anchorNode = e.anchorNode, this.anchorOffset = e.anchorOffset, this.focusNode = e.focusNode, this.focusOffset = e.focusOffset; } clear() { this.anchorNode = this.focusNode = null; } eq(e) { return e.anchorNode == this.anchorNode && e.anchorOffset == this.anchorOffset && e.focusNode == this.focusNode && e.focusOffset == this.focusOffset; } }, Os = class { constructor(e, t) { this.view = e, this.handleDOMChange = t, this.queue = [], this.flushingSoon = -1, this.observer = null, this.currentSelection = new Ds(), this.onCharData = null, this.suppressingSelectionUpdates = !1, this.lastChangedTextNode = null, this.observer = window.MutationObserver && new window.MutationObserver((t) => { for (let e = 0; e < t.length; e++) this.queue.push(t[e]); $r && ei <= 11 && t.some((e) => e.type == "childList" && e.removedNodes.length || e.type == "characterData" && e.oldValue.length > e.target.nodeValue.length) ? this.flushSoon() : O && e.composing && t.some((e) => e.type == "childList" && e.target.nodeName == "TR") ? (e.input.badSafariComposition = !0, this.flushSoon()) : this.flush(); }), Es && (this.onCharData = (e) => { this.queue.push({ target: e.target, type: "characterData", oldValue: e.prevValue }), this.flushSoon(); }), this.onSelectionChange = this.onSelectionChange.bind(this); } flushSoon() { this.flushingSoon < 0 && (this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1, this.flush(); }, 20)); } forceFlush() { this.flushingSoon > -1 && (window.clearTimeout(this.flushingSoon), this.flushingSoon = -1, this.flush()); } start() { this.observer && (this.observer.takeRecords(), this.observer.observe(this.view.dom, Ts)), this.onCharData && this.view.dom.addEventListener("DOMCharacterDataModified", this.onCharData), this.connectSelection(); } stop() { if (this.observer) { let e = this.observer.takeRecords(); if (e.length) { for (let t = 0; t < e.length; t++) this.queue.push(e[t]); window.setTimeout(() => this.flush(), 20); } this.observer.disconnect(); } this.onCharData && this.view.dom.removeEventListener("DOMCharacterDataModified", this.onCharData), this.disconnectSelection(); } connectSelection() { this.view.dom.ownerDocument.addEventListener("selectionchange", this.onSelectionChange); } disconnectSelection() { this.view.dom.ownerDocument.removeEventListener("selectionchange", this.onSelectionChange); } suppressSelectionUpdates() { this.suppressingSelectionUpdates = !0, setTimeout(() => this.suppressingSelectionUpdates = !1, 50); } onSelectionChange() { if (ka(this.view)) { if (this.suppressingSelectionUpdates) return ya(this.view); if ($r && ei <= 11 && !this.view.state.selection.empty) { let e = this.view.domSelectionRange(); if (e.focusNode && Fr(e.focusNode, e.focusOffset, e.anchorNode, e.anchorOffset)) return this.flushSoon(); } this.flush(); } } setCurSelection() { this.currentSelection.set(this.view.domSelectionRange()); } ignoreSelectionChange(e) { if (!e.focusNode) return !0; let t = /* @__PURE__ */ new Set(), n; for (let n = e.focusNode; n; n = jr(n)) t.add(n); for (let r = e.anchorNode; r; r = jr(r)) if (t.has(r)) { n = r; break; } let r = n && this.view.docView.nearestDesc(n); if (r && r.ignoreMutation({ type: "selection", target: n.nodeType == 3 ? n.parentNode : n })) return this.setCurSelection(), !0; } pendingRecords() { if (this.observer) for (let e of this.observer.takeRecords()) this.queue.push(e); return this.queue; } flush() { let { view: e } = this; if (!e.docView || this.flushingSoon > -1) return; let t = this.pendingRecords(); t.length && (this.queue = []); let n = e.domSelectionRange(), r = !this.suppressingSelectionUpdates && !this.currentSelection.eq(n) && ka(e) && !this.ignoreSelectionChange(n), i = -1, a = -1, o = !1, s = []; if (e.editable) for (let e = 0; e < t.length; e++) { let n = this.registerMutation(t[e], s); n && (i = i < 0 ? n.from : Math.min(n.from, i), a = a < 0 ? n.to : Math.max(n.to, a), n.typeOver && (o = !0)); } if (s.some((e) => e.nodeName == "BR") && (e.input.lastKeyCode == 8 || e.input.lastKeyCode == 46 || D && (e.composing || e.input.compositionEndedAt > Date.now() - 50) && t.some((e) => e.type == "childList" && e.removedNodes.length))) { for (let e of s) if (e.nodeName == "BR" && e.parentNode) { let t = e.nextSibling; for (; t && t.nodeType == 1;) { if (t.contentEditable == "false") { e.parentNode.removeChild(e); break; } t = t.firstChild; } } } else if (ti && s.length) { let t = s.filter((e) => e.nodeName == "BR"); if (t.length == 2) { let [e, n] = t; e.parentNode && e.parentNode.parentNode == n.parentNode ? n.remove() : e.remove(); } else { let { focusNode: n } = this.currentSelection; for (let r of t) { let t = r.parentNode; t && t.nodeName == "LI" && (!n || Ps(e, n) != t) && r.remove(); } } } let c = null; i < 0 && r && e.input.lastFocus > Date.now() - 200 && Math.max(e.input.lastTouch, e.input.lastClick.time) < Date.now() - 300 && Ur(n) && (c = _a(e)) && c.eq(x.near(e.state.doc.resolve(0), 1)) ? (e.input.lastFocus = 0, ya(e), this.currentSelection.set(n), e.scrollToSelection()) : (i > -1 || r) && (i > -1 && (e.docView.markDirty(i, a), js(e)), e.input.badSafariComposition && (e.input.badSafariComposition = !1, Fs(e, s)), this.handleDOMChange(i, a, o, s), e.docView && e.docView.dirty ? e.updateState(e.state) : this.currentSelection.eq(n) || ya(e), this.currentSelection.set(n)); } registerMutation(e, t) { if (t.indexOf(e.target) > -1) return null; let n = this.view.docView.nearestDesc(e.target); if (e.type == "attributes" && (n == this.view.docView || e.attributeName == "contenteditable" || e.attributeName == "style" && !e.oldValue && !e.target.getAttribute("style")) || !n || n.ignoreMutation(e)) return null; if (e.type == "childList") { for (let n = 0; n < e.addedNodes.length; n++) { let r = e.addedNodes[n]; t.push(r), r.nodeType == 3 && (this.lastChangedTextNode = r); } if (n.contentDOM && n.contentDOM != n.dom && !n.contentDOM.contains(e.target)) return { from: n.posBefore, to: n.posAfter }; let r = e.previousSibling, i = e.nextSibling; if ($r && ei <= 11 && e.addedNodes.length) for (let t = 0; t < e.addedNodes.length; t++) { let { previousSibling: n, nextSibling: a } = e.addedNodes[t]; (!n || Array.prototype.indexOf.call(e.addedNodes, n) < 0) && (r = n), (!a || Array.prototype.indexOf.call(e.addedNodes, a) < 0) && (i = a); } let a = r && r.parentNode == e.target ? E(r) + 1 : 0, o = n.localPosFromDOM(e.target, a, -1), s = i && i.parentNode == e.target ? E(i) : e.target.childNodes.length; return { from: o, to: n.localPosFromDOM(e.target, s, 1) }; } else if (e.type == "attributes") return { from: n.posAtStart - n.border, to: n.posAtEnd + n.border }; else return this.lastChangedTextNode = e.target, { from: n.posAtStart, to: n.posAtEnd, typeOver: e.target.nodeValue == e.oldValue }; } }, ks = /* @__PURE__ */ new WeakMap(), As = !1; function js(e) { if (!ks.has(e) && (ks.set(e, null), [ "normal", "nowrap", "pre-line" ].indexOf(getComputedStyle(e.dom).whiteSpace) !== -1)) { if (e.requiresGeckoHackNode = ti, As) return; console.warn("ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package."), As = !0; } } function Ms(e, t) { let n = t.startContainer, r = t.startOffset, i = t.endContainer, a = t.endOffset, o = e.domAtPos(e.state.selection.anchor); return Fr(o.node, o.offset, i, a) && ([n, r, i, a] = [ i, a, n, r ]), { anchorNode: n, anchorOffset: r, focusNode: i, focusOffset: a }; } function Ns(e, t) { if (t.getComposedRanges) { let n = t.getComposedRanges(e.root)[0]; if (n) return Ms(e, n); } let n; function r(e) { e.preventDefault(), e.stopImmediatePropagation(), n = e.getTargetRanges()[0]; } return e.dom.addEventListener("beforeinput", r, !0), document.execCommand("indent"), e.dom.removeEventListener("beforeinput", r, !0), n ? Ms(e, n) : null; } function Ps(e, t) { for (let n = t.parentNode; n && n != e.dom; n = n.parentNode) { let t = e.docView.nearestDesc(n, !0); if (t && t.node.isBlock) return n; } return null; } function Fs(e, t) { let { focusNode: n, focusOffset: r } = e.domSelectionRange(); for (let i of t) if (i.parentNode?.nodeName == "TR") { let t = i.nextSibling; for (; t && t.nodeName != "TD" && t.nodeName != "TH";) t = t.nextSibling; if (t) { let a = t; for (;;) { let e = a.firstChild; if (!e || e.nodeType != 1 || e.contentEditable == "false" || /^(BR|IMG)$/.test(e.nodeName)) break; a = e; } a.insertBefore(i, a.firstChild), n == i && e.domSelection().collapse(i, r); } else i.parentNode.removeChild(i); } } function Is(e, t, n) { let { node: r, fromOffset: i, toOffset: a, from: o, to: s } = e.docView.parseRange(t, n), c = e.domSelectionRange(), l, u = c.anchorNode; if (u && e.dom.contains(u.nodeType == 1 ? u : u.parentNode) && (l = [{ node: u, offset: c.anchorOffset }], Ur(c) || l.push({ node: c.focusNode, offset: c.focusOffset })), D && e.input.lastKeyCode === 8) for (let e = a; e > i; e--) { let t = r.childNodes[e - 1], n = t.pmViewDesc; if (t.nodeName == "BR" && !n) { a = e; break; } if (!n || n.size) break; } let d = e.state.doc, f = e.someProp("domParser") || ze.fromSchema(e.state.schema), p = d.resolve(o), m = null, h = f.parse(r, { topNode: p.parent, topMatch: p.parent.contentMatchAt(p.index()), topOpen: !0, from: i, to: a, preserveWhitespace: p.parent.type.whitespace == "pre" ? "full" : !0, findPositions: l, ruleFromNode: Ls, context: p }); if (l && l[0].pos != null) { let e = l[0].pos, t = l[1] && l[1].pos; t ??= e, m = { anchor: e + o, head: t + o }; } return { doc: h, sel: m, from: o, to: s }; } function Ls(e) { let t = e.pmViewDesc; if (t) return t.parseRule(); if (e.nodeName == "BR" && e.parentNode) { if (O && /^(ul|ol)$/i.test(e.parentNode.nodeName)) { let e = document.createElement("div"); return e.appendChild(document.createElement("li")), { skip: e }; } else if (e.parentNode.lastChild == e || O && /^(tr|table)$/i.test(e.parentNode.nodeName)) return { ignore: !0 }; } else if (e.nodeName == "IMG" && e.getAttribute("mark-placeholder")) return { ignore: !0 }; return null; } var Rs = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i; function zs(e, t, n, r, i) { let a = e.input.compositionPendingChanges || (e.composing ? e.input.compositionID : 0); if (e.input.compositionPendingChanges = 0, t < 0) { let t = e.input.lastSelectionTime > Date.now() - 50 ? e.input.lastSelectionOrigin : null, n = _a(e, t); if (n && !e.state.selection.eq(n)) { if (D && si && e.input.lastKeyCode === 13 && Date.now() - 100 < e.input.lastKeyCodeTime && e.someProp("handleKeyDown", (t) => t(e, Wr(13, "Enter")))) return; let r = e.state.tr.setSelection(n); t == "pointer" ? r.setMeta("pointer", !0) : t == "key" && r.scrollIntoView(), a && r.setMeta("composition", a), e.dispatch(r); } return; } let o = e.state.doc.resolve(t), s = o.sharedDepth(n); t = o.before(s + 1), n = e.state.doc.resolve(n).after(s + 1); let c = e.state.selection, l = Is(e, t, n), u = e.state.doc, d = u.slice(l.from, l.to), f, p; e.input.lastKeyCode === 8 && Date.now() - 100 < e.input.lastKeyCodeTime ? (f = e.state.selection.to, p = "end") : (f = e.state.selection.from, p = "start"), e.input.lastKeyCode = null; let m = Ws(d.content, l.doc.content, l.from, f, p); if (m && e.input.domChangeCount++, (ii && e.input.lastIOSEnter > Date.now() - 225 || si) && i.some((e) => e.nodeType == 1 && !Rs.test(e.nodeName)) && (!m || m.endA >= m.endB) && e.someProp("handleKeyDown", (t) => t(e, Wr(13, "Enter")))) { e.input.lastIOSEnter = 0; return; } if (!m) if (r && c instanceof S && !c.empty && c.$head.sameParent(c.$anchor) && !e.composing && !(l.sel && l.sel.anchor != l.sel.head)) m = { start: c.from, endA: c.to, endB: c.to }; else { if (l.sel) { let t = Bs(e, e.state.doc, l.sel); if (t && !t.eq(e.state.selection)) { let n = e.state.tr.setSelection(t); a && n.setMeta("composition", a), e.dispatch(n); } } return; } e.state.selection.from < e.state.selection.to && m.start == m.endB && e.state.selection instanceof S && (m.start > e.state.selection.from && m.start <= e.state.selection.from + 2 && e.state.selection.from >= l.from ? m.start = e.state.selection.from : m.endA < e.state.selection.to && m.endA >= e.state.selection.to - 2 && e.state.selection.to <= l.to && (m.endB += e.state.selection.to - m.endA, m.endA = e.state.selection.to)), $r && ei <= 11 && m.endB == m.start + 1 && m.endA == m.start && m.start > l.from && l.doc.textBetween(m.start - l.from - 1, m.start - l.from + 1) == " \xA0" && (m.start--, m.endA--, m.endB--); let h = l.doc.resolveNoCache(m.start - l.from), g = l.doc.resolveNoCache(m.endB - l.from), _ = u.resolve(m.start), ee = h.sameParent(g) && h.parent.inlineContent && _.end() >= m.endA; if ((ii && e.input.lastIOSEnter > Date.now() - 225 && (!ee || i.some((e) => e.nodeName == "DIV" || e.nodeName == "P")) || !ee && h.pos < l.doc.content.size && (!h.sameParent(g) || !h.parent.inlineContent) && h.pos < g.pos && !/\S/.test(l.doc.textBetween(h.pos, g.pos, "", ""))) && e.someProp("handleKeyDown", (t) => t(e, Wr(13, "Enter")))) { e.input.lastIOSEnter = 0; return; } if (e.state.selection.anchor > m.start && Hs(u, m.start, m.endA, h, g) && e.someProp("handleKeyDown", (t) => t(e, Wr(8, "Backspace")))) { si && D && e.domObserver.suppressSelectionUpdates(); return; } D && m.endB == m.start && (e.input.lastChromeDelete = Date.now()), si && !ee && h.start() != g.start() && g.parentOffset == 0 && h.depth == g.depth && l.sel && l.sel.anchor == l.sel.head && l.sel.head == m.endA && (m.endB -= 2, g = l.doc.resolveNoCache(m.endB - l.from), setTimeout(() => { e.someProp("handleKeyDown", function(t) { return t(e, Wr(13, "Enter")); }); }, 20)); let v = m.start, y = m.endA, te = (t) => { let n = t || e.state.tr.replace(v, y, l.doc.slice(m.start - l.from, m.endB - l.from)); if (l.sel) { let t = Bs(e, n.doc, l.sel); t && !(D && e.composing && t.empty && (m.start != m.endB || e.input.lastChromeDelete < Date.now() - 100) && (t.head == v || t.head == n.mapping.map(y) - 1) || $r && t.empty && t.head == v) && n.setSelection(t); } return a && n.setMeta("composition", a), n.scrollIntoView(); }, ne; if (ee) if (h.pos == g.pos) { $r && ei <= 11 && h.parentOffset == 0 && (e.domObserver.suppressSelectionUpdates(), setTimeout(() => ya(e), 20)); let t = te(e.state.tr.delete(v, y)), n = u.resolve(m.start).marksAcross(u.resolve(m.endA)); n && t.ensureMarks(n), e.dispatch(t); } else if (m.endA == m.endB && (ne = Vs(h.parent.content.cut(h.parentOffset, g.parentOffset), _.parent.content.cut(_.parentOffset, m.endA - _.start())))) { let t = te(e.state.tr); ne.type == "add" ? t.addMark(v, y, ne.mark) : t.removeMark(v, y, ne.mark), e.dispatch(t); } else if (h.parent.child(h.index()).isText && h.index() == g.index() - +!g.textOffset) { let t = h.parent.textBetween(h.parentOffset, g.parentOffset), n = () => te(e.state.tr.insertText(t, v, y)); e.someProp("handleTextInput", (r) => r(e, v, y, t, n)) || e.dispatch(n()); } else e.dispatch(te()); else e.dispatch(te()); } function Bs(e, t, n) { return Math.max(n.anchor, n.head) > t.content.size ? null : Oa(e, t.resolve(n.anchor), t.resolve(n.head)); } function Vs(e, t) { let n = e.firstChild.marks, r = t.firstChild.marks, i = n, o = r, s, c, l; for (let e = 0; e < r.length; e++) i = r[e].removeFromSet(i); for (let e = 0; e < n.length; e++) o = n[e].removeFromSet(o); if (i.length == 1 && o.length == 0) c = i[0], s = "add", l = (e) => e.mark(c.addToSet(e.marks)); else if (i.length == 0 && o.length == 1) c = o[0], s = "remove", l = (e) => e.mark(c.removeFromSet(e.marks)); else return null; let u = []; for (let e = 0; e < t.childCount; e++) u.push(l(t.child(e))); if (a.from(u).eq(e)) return { mark: c, type: s }; } function Hs(e, t, n, r, i) { if (n - t <= i.pos - r.pos || Us(r, !0, !1) < i.pos) return !1; let a = e.resolve(t); if (!r.parent.isTextblock) { let e = a.nodeAfter; return e != null && n == t + e.nodeSize; } if (a.parentOffset < a.parent.content.size || !a.parent.isTextblock) return !1; let o = e.resolve(Us(a, !0, !0)); return !o.parent.isTextblock || o.pos > n || Us(o, !0, !1) < n ? !1 : r.parent.content.cut(r.parentOffset).eq(o.parent.content); } function Us(e, t, n) { let r = e.depth, i = t ? e.end() : e.pos; for (; r > 0 && (t || e.indexAfter(r) == e.node(r).childCount);) r--, i++, t = !1; if (n) { let t = e.node(r).maybeChild(e.indexAfter(r)); for (; t && !t.isLeaf;) t = t.firstChild, i++; } return i; } function Ws(e, t, n, r, i) { let a = e.findDiffStart(t, n), o = n + e.size, s = n + t.size; if (a == null) return null; let { a: c, b: l } = e.findDiffEnd(t, o, s); if (i == "end") { let e = Math.max(0, a - Math.min(c, l)); r -= c + e - a; } if (c < a && o < s) { let e = r <= a && r >= c ? a - r : 0; a -= e, l = a + (l - c), c = a; } else if (l < a) { let e = r <= a && r >= l ? a - r : 0; a -= e, c = a + (c - l), l = a; } return { start: a, endA: c, endB: l }; } var Gs = class { constructor(e, t) { this._root = null, this.focused = !1, this.trackWrites = null, this.mounted = !1, this.markCursor = null, this.cursorWrapper = null, this.lastSelectedViewDesc = void 0, this.input = new vo(), this.prevDirectPlugins = [], this.pluginViews = [], this.requiresGeckoHackNode = !1, this.dragging = null, this._props = t, this.state = t.state, this.directPlugins = t.plugins || [], this.directPlugins.forEach(Qs), this.dispatch = this.dispatch.bind(this), this.dom = e && e.mount || document.createElement("div"), e && (e.appendChild ? e.appendChild(this.dom) : typeof e == "function" ? e(this.dom) : e.mount && (this.mounted = !0)), this.editable = Js(this), qs(this), this.nodeViews = Xs(this), this.docView = Zi(this.state.doc, Ks(this), ws(this), this.dom, this), this.domObserver = new Os(this, (e, t, n, r) => zs(this, e, t, n, r)), this.domObserver.start(), yo(this), this.updatePluginViews(); } get composing() { return this.input.composing; } get props() { if (this._props.state != this.state) { let e = this._props; this._props = {}; for (let t in e) this._props[t] = e[t]; this._props.state = this.state; } return this._props; } update(e) { e.handleDOMEvents != this._props.handleDOMEvents && So(this); let t = this._props; this._props = e, e.plugins && (e.plugins.forEach(Qs), this.directPlugins = e.plugins), this.updateStateInner(e.state, t); } setProps(e) { let t = {}; for (let e in this._props) t[e] = this._props[e]; t.state = this.state; for (let n in e) t[n] = e[n]; this.update(t); } updateState(e) { this.updateStateInner(e, this._props); } updateStateInner(e, t) { let n = this.state, r = !1, i = !1; e.storedMarks && this.composing && (Ko(this), i = !0), this.state = e; let a = n.plugins != e.plugins || this._props.plugins != t.plugins; if (a || this._props.plugins != t.plugins || this._props.nodeViews != t.nodeViews) { let e = Xs(this); Zs(e, this.nodeViews) && (this.nodeViews = e, r = !0); } (a || t.handleDOMEvents != this._props.handleDOMEvents) && So(this), this.editable = Js(this), qs(this); let o = ws(this), s = Ks(this), c = n.plugins != e.plugins && !n.doc.eq(e.doc) ? "reset" : e.scrollToSelection > n.scrollToSelection ? "to selection" : "preserve", l = r || !this.docView.matchesNode(e.doc, s, o); (l || !e.selection.eq(n.selection)) && (i = !0); let u = c == "preserve" && i && this.dom.style.overflowAnchor == null && mi(this); if (i) { this.domObserver.stop(); let t = l && ($r || D) && !this.composing && !n.selection.empty && !e.selection.empty && Ys(n.selection, e.selection); if (l) { let n = D ? this.trackWrites = this.domSelectionRange().focusNode : null; this.composing && (this.input.compositionNode = qo(this)), (r || !this.docView.update(e.doc, s, o, this)) && (this.docView.updateOuterDeco(s), this.docView.destroy(), this.docView = Zi(e.doc, s, o, this.dom, this)), n && (!this.trackWrites || !this.dom.contains(this.trackWrites)) && (t = !0); } let i = this.input.mouseDown; t || !(i && this.domObserver.currentSelection.eq(this.domSelectionRange()) && ja(this) && i.delaySelUpdate()) ? ya(this, t) : (Ea(this, e.selection), this.domObserver.setCurSelection()), this.domObserver.start(); } this.updatePluginViews(n), this.dragging?.node && !n.doc.eq(e.doc) && this.updateDraggedNode(this.dragging, n), c == "reset" ? this.dom.scrollTop = 0 : c == "to selection" ? this.scrollToSelection() : u && gi(u); } scrollToSelection() { let e = this.domSelectionRange().focusNode; if (!(!e || !this.dom.contains(e.nodeType == 1 ? e : e.parentNode)) && !this.someProp("handleScrollToSelection", (e) => e(this))) if (this.state.selection instanceof C) { let t = this.docView.domAfterPos(this.state.selection.from); t.nodeType == 1 && pi(this, t.getBoundingClientRect(), e); } else pi(this, this.coordsAtPos(this.state.selection.head, 1), e); } destroyPluginViews() { let e; for (; e = this.pluginViews.pop();) e.destroy && e.destroy(); } updatePluginViews(e) { if (!e || e.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) { this.prevDirectPlugins = this.directPlugins, this.destroyPluginViews(); for (let e = 0; e < this.directPlugins.length; e++) { let t = this.directPlugins[e]; t.spec.view && this.pluginViews.push(t.spec.view(this)); } for (let e = 0; e < this.state.plugins.length; e++) { let t = this.state.plugins[e]; t.spec.view && this.pluginViews.push(t.spec.view(this)); } } else for (let t = 0; t < this.pluginViews.length; t++) { let n = this.pluginViews[t]; n.update && n.update(this, e); } } updateDraggedNode(e, t) { let n = e.node, r = -1; if (n.from < this.state.doc.content.size && this.state.doc.nodeAt(n.from) == n.node) r = n.from; else { let e = n.from + (this.state.doc.content.size - t.doc.content.size); (e > 0 && e < this.state.doc.content.size && this.state.doc.nodeAt(e)) == n.node && (r = e); } this.dragging = new ts(e.slice, e.move, r < 0 ? void 0 : C.create(this.state.doc, r)); } someProp(e, t) { let n = this._props && this._props[e], r; if (n != null && (r = t ? t(n) : n)) return r; for (let n = 0; n < this.directPlugins.length; n++) { let i = this.directPlugins[n].props[e]; if (i != null && (r = t ? t(i) : i)) return r; } let i = this.state.plugins; if (i) for (let n = 0; n < i.length; n++) { let a = i[n].props[e]; if (a != null && (r = t ? t(a) : a)) return r; } } hasFocus() { if ($r) { let e = this.root.activeElement; if (e == this.dom) return !0; if (!e || !this.dom.contains(e)) return !1; for (; e && this.dom != e && this.dom.contains(e);) { if (e.contentEditable == "false") return !1; e = e.parentElement; } return !0; } return this.root.activeElement == this.dom; } focus() { this.domObserver.stop(), this.editable && yi(this.dom), ya(this), this.domObserver.start(); } get root() { let e = this._root; if (e == null) { for (let e = this.dom.parentNode; e; e = e.parentNode) if (e.nodeType == 9 || e.nodeType == 11 && e.host) return e.getSelection || (Object.getPrototypeOf(e).getSelection = () => e.ownerDocument.getSelection()), this._root = e; } return e || document; } updateRoot() { this._root = null; } posAtCoords(e) { return Di(this, e); } coordsAtPos(e, t = 1) { return ji(this, e, t); } domAtPos(e, t = 0) { return this.docView.domFromPos(e, t); } nodeDOM(e) { let t = this.docView.descAt(e); return t ? t.nodeDOM : null; } posAtDOM(e, t, n = -1) { let r = this.docView.posFromDOM(e, t, n); if (r == null) throw RangeError("DOM position not inside the editor"); return r; } endOfTextblock(e, t) { return Vi(this, t || this.state, e); } pasteHTML(e, t) { return $o(this, "", e, !1, t || new ClipboardEvent("paste")); } pasteText(e, t) { return $o(this, e, null, !0, t || new ClipboardEvent("paste")); } serializeForClipboard(e) { return Za(this, e); } destroy() { this.docView && (xo(this), this.destroyPluginViews(), this.mounted ? (this.docView.update(this.state.doc, [], ws(this), this), this.dom.textContent = "") : this.dom.parentNode && this.dom.parentNode.removeChild(this.dom), this.docView.destroy(), this.docView = null, Pr()); } get isDestroyed() { return this.docView == null; } dispatchEvent(e) { return To(this, e); } domSelectionRange() { let e = this.domSelection(); return e ? O && this.root.nodeType === 11 && Gr(this.dom.ownerDocument) == this.dom && Ns(this, e) || e : { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 }; } domSelection() { return this.root.getSelection(); } }; Gs.prototype.dispatch = function(e) { let t = this._props.dispatchTransaction; t ? t.call(this, e) : this.updateState(this.state.apply(e)); }; function Ks(e) { let t = Object.create(null); return t.class = "ProseMirror", t.contenteditable = String(e.editable), e.someProp("attributes", (n) => { if (typeof n == "function" && (n = n(e.state)), n) for (let e in n) e == "class" ? t.class += " " + n[e] : e == "style" ? t.style = (t.style ? t.style + ";" : "") + n[e] : !t[e] && e != "contenteditable" && e != "nodeName" && (t[e] = String(n[e])); }), t.translate ||= "no", [us.node(0, e.state.doc.content.size, t)]; } function qs(e) { if (e.markCursor) { let t = document.createElement("img"); t.className = "ProseMirror-separator", t.setAttribute("mark-placeholder", "true"), t.setAttribute("alt", ""), e.cursorWrapper = { dom: t, deco: us.widget(e.state.selection.from, t, { raw: !0, marks: e.markCursor }) }; } else e.cursorWrapper = null; } function Js(e) { return !e.someProp("editable", (t) => t(e.state) === !1); } function Ys(e, t) { let n = Math.min(e.$anchor.sharedDepth(e.head), t.$anchor.sharedDepth(t.head)); return e.$anchor.start(n) != t.$anchor.start(n); } function Xs(e) { let t = Object.create(null); function n(e) { for (let n in e) Object.prototype.hasOwnProperty.call(t, n) || (t[n] = e[n]); } return e.someProp("nodeViews", n), e.someProp("markViews", n), t; } function Zs(e, t) { let n = 0, r = 0; for (let r in e) { if (e[r] != t[r]) return !0; n++; } for (let e in t) r++; return n != r; } function Qs(e) { if (e.spec.state || e.spec.filterTransaction || e.spec.appendTransaction) throw RangeError("Plugins passed directly to the view must not have a state component"); } for (var $s = { 8: "Backspace", 9: "Tab", 10: "Enter", 12: "NumLock", 13: "Enter", 16: "Shift", 17: "Control", 18: "Alt", 20: "CapsLock", 27: "Escape", 32: " ", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "ArrowLeft", 38: "ArrowUp", 39: "ArrowRight", 40: "ArrowDown", 44: "PrintScreen", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Meta", 92: "Meta", 106: "*", 107: "+", 108: ",", 109: "-", 110: ".", 111: "/", 144: "NumLock", 145: "ScrollLock", 160: "Shift", 161: "Shift", 162: "Control", 163: "Control", 164: "Alt", 165: "Alt", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'" }, ec = { 48: ")", 49: "!", 50: "@", 51: "#", 52: "$", 53: "%", 54: "^", 55: "&", 56: "*", 57: "(", 59: ":", 61: "+", 173: "_", 186: ":", 187: "+", 188: "<", 189: "_", 190: ">", 191: "?", 192: "~", 219: "{", 220: "|", 221: "}", 222: "\"" }, tc = typeof navigator < "u" && /Mac/.test(navigator.platform), nc = typeof navigator < "u" && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent), A = 0; A < 10; A++) $s[48 + A] = $s[96 + A] = String(A); for (var A = 1; A <= 24; A++) $s[A + 111] = "F" + A; for (var A = 65; A <= 90; A++) $s[A] = String.fromCharCode(A + 32), ec[A] = String.fromCharCode(A); for (var rc in $s) ec.hasOwnProperty(rc) || (ec[rc] = $s[rc]); function ic(e) { var t = !(tc && e.metaKey && e.shiftKey && !e.ctrlKey && !e.altKey || nc && e.shiftKey && e.key && e.key.length == 1 || e.key == "Unidentified") && e.key || (e.shiftKey ? ec : $s)[e.keyCode] || e.key || "Unidentified"; return t == "Esc" && (t = "Escape"), t == "Del" && (t = "Delete"), t == "Left" && (t = "ArrowLeft"), t == "Up" && (t = "ArrowUp"), t == "Right" && (t = "ArrowRight"), t == "Down" && (t = "ArrowDown"), t; } //#endregion //#region node_modules/.pnpm/prosemirror-keymap@1.2.3/node_modules/prosemirror-keymap/dist/index.js var ac = typeof navigator < "u" && /Mac|iP(hone|[oa]d)/.test(navigator.platform), oc = typeof navigator < "u" && /Win/.test(navigator.platform); function sc(e) { let t = e.split(/-(?!$)/), n = t[t.length - 1]; n == "Space" && (n = " "); let r, i, a, o; for (let e = 0; e < t.length - 1; e++) { let n = t[e]; if (/^(cmd|meta|m)$/i.test(n)) o = !0; else if (/^a(lt)?$/i.test(n)) r = !0; else if (/^(c|ctrl|control)$/i.test(n)) i = !0; else if (/^s(hift)?$/i.test(n)) a = !0; else if (/^mod$/i.test(n)) ac ? o = !0 : i = !0; else throw Error("Unrecognized modifier name: " + n); } return r && (n = "Alt-" + n), i && (n = "Ctrl-" + n), o && (n = "Meta-" + n), a && (n = "Shift-" + n), n; } function cc(e) { let t = Object.create(null); for (let n in e) t[sc(n)] = e[n]; return t; } function lc(e, t, n = !0) { return t.altKey && (e = "Alt-" + e), t.ctrlKey && (e = "Ctrl-" + e), t.metaKey && (e = "Meta-" + e), n && t.shiftKey && (e = "Shift-" + e), e; } function uc(e) { return new w({ props: { handleKeyDown: dc(e) } }); } function dc(e) { let t = cc(e); return function(e, n) { let r = ic(n), i, a = t[lc(r, n)]; if (a && a(e.state, e.dispatch, e)) return !0; if (r.length == 1 && r != " ") { if (n.shiftKey) { let i = t[lc(r, n, !1)]; if (i && i(e.state, e.dispatch, e)) return !0; } if ((n.altKey || n.metaKey || n.ctrlKey) && !(oc && n.ctrlKey && n.altKey) && (i = $s[n.keyCode]) && i != r) { let r = t[lc(i, n)]; if (r && r(e.state, e.dispatch, e)) return !0; } } return !1; }; } //#endregion //#region node_modules/.pnpm/@tiptap+core@3.26.1_@tiptap+pm@3.26.1/node_modules/@tiptap/core/dist/index.js var fc = Object.defineProperty, pc = (e, t) => { for (var n in t) fc(e, n, { get: t[n], enumerable: !0 }); }; function mc(e) { let { state: t, transaction: n } = e, { selection: r } = n, { doc: i } = n, { storedMarks: a } = n; return { ...t, apply: t.apply.bind(t), applyTransaction: t.applyTransaction.bind(t), plugins: t.plugins, schema: t.schema, reconfigure: t.reconfigure.bind(t), toJSON: t.toJSON.bind(t), get storedMarks() { return a; }, get selection() { return r; }, get doc() { return i; }, get tr() { return r = n.selection, i = n.doc, a = n.storedMarks, n; } }; } var hc = class { constructor(e) { this.editor = e.editor, this.rawCommands = this.editor.extensionManager.commands, this.customState = e.state; } get hasCustomState() { return !!this.customState; } get state() { return this.customState || this.editor.state; } get commands() { let { rawCommands: e, editor: t, state: n } = this, { view: r } = t, { tr: i } = n, a = this.buildProps(i); return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, (...e) => { let n = t(...e)(a); return !i.getMeta("preventDispatch") && !this.hasCustomState && r.dispatch(i), n; }])); } get chain() { return () => this.createChain(); } get can() { return () => this.createCan(); } createChain(e, t = !0) { let { rawCommands: n, editor: r, state: i } = this, { view: a } = r, o = [], s = !!e, c = e || i.tr, l = () => (!s && t && !c.getMeta("preventDispatch") && !this.hasCustomState && a.dispatch(c), o.every((e) => e === !0)), u = { ...Object.fromEntries(Object.entries(n).map(([e, n]) => [e, (...e) => { let r = this.buildProps(c, t), i = n(...e)(r); return o.push(i), u; }])), run: l }; return u; } createCan(e) { let { rawCommands: t, state: n } = this, r = e || n.tr, i = this.buildProps(r, !1); return { ...Object.fromEntries(Object.entries(t).map(([e, t]) => [e, (...e) => t(...e)({ ...i, dispatch: void 0 })])), chain: () => this.createChain(r, !1) }; } buildProps(e, t = !0) { let { rawCommands: n, editor: r, state: i } = this, { view: a } = r, o = { tr: e, editor: r, view: a, state: mc({ state: i, transaction: e }), dispatch: t ? () => void 0 : void 0, chain: () => this.createChain(e, t), can: () => this.createCan(e), get commands() { return Object.fromEntries(Object.entries(n).map(([e, t]) => [e, (...e) => t(...e)(o)])); } }; return o; } }, gc = {}; pc(gc, { blur: () => _c, clearContent: () => vc, clearNodes: () => yc, command: () => bc, createParagraphNear: () => xc, cut: () => Sc, deleteCurrentNode: () => Cc, deleteNode: () => wc, deleteRange: () => Tc, deleteSelection: () => kc, enter: () => Ac, exitCode: () => jc, extendMarkRange: () => Rc, first: () => zc, focus: () => Kc, forEach: () => qc, insertContent: () => Jc, insertContentAt: () => el, joinBackward: () => rl, joinDown: () => nl, joinForward: () => il, joinItemBackward: () => al, joinItemForward: () => ol, joinTextblockBackward: () => sl, joinTextblockForward: () => cl, joinUp: () => tl, keyboardShortcut: () => dl, lift: () => pl, liftEmptyBlock: () => ml, liftListItem: () => hl, newlineInCode: () => gl, resetAttributes: () => yl, scrollIntoView: () => bl, selectAll: () => xl, selectNodeBackward: () => Sl, selectNodeForward: () => Cl, selectParentNode: () => wl, selectTextblockEnd: () => Tl, selectTextblockStart: () => El, setContent: () => Ol, setMark: () => Tu, setMeta: () => Eu, setNode: () => Du, setNodeSelection: () => Ou, setTextDirection: () => ku, setTextSelection: () => Au, sinkListItem: () => ju, splitBlock: () => Nu, splitListItem: () => Pu, toggleList: () => Ru, toggleMark: () => zu, toggleNode: () => Bu, toggleWrap: () => Vu, undoInputRule: () => Hu, unsetAllMarks: () => Uu, unsetMark: () => Wu, unsetTextDirection: () => Gu, updateAttributes: () => Ku, wrapIn: () => qu, wrapInList: () => Ju }); var _c = () => ({ editor: e, view: t }) => (requestAnimationFrame(() => { var n; e.isDestroyed || (t.dom.blur(), (n = window == null ? void 0 : window.getSelection()) == null || n.removeAllRanges()); }), !0), vc = (e = !0) => ({ commands: t }) => t.setContent("", { emitUpdate: e }), yc = () => ({ state: e, tr: t, dispatch: n }) => { let { selection: r } = t, { ranges: i } = r; return n && i.forEach(({ $from: n, $to: r }) => { e.doc.nodesBetween(n.pos, r.pos, (e, n) => { if (e.type.isText) return; let { doc: r, mapping: i } = t, a = r.resolve(i.map(n)), o = r.resolve(i.map(n + e.nodeSize)), s = a.blockRange(o); if (!s) return; let c = Mt(s); if (e.type.isTextblock) { let { defaultType: e } = a.parent.contentMatchAt(a.index()); t.setNodeMarkup(s.start, e); } (c || c === 0) && t.lift(s, c); }); }), !0; }, bc = (e) => (t) => e(t), xc = () => ({ state: e, dispatch: t }) => or(e, t), Sc = (e, t) => ({ editor: n, tr: r }) => { let { state: i } = n, a = i.doc.slice(e.from, e.to); r.deleteRange(e.from, e.to); let o = r.mapping.map(t); return r.insert(o, a.content), r.setSelection(new S(r.doc.resolve(Math.max(o - 1, 0)))), !0; }, Cc = () => ({ tr: e, dispatch: t }) => { let { selection: n } = e, r = n.$anchor.node(); if (r.content.size > 0) return !1; let i = e.selection.$anchor; for (let n = i.depth; n > 0; --n) if (i.node(n).type === r.type) { if (t) { let t = i.before(n), r = i.after(n); e.delete(t, r).scrollIntoView(); } return !0; } return !1; }; function j(e, t) { if (typeof e == "string") { if (!t.nodes[e]) throw Error(`There is no node type named '${e}'. Maybe you forgot to add the extension?`); return t.nodes[e]; } return e; } var wc = (e) => ({ tr: t, state: n, dispatch: r }) => { let i = j(e, n.schema), a = t.selection.$anchor; for (let e = a.depth; e > 0; --e) if (a.node(e).type === i) { if (r) { let n = a.before(e), r = a.after(e); t.delete(n, r).scrollIntoView(); } return !0; } return !1; }, Tc = (e) => ({ tr: t, dispatch: n }) => { let { from: r, to: i } = e; return n && t.delete(r, i), !0; }, Ec = (e) => e.content ? /^text(\*|\+)/.test(e.content) : !1, Dc = (e, t, n) => { if (!e.parent.isInline || n === "left" && e.pos > e.start() || n === "right" && e.pos < e.end()) return e.pos; let r = t.nodes[e.parent.type.name].spec; return Ec(r) ? n === "left" ? e.start() - 1 : e.end() + 1 : e.pos; }, Oc = (e, t, n) => ({ from: Dc(e, n, "left"), to: Dc(t, n, "right") }), kc = () => ({ state: e, dispatch: t }) => { let { $from: n, $to: r } = e.selection; if (e.selection.empty) return !1; let { from: i, to: a } = Oc(n, r, e.schema); return t && (e.tr.deleteRange(i, a).scrollIntoView(), t(e.tr)), !0; }, Ac = () => ({ commands: e }) => e.keyboardShortcut("Enter"), jc = () => ({ state: e, dispatch: t }) => ar(e, t); function Mc(e) { return Object.prototype.toString.call(e) === "[object RegExp]"; } function Nc(e, t, n = { strict: !0 }) { let r = Object.keys(t); return r.length ? r.every((r) => n.strict ? t[r] === e[r] : Mc(t[r]) ? t[r].test(e[r]) : t[r] === e[r]) : !0; } function Pc(e, t, n = {}) { return e.find((e) => e.type === t && Nc(Object.fromEntries(Object.keys(n).map((t) => [t, e.attrs[t]])), n)); } function Fc(e, t, n = {}) { return !!Pc(e, t, n); } function Ic(e, t, n) { if (!e || !t) return; let r = e.parent.childAfter(e.parentOffset); if ((!r.node || !r.node.marks.some((e) => e.type === t)) && (r = e.parent.childBefore(e.parentOffset)), !r.node || !r.node.marks.some((e) => e.type === t)) return; if (!n) { let e = r.node.marks.find((e) => e.type === t); e && (n = e.attrs); } if (!Pc([...r.node.marks], t, n)) return; let i = r.index, a = e.start() + r.offset, o = i + 1, s = a + r.node.nodeSize; for (; i > 0 && Fc([...e.parent.child(i - 1).marks], t, n);) --i, a -= e.parent.child(i).nodeSize; for (; o < e.parent.childCount && Fc([...e.parent.child(o).marks], t, n);) s += e.parent.child(o).nodeSize, o += 1; return { from: a, to: s }; } function Lc(e, t) { if (typeof e == "string") { if (!t.marks[e]) throw Error(`There is no mark type named '${e}'. Maybe you forgot to add the extension?`); return t.marks[e]; } return e; } var Rc = (e, t) => ({ tr: n, state: r, dispatch: i }) => { let a = Lc(e, r.schema), { doc: o, selection: s } = n, { $from: c, from: l, to: u } = s; if (i) { let e = Ic(c, a, t); if (e && e.from <= l && e.to >= u) { let t = S.create(o, e.from, e.to); n.setSelection(t); } } return !0; }, zc = (e) => (t) => { let n = typeof e == "function" ? e(t) : e; for (let e = 0; e < n.length; e += 1) if (n[e](t)) return !0; return !1; }; function Bc(e) { return e instanceof S; } function Vc(e = 0, t = 0, n = 0) { return Math.min(Math.max(e, t), n); } function Hc(e, t = null) { if (!t) return null; let n = x.atStart(e), r = x.atEnd(e); if (t === "start" || t === !0) return n; if (t === "end") return r; let i = n.from, a = r.to; return t === "all" ? S.create(e, Vc(0, i, a), Vc(e.content.size, i, a)) : S.create(e, Vc(t, i, a), Vc(t, i, a)); } function Uc() { return navigator.platform === "Android" || /android/i.test(navigator.userAgent); } function Wc() { return [ "iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod" ].includes(navigator.platform) || navigator.userAgent.includes("Mac") && "ontouchend" in document; } function Gc() { return typeof navigator < "u" ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : !1; } var Kc = (e = null, t = {}) => ({ editor: n, view: r, tr: i, dispatch: a }) => { t = { scrollIntoView: !0, ...t }; let o = () => { (Wc() || Uc()) && r.dom.focus(), Gc() && !Wc() && !Uc() && r.dom.focus({ preventScroll: !0 }), requestAnimationFrame(() => { n.isDestroyed || (r.focus(), t?.scrollIntoView && n.commands.scrollIntoView()); }); }; try { if (r.hasFocus() && e === null || e === !1) return !0; } catch { return !1; } if (a && e === null && !Bc(n.state.selection)) return o(), !0; let s = Hc(i.doc, e) || n.state.selection, c = n.state.selection.eq(s); return a && (c || i.setSelection(s), c && i.storedMarks && i.setStoredMarks(i.storedMarks), o()), !0; }, qc = (e, t) => (n) => e.every((e, r) => t(e, { ...n, index: r })), Jc = (e, t) => ({ tr: n, commands: r }) => r.insertContentAt({ from: n.selection.from, to: n.selection.to }, e, t), Yc = (e) => { let t = e.childNodes; for (let n = t.length - 1; n >= 0; --n) { let r = t[n]; r.nodeType === 3 && r.nodeValue && /^(\n\s\s|\n)$/.test(r.nodeValue) ? e.removeChild(r) : r.nodeType === 1 && Yc(r); } return e; }; function Xc(e) { if (typeof window > "u") throw Error("[tiptap error]: there is no window object available, so this function cannot be used"); let t = `
${e}`, n = new window.DOMParser().parseFromString(t, "text/html").body; return Yc(n); } function Zc(e, t, n) { if (e instanceof ue || e instanceof a) return e; n = { slice: !0, parseOptions: {}, ...n }; let r = typeof e == "object" && !!e, i = typeof e == "string"; if (r) try { if (Array.isArray(e) && e.length > 0) return a.fromArray(e.map((e) => t.nodeFromJSON(e))); let r = t.nodeFromJSON(e); return n.errorOnInvalidContent && r.check(), r; } catch (r) { if (n.errorOnInvalidContent) throw Error("[tiptap error]: Invalid JSON content", { cause: r }); return console.warn("[tiptap warn]: Invalid content.", "Passed value:", e, "Error:", r), Zc("", t, n); } if (i) { if (n.errorOnInvalidContent) { let r = !1, i = "", a = new Fe({ topNode: t.spec.topNode, marks: t.spec.marks, nodes: t.spec.nodes.append({ __tiptap__private__unknown__catch__all__node: { content: "inline*", group: "block", parseDOM: [{ tag: "*", getAttrs: (e) => (r = !0, i = typeof e == "string" ? e : e.outerHTML, null) }] } }) }); if (n.slice ? ze.fromSchema(a).parseSlice(Xc(e), n.parseOptions) : ze.fromSchema(a).parse(Xc(e), n.parseOptions), n.errorOnInvalidContent && r) throw Error("[tiptap error]: Invalid HTML content", { cause: /* @__PURE__ */ Error(`Invalid element found: ${i}`) }); } let r = ze.fromSchema(t); return n.slice ? r.parseSlice(Xc(e), n.parseOptions).content : r.parse(Xc(e), n.parseOptions); } return Zc("", t, n); } function Qc(e, t, n) { let r = e.steps.length - 1; if (r < t) return; let i = e.steps[r]; if (!(i instanceof Tt || i instanceof Et)) return; let a = e.mapping.maps[r], o = 0; a.forEach((e, t, n, r) => { o === 0 && (o = r); }), e.setSelection(x.near(e.doc.resolve(o), n)); } var $c = (e) => !("type" in e), el = (e, t, n) => ({ tr: r, dispatch: i, editor: o }) => { if (i) { n = { parseOptions: o.options.parseOptions, updateSelection: !0, applyInputRules: !1, applyPasteRules: !1, ...n }; let i, s = (e) => { o.emit("contentError", { editor: o, error: e, disableCollaboration: () => { "collaboration" in o.storage && typeof o.storage.collaboration == "object" && o.storage.collaboration && (o.storage.collaboration.isDisabled = !0); } }); }, c = { preserveWhitespace: "full", ...n.parseOptions }; if (!n.errorOnInvalidContent && !o.options.enableContentCheck && o.options.emitContentError) try { Zc(t, o.schema, { parseOptions: c, errorOnInvalidContent: !0 }); } catch (e) { s(e); } try { i = Zc(t, o.schema, { parseOptions: c, errorOnInvalidContent: n.errorOnInvalidContent ?? o.options.enableContentCheck }); } catch (e) { return s(e), !1; } let { from: l, to: u } = typeof e == "number" ? { from: e, to: e } : { from: e.from, to: e.to }, d = !0, f = !0; if (($c(i) ? i : [i]).forEach((e) => { e.check(), d = d ? e.isText && e.marks.length === 0 : !1, f = f ? e.isBlock : !1; }), l === u && f) { let { parent: e } = r.doc.resolve(l); e.isTextblock && !e.type.spec.code && !e.childCount && (--l, u += 1); } let p; if (d) { if (Array.isArray(t)) p = t.map((e) => e.text || "").join(""); else if (t instanceof a) { let e = ""; t.forEach((t) => { t.text && (e += t.text); }), p = e; } else p = typeof t == "object" && t && t.text ? t.text : t; r.insertText(p, l, u); } else { p = i; let e = r.doc.resolve(l), t = e.node(), n = e.parentOffset === 0, a = t.isText || t.isTextblock, o = t.content.size > 0; n && a && o && f && (l = Math.max(0, l - 1)), r.replaceWith(l, u, p); } n.updateSelection && Qc(r, r.steps.length - 1, -1), n.applyInputRules && r.setMeta("applyInputRules", { from: l, text: p }), n.applyPasteRules && r.setMeta("applyPasteRules", { from: l, text: p }); } return !0; }, tl = () => ({ state: e, dispatch: t }) => er(e, t), nl = () => ({ state: e, dispatch: t }) => tr(e, t), rl = () => ({ state: e, dispatch: t }) => Un(e, t), il = () => ({ state: e, dispatch: t }) => Zn(e, t), al = () => ({ state: e, dispatch: t, tr: n }) => { try { let r = Yt(e.doc, e.selection.$from.pos, -1); return r == null ? !1 : (n.join(r, 2), t && t(n), !0); } catch { return !1; } }, ol = () => ({ state: e, dispatch: t, tr: n }) => { try { let r = Yt(e.doc, e.selection.$from.pos, 1); return r == null ? !1 : (n.join(r, 2), t && t(n), !0); } catch { return !1; } }, sl = () => ({ state: e, dispatch: t }) => Wn(e, t), cl = () => ({ state: e, dispatch: t }) => Gn(e, t); function ll() { return typeof navigator < "u" ? /Mac/.test(navigator.platform) : !1; } function ul(e) { let t = e.split(/-(?!$)/), n = t[t.length - 1]; n === "Space" && (n = " "); let r, i, a, o; for (let e = 0; e < t.length - 1; e += 1) { let n = t[e]; if (/^(cmd|meta|m)$/i.test(n)) o = !0; else if (/^a(lt)?$/i.test(n)) r = !0; else if (/^(c|ctrl|control)$/i.test(n)) i = !0; else if (/^s(hift)?$/i.test(n)) a = !0; else if (/^mod$/i.test(n)) Wc() || ll() ? o = !0 : i = !0; else throw Error(`Unrecognized modifier name: ${n}`); } return r && (n = `Alt-${n}`), i && (n = `Ctrl-${n}`), o && (n = `Meta-${n}`), a && (n = `Shift-${n}`), n; } var dl = (e) => ({ editor: t, view: n, tr: r, dispatch: i }) => { let a = ul(e).split(/-(?!$)/), o = a.find((e) => ![ "Alt", "Ctrl", "Meta", "Shift" ].includes(e)), s = new KeyboardEvent("keydown", { key: o === "Space" ? " " : o, altKey: a.includes("Alt"), ctrlKey: a.includes("Ctrl"), metaKey: a.includes("Meta"), shiftKey: a.includes("Shift"), bubbles: !0, cancelable: !0 }); return t.captureTransaction(() => { n.someProp("handleKeyDown", (e) => e(n, s)); })?.steps.forEach((e) => { let t = e.map(r.mapping); t && i && r.maybeStep(t); }), !0; }; function fl(e, t, n = {}) { let { from: r, to: i, empty: a } = e.selection, o = t ? j(t, e.schema) : null, s = []; e.doc.nodesBetween(r, i, (e, t) => { if (e.isText) return; let n = Math.max(r, t), a = Math.min(i, t + e.nodeSize); s.push({ node: e, from: n, to: a }); }); let c = i - r, l = s.filter((e) => o ? o.name === e.node.type.name : !0).filter((e) => Nc(e.node.attrs, n, { strict: !1 })); return a ? !!l.length : l.reduce((e, t) => e + t.to - t.from, 0) >= c; } var pl = (e, t = {}) => ({ state: n, dispatch: r }) => fl(n, j(e, n.schema), t) ? nr(n, r) : !1, ml = () => ({ state: e, dispatch: t }) => sr(e, t), hl = (e) => ({ state: t, dispatch: n }) => Dr(j(e, t.schema))(t, n), gl = () => ({ state: e, dispatch: t }) => rr(e, t); function _l(e, t) { return t.nodes[e] ? "node" : t.marks[e] ? "mark" : null; } function vl(e, t) { let n = typeof t == "string" ? [t] : t; return Object.keys(e).reduce((t, r) => (n.includes(r) || (t[r] = e[r]), t), {}); } var yl = (e, t) => ({ tr: n, state: r, dispatch: i }) => { let a = null, o = null, s = _l(typeof e == "string" ? e : e.name, r.schema); if (!s) return !1; s === "node" && (a = j(e, r.schema)), s === "mark" && (o = Lc(e, r.schema)); let c = !1; return n.selection.ranges.forEach((e) => { r.doc.nodesBetween(e.$from.pos, e.$to.pos, (e, r) => { a && a === e.type && (c = !0, i && n.setNodeMarkup(r, void 0, vl(e.attrs, t))), o && e.marks.length && e.marks.forEach((a) => { o === a.type && (c = !0, i && n.addMark(r, r + e.nodeSize, o.create(vl(a.attrs, t)))); }); }); }), c; }, bl = () => ({ tr: e, dispatch: t }) => (t && e.scrollIntoView(), !0), xl = () => ({ tr: e, dispatch: t }) => { if (t) { let t = new Tn(e.doc); e.setSelection(t); } return !0; }, Sl = () => ({ state: e, dispatch: t }) => Jn(e, t), Cl = () => ({ state: e, dispatch: t }) => Qn(e, t), wl = () => ({ state: e, dispatch: t }) => ur(e, t), Tl = () => ({ state: e, dispatch: t }) => gr(e, t), El = () => ({ state: e, dispatch: t }) => hr(e, t); function Dl(e, t, n = {}, r = {}) { return Zc(e, t, { slice: !1, parseOptions: n, errorOnInvalidContent: r.errorOnInvalidContent }); } var Ol = (e, { errorOnInvalidContent: t, emitUpdate: n = !0, parseOptions: r = {} } = {}) => ({ editor: i, tr: a, dispatch: o, commands: s }) => { let { doc: c } = a; if (r.preserveWhitespace !== "full") { let s = Dl(e, i.schema, r, { errorOnInvalidContent: t ?? i.options.enableContentCheck }); return o && a.replaceWith(0, c.content.size, s).setMeta("preventUpdate", !n), !0; } return o && a.setMeta("preventUpdate", !n), s.insertContentAt({ from: 0, to: c.content.size }, e, { parseOptions: r, errorOnInvalidContent: t ?? i.options.enableContentCheck }); }; function kl(e, t) { let n = Lc(t, e.schema), { from: r, to: i, empty: a } = e.selection, o = []; a ? (e.storedMarks && o.push(...e.storedMarks), o.push(...e.selection.$head.marks())) : e.doc.nodesBetween(r, i, (e) => { o.push(...e.marks); }); let s = o.find((e) => e.type.name === n.name); return s ? { ...s.attrs } : {}; } function Al(e, t) { let n = new vn(e); return t.forEach((e) => { e.steps.forEach((e) => { n.step(e); }); }), n; } function jl(e) { for (let t = 0; t < e.edgeCount; t += 1) { let { type: n } = e.edge(t); if (n.isTextblock && !n.hasRequiredAttrs()) return n; } return null; } function Ml(e, t, n) { let r = []; return e.nodesBetween(t.from, t.to, (e, t) => { n(e) && r.push({ node: e, pos: t }); }), r; } function Nl(e, t) { for (let n = e.depth; n > 0; --n) { let r = e.node(n); if (t(r)) return { pos: n > 0 ? e.before(n) : 0, start: e.start(n), depth: n, node: r }; } } function Pl(e) { return (t) => Nl(t.$from, e); } function M(e, t, n) { return e.config[t] === void 0 && e.parent ? M(e.parent, t, n) : typeof e.config[t] == "function" ? e.config[t].bind({ ...n, parent: e.parent ? M(e.parent, t, n) : null }) : e.config[t]; } function Fl(e) { return e.map((e) => { let t = M(e, "addExtensions", { name: e.name, options: e.options, storage: e.storage }); return t ? [e, ...Fl(t())] : e; }).flat(10); } function Il(e, t) { let n = $e.fromSchema(t).serializeFragment(e), r = document.implementation.createHTMLDocument().createElement("div"); return r.appendChild(n), r.innerHTML; } function Ll(e) { return typeof e == "function"; } function N(e, t = void 0, ...n) { return Ll(e) ? t ? e.bind(t)(...n) : e(...n) : e; } function Rl(e = {}) { return Object.keys(e).length === 0 && e.constructor === Object; } function zl(e) { return { baseExtensions: e.filter((e) => e.type === "extension"), nodeExtensions: e.filter((e) => e.type === "node"), markExtensions: e.filter((e) => e.type === "mark") }; } function Bl(e) { let t = [], { nodeExtensions: n, markExtensions: r } = zl(e), i = [...n, ...r], a = { default: null, validate: void 0, rendered: !0, renderHTML: null, parseHTML: null, keepOnSplit: !0, isRequired: !1 }, o = n.filter((e) => e.name !== "text").map((e) => e.name), s = r.map((e) => e.name), c = [...o, ...s]; return e.forEach((e) => { let n = M(e, "addGlobalAttributes", { name: e.name, options: e.options, storage: e.storage, extensions: i }); n && n().forEach((e) => { let n; n = Array.isArray(e.types) ? e.types : e.types === "*" ? c : e.types === "nodes" ? o : e.types === "marks" ? s : [], n.forEach((n) => { Object.entries(e.attributes).forEach(([e, r]) => { t.push({ type: n, name: e, attribute: { ...a, ...r } }); }); }); }); }), i.forEach((e) => { let n = M(e, "addAttributes", { name: e.name, options: e.options, storage: e.storage }); if (!n) return; let r = n(); Object.entries(r).forEach(([n, r]) => { let i = { ...a, ...r }; typeof i?.default == "function" && (i.default = i.default()), i?.isRequired && i?.default === void 0 && delete i.default, t.push({ type: e.name, name: n, attribute: i }); }); }), t; } function Vl(e) { let t = [], n = "", r = !1, i = !1, a = 0, o = e.length; for (let s = 0; s < o; s += 1) { let o = e[s]; if (o === "'" && !i) { r = !r, n += o; continue; } if (o === "\"" && !r) { i = !i, n += o; continue; } if (!r && !i) { if (o === "(") { a += 1, n += o; continue; } if (o === ")" && a > 0) { --a, n += o; continue; } if (o === ";" && a === 0) { t.push(n), n = ""; continue; } } n += o; } return n && t.push(n), t; } function Hl(e) { let t = [], n = Vl(e || ""), r = n.length; for (let e = 0; e < r; e += 1) { let r = n[e], i = r.indexOf(":"); if (i === -1) continue; let a = r.slice(0, i).trim(), o = r.slice(i + 1).trim(); a && o && t.push([a, o]); } return t; } function P(...e) { return e.filter((e) => !!e).reduce((e, t) => { let n = { ...e }; return Object.entries(t).forEach(([e, t]) => { if (!n[e]) { n[e] = t; return; } if (e === "class") { let r = t ? String(t).split(" ") : [], i = n[e] ? n[e].split(" ") : [], a = r.filter((e) => !i.includes(e)); n[e] = [...i, ...a].join(" "); } else if (e === "style") { let r = new Map([...Hl(n[e]), ...Hl(t)]); n[e] = Array.from(r.entries()).map(([e, t]) => `${e}: ${t}`).join("; "); } else n[e] = t; }), n; }, {}); } function Ul(e, t) { return t.filter((t) => t.type === e.type.name).filter((e) => e.attribute.rendered).map((t) => t.attribute.renderHTML ? t.attribute.renderHTML(e.attrs) || {} : { [t.name]: e.attrs[t.name] }).reduce((e, t) => P(e, t), {}); } function Wl(e) { return typeof e == "string" ? e.match(/^[+-]?(?:\d*\.)?\d+$/) ? Number(e) : e === "true" ? !0 : e === "false" ? !1 : e : e; } function Gl(e, t) { return "style" in e ? e : { ...e, getAttrs: (n) => { let r = e.getAttrs ? e.getAttrs(n) : e.attrs; if (r === !1) return !1; let i = t.reduce((e, t) => { let r = t.attribute.parseHTML ? t.attribute.parseHTML(n) : Wl(n.getAttribute(t.name)); return r == null ? e : { ...e, [t.name]: r }; }, {}); return { ...r, ...i }; } }; } function Kl(e) { return Object.fromEntries(Object.entries(e).filter(([e, t]) => e === "attrs" && Rl(t) ? !1 : t != null)); } function ql(e) { let t = {}; return !e?.attribute?.isRequired && "default" in (e?.attribute || {}) && (t.default = e.attribute.default), e?.attribute?.validate !== void 0 && (t.validate = e.attribute.validate), [e.name, t]; } function Jl(e, t) { let n = Bl(e), { nodeExtensions: r, markExtensions: i } = zl(e); return new Fe({ topNode: r.find((e) => M(e, "topNode"))?.name, nodes: Object.fromEntries(r.map((r) => { let i = n.filter((e) => e.type === r.name), a = { name: r.name, options: r.options, storage: r.storage, editor: t }, o = Kl({ ...e.reduce((e, t) => { let n = M(t, "extendNodeSchema", a); return { ...e, ...n ? n(r) : {} }; }, {}), content: N(M(r, "content", a)), marks: N(M(r, "marks", a)), group: N(M(r, "group", a)), inline: N(M(r, "inline", a)), atom: N(M(r, "atom", a)), selectable: N(M(r, "selectable", a)), draggable: N(M(r, "draggable", a)), code: N(M(r, "code", a)), whitespace: N(M(r, "whitespace", a)), linebreakReplacement: N(M(r, "linebreakReplacement", a)), defining: N(M(r, "defining", a)), isolating: N(M(r, "isolating", a)), attrs: Object.fromEntries(i.map(ql)) }), s = N(M(r, "parseHTML", a)); s && (o.parseDOM = s.map((e) => Gl(e, i))); let c = M(r, "renderHTML", a); c && (o.toDOM = (e) => c({ node: e, HTMLAttributes: Ul(e, i) })); let l = M(r, "renderText", a); return l && (o.toText = l), [r.name, o]; })), marks: Object.fromEntries(i.map((r) => { let i = n.filter((e) => e.type === r.name), a = { name: r.name, options: r.options, storage: r.storage, editor: t }, o = Kl({ ...e.reduce((e, t) => { let n = M(t, "extendMarkSchema", a); return { ...e, ...n ? n(r) : {} }; }, {}), inclusive: N(M(r, "inclusive", a)), excludes: N(M(r, "excludes", a)), group: N(M(r, "group", a)), spanning: N(M(r, "spanning", a)), code: N(M(r, "code", a)), attrs: Object.fromEntries(i.map(ql)) }), s = N(M(r, "parseHTML", a)); s && (o.parseDOM = s.map((e) => Gl(e, i))); let c = M(r, "renderHTML", a); return c && (o.toDOM = (e) => c({ mark: e, HTMLAttributes: Ul(e, i) })), [r.name, o]; })) }); } function Yl(e) { let t = e.filter((t, n) => e.indexOf(t) !== n); return Array.from(new Set(t)); } function Xl(e) { return e.sort((e, t) => { let n = M(e, "priority") || 100, r = M(t, "priority") || 100; return n > r ? -1 : +(n < r); }); } function Zl(e) { let t = Xl(Fl(e)), n = Yl(t.map((e) => e.name)); return n.length && console.warn(`[tiptap warn]: Duplicate extension names found: [${n.map((e) => `'${e}'`).join(", ")}]. This can lead to issues.`), t; } function Ql(e, t) { return Jl(Zl(e), t); } function $l(e, t) { let n = Ql(t), r = Xc(e); return ze.fromSchema(n).parse(r).toJSON(); } function eu(e, t, n) { let { from: r, to: i } = t, { blockSeparator: a = "\n\n", textSerializers: o = {} } = n || {}, s = ""; return e.nodesBetween(r, i, (e, n, c, l) => { e.isBlock && n > r && (s += a); let u = o?.[e.type.name]; if (u) return c && (s += u({ node: e, pos: n, parent: c, index: l, range: t })), !1; e.isText && (s += (e?.text)?.slice(Math.max(r, n) - n, i - n)); }), s; } function tu(e, t) { return eu(e, { from: 0, to: e.content.size }, t); } function nu(e) { return Object.fromEntries(Object.entries(e.nodes).filter(([, e]) => e.spec.toText).map(([e, t]) => [e, t.spec.toText])); } function ru(e, t) { let n = j(t, e.schema), { from: r, to: i } = e.selection, a = []; e.doc.nodesBetween(r, i, (e) => { a.push(e); }); let o = a.reverse().find((e) => e.type.name === n.name); return o ? { ...o.attrs } : {}; } function iu(e, t) { let n = _l(typeof t == "string" ? t : t.name, e.schema); return n === "node" ? ru(e, t) : n === "mark" ? kl(e, t) : {}; } function au(e, t = JSON.stringify) { let n = {}; return e.filter((e) => { let r = t(e); return Object.prototype.hasOwnProperty.call(n, r) ? !1 : n[r] = !0; }); } function ou(e) { let t = au(e); return t.length === 1 ? t : t.filter((e, n) => !t.filter((e, t) => t !== n).some((t) => e.oldRange.from >= t.oldRange.from && e.oldRange.to <= t.oldRange.to && e.newRange.from >= t.newRange.from && e.newRange.to <= t.newRange.to)); } function su(e) { let { mapping: t, steps: n } = e, r = []; return t.maps.forEach((e, i) => { let a = []; if (e.ranges.length) e.forEach((e, t) => { a.push({ from: e, to: t }); }); else { let { from: e, to: t } = n[i]; if (e === void 0 || t === void 0) return; a.push({ from: e, to: t }); } a.forEach(({ from: e, to: n }) => { let a = t.slice(i).map(e, -1), o = t.slice(i).map(n), s = t.invert().map(a, -1), c = t.invert().map(o); r.push({ oldRange: { from: s, to: c }, newRange: { from: a, to: o } }); }); }), ou(r); } function cu(e, t, n) { let r = []; return e === t ? n.resolve(e).marks().forEach((t) => { let i = Ic(n.resolve(e), t.type); i && r.push({ mark: t, ...i }); }) : n.nodesBetween(e, t, (e, t) => { !e || e?.nodeSize === void 0 || r.push(...e.marks.map((n) => ({ from: t, to: t + e.nodeSize, mark: n }))); }), r; } var lu = (e, t, n, r = 20) => { let i = e.doc.resolve(n), a = r, o = null; for (; a > 0 && o === null;) { let e = i.node(a); e?.type.name === t ? o = e : --a; } return [o, a]; }; function uu(e, t) { return t.nodes[e] || t.marks[e] || null; } function du(e, t, n) { return Object.fromEntries(Object.entries(n).filter(([n]) => { let r = e.find((e) => e.type === t && e.name === n); return r ? r.attribute.keepOnSplit : !1; })); } var fu = (e, t = 500) => { let n = "", r = e.parentOffset; return e.parent.nodesBetween(Math.max(0, r - t), r, (e, t, i, a) => { var o; let s = (o = e.type.spec).toText?.call(o, { node: e, pos: t, parent: i, index: a }) || e.textContent || "%leaf%"; n += e.isAtom && !e.isText ? s : s.slice(0, Math.max(0, r - t)); }), n; }; function pu(e, t, n = {}) { let { empty: r, ranges: i } = e.selection, a = t ? Lc(t, e.schema) : null; if (r) return !!(e.storedMarks || e.selection.$from.marks()).filter((e) => a ? a.name === e.type.name : !0).find((e) => Nc(e.attrs, n, { strict: !1 })); let o = 0, s = []; if (i.forEach(({ $from: t, $to: n }) => { let r = t.pos, i = n.pos; e.doc.nodesBetween(r, i, (e, t) => { if (a && e.inlineContent && !e.type.allowsMarkType(a)) return !1; if (!e.isText && !e.marks.length) return; let n = Math.max(r, t), c = Math.min(i, t + e.nodeSize), l = c - n; o += l, s.push(...e.marks.map((e) => ({ mark: e, from: n, to: c }))); }); }), o === 0) return !1; let c = s.filter((e) => a ? a.name === e.mark.type.name : !0).filter((e) => Nc(e.mark.attrs, n, { strict: !1 })).reduce((e, t) => e + t.to - t.from, 0), l = s.filter((e) => a ? e.mark.type !== a && e.mark.type.excludes(a) : !0).reduce((e, t) => e + t.to - t.from, 0); return (c > 0 ? c + l : c) >= o; } function mu(e, t, n = {}) { if (!t) return fl(e, null, n) || pu(e, null, n); let r = _l(t, e.schema); return r === "node" ? fl(e, t, n) : r === "mark" ? pu(e, t, n) : !1; } var hu = (e, t) => { let { $from: n, $to: r, $anchor: i } = e.selection; if (t) { let n = Pl((e) => e.type.name === t)(e.selection); if (!n) return !1; let r = e.doc.resolve(n.pos + 1); return i.pos + 1 === r.end(); } return !(r.parentOffset < r.parent.nodeSize - 2 || n.pos !== r.pos); }, gu = (e) => { let { $from: t, $to: n } = e.selection; return !(t.parentOffset > 0 || t.pos !== n.pos); }; function _u(e, t) { return Array.isArray(t) ? t.some((t) => (typeof t == "string" ? t : t.name) === e.name) : t; } function vu(e, t) { let { nodeExtensions: n } = zl(t), r = n.find((t) => t.name === e); if (!r) return !1; let i = N(M(r, "group", { name: r.name, options: r.options, storage: r.storage })); return typeof i == "string" ? i.split(" ").includes("list") : !1; } function yu(e, { checkChildren: t = !0, ignoreWhitespace: n = !1 } = {}) { if (n) { if (e.type.name === "hardBreak") return !0; if (e.isText) return !/\S/.test(e.text ?? ""); } if (e.isText) return !e.text; if (e.isAtom || e.isLeaf) return !1; if (e.content.childCount === 0) return !0; if (t) { let r = !0; return e.content.forEach((e) => { r !== !1 && (yu(e, { ignoreWhitespace: n, checkChildren: t }) || (r = !1)); }), r; } return !1; } function bu(e) { return e instanceof C; } var xu = class e { constructor(e) { this.position = e; } static fromJSON(t) { return new e(t.position); } toJSON() { return { position: this.position }; } }; function Su(e, t) { let n = t.mapping.mapResult(e.position); return { position: new xu(n.pos), mapResult: n }; } function Cu(e) { return new xu(e); } function wu(e, t, n) { let { selection: r } = t, i = null; if (Bc(r) && (i = r.$cursor), i) { let t = e.storedMarks ?? i.marks(); return i.parent.type.allowsMarkType(n) && (!!n.isInSet(t) || !t.some((e) => e.type.excludes(n))); } let { ranges: a } = r; return a.some(({ $from: t, $to: r }) => { let i = t.depth === 0 ? e.doc.inlineContent && e.doc.type.allowsMarkType(n) : !1; return e.doc.nodesBetween(t.pos, r.pos, (e, t, r) => { if (i) return !1; if (e.isInline) { let t = !r || r.type.allowsMarkType(n), a = !!n.isInSet(e.marks) || !e.marks.some((e) => e.type.excludes(n)); i = t && a; } return !i; }), i; }); } var Tu = (e, t = {}) => ({ tr: n, state: r, dispatch: i }) => { let { selection: a } = n, { empty: o, ranges: s } = a, c = Lc(e, r.schema); if (i) if (o) { let e = kl(r, c); n.addStoredMark(c.create({ ...e, ...t })); } else s.forEach((e) => { let i = e.$from.pos, a = e.$to.pos; r.doc.nodesBetween(i, a, (e, r) => { let o = Math.max(r, i), s = Math.min(r + e.nodeSize, a); e.marks.find((e) => e.type === c) ? e.marks.forEach((e) => { c === e.type && n.addMark(o, s, c.create({ ...e.attrs, ...t })); }) : n.addMark(o, s, c.create(t)); }); }); return wu(r, n, c); }, Eu = (e, t) => ({ tr: n }) => (n.setMeta(e, t), !0), Du = (e, t = {}) => ({ state: n, dispatch: r, chain: i }) => { let a = j(e, n.schema), o; return n.selection.$anchor.sameParent(n.selection.$head) && (o = n.selection.$anchor.parent.attrs), a.isTextblock ? i().command(({ commands: e }) => vr(a, { ...o, ...t })(n) ? !0 : e.clearNodes()).command(({ state: e }) => vr(a, { ...o, ...t })(e, r)).run() : (console.warn("[tiptap warn]: Currently \"setNode()\" only supports text block nodes."), !1); }, Ou = (e) => ({ tr: t, dispatch: n }) => { if (n) { let { doc: n } = t, r = Vc(e, 0, n.content.size), i = C.create(n, r); t.setSelection(i); } return !0; }, ku = (e, t) => ({ tr: n, state: r, dispatch: i }) => { let { selection: a } = r, o, s; return typeof t == "number" ? (o = t, s = t) : t && "from" in t && "to" in t ? (o = t.from, s = t.to) : (o = a.from, s = a.to), i && n.doc.nodesBetween(o, s, (t, r) => { t.isText || n.setNodeMarkup(r, void 0, { ...t.attrs, dir: e }); }), !0; }, Au = (e) => ({ tr: t, dispatch: n }) => { if (n) { let { doc: n } = t, { from: r, to: i } = typeof e == "number" ? { from: e, to: e } : e, a = S.atStart(n).from, o = S.atEnd(n).to, s = Vc(r, a, o), c = Vc(i, a, o), l = S.create(n, s, c); t.setSelection(l); } return !0; }, ju = (e) => ({ state: t, dispatch: n }) => Ar(j(e, t.schema))(t, n); function Mu(e, t) { let n = e.storedMarks || e.selection.$to.parentOffset && e.selection.$from.marks(); if (n) { let r = n.filter((e) => t?.includes(e.type.name)); e.tr.ensureMarks(r); } } var Nu = ({ keepMarks: e = !0 } = {}) => ({ tr: t, state: n, dispatch: r, editor: i }) => { let { selection: a, doc: o } = t, { $from: s, $to: c } = a, l = i.extensionManager.attributes, u = du(l, s.node().type.name, s.node().attrs); if (a instanceof C && a.node.isBlock) return !s.parentOffset || !Wt(o, s.pos) ? !1 : (r && (e && Mu(n, i.extensionManager.splittableMarks), t.split(s.pos).scrollIntoView()), !0); if (!s.parent.isBlock) return !1; let d = c.parentOffset === c.parent.content.size, f = s.depth === 0 ? void 0 : jl(s.node(-1).contentMatchAt(s.indexAfter(-1))), p = d && f ? [{ type: f, attrs: u }] : void 0, m = Wt(t.doc, t.mapping.map(s.pos), 1, p); if (!p && !m && Wt(t.doc, t.mapping.map(s.pos), 1, f ? [{ type: f }] : void 0) && (m = !0, p = f ? [{ type: f, attrs: u }] : void 0), r) { if (m && (a instanceof S && t.deleteSelection(), t.split(t.mapping.map(s.pos), 1, p), f && !d && !s.parentOffset && s.parent.type !== f)) { let e = t.mapping.map(s.before()), n = t.doc.resolve(e); s.node(-1).canReplaceWith(n.index(), n.index() + 1, f) && t.setNodeMarkup(t.mapping.map(s.before()), f); } e && Mu(n, i.extensionManager.splittableMarks), t.scrollIntoView(); } return m; }, Pu = (e, t = {}) => ({ tr: n, state: r, dispatch: i, editor: o }) => { let s = j(e, r.schema), { $from: c, $to: l } = r.selection, u = r.selection.node; if (u && u.isBlock || c.depth < 2 || !c.sameParent(l)) return !1; let f = c.node(-1); if (f.type !== s) return !1; let p = o.extensionManager.attributes; if (c.parent.content.size === 0 && c.node(-1).childCount === c.indexAfter(-1)) { if (c.depth === 2 || c.node(-3).type !== s || c.index(-2) !== c.node(-2).childCount - 1) return !1; if (i) { let e = a.empty, r = c.index(-1) ? 1 : c.index(-2) ? 2 : 3; for (let t = c.depth - r; t >= c.depth - 3; --t) e = a.from(c.node(t).copy(e)); let i = c.indexAfter(-1) < c.node(-2).childCount ? 1 : c.indexAfter(-2) < c.node(-3).childCount ? 2 : 3, o = { ...du(p, c.node().type.name, c.node().attrs), ...t }, l = s.contentMatch.defaultType?.createAndFill(o) || void 0; e = e.append(a.from(s.createAndFill(null, l) || void 0)); let u = c.before(c.depth - (r - 1)); n.replace(u, c.after(-i), new d(e, 4 - r, 0)); let f = -1; n.doc.nodesBetween(u, n.doc.content.size, (e, t) => { if (f > -1) return !1; e.isTextblock && e.content.size === 0 && (f = t + 1); }), f > -1 && n.setSelection(S.near(n.doc.resolve(f))), n.scrollIntoView(); } return !0; } let m = l.pos === c.end() ? f.contentMatchAt(0).defaultType : null, h = { ...du(p, f.type.name, f.attrs), ...t }, g = { ...du(p, c.node().type.name, c.node().attrs), ...t }; n.delete(c.pos, l.pos); let _ = m ? [{ type: s, attrs: h }, { type: m, attrs: g }] : [{ type: s, attrs: h }]; if (!Wt(n.doc, c.pos, 2)) return !1; if (i) { let { selection: e, storedMarks: t } = r, { splittableMarks: a } = o.extensionManager, s = t || e.$to.parentOffset && e.$from.marks(); if (n.split(c.pos, 2, _).scrollIntoView(), !s || !i) return !0; let l = s.filter((e) => a.includes(e.type.name)); n.ensureMarks(l); } return !0; }, Fu = (e, t) => { let n = Pl((e) => e.type === t)(e.selection); if (!n) return !0; let r = e.doc.resolve(Math.max(0, n.pos - 1)).before(n.depth); if (r === void 0) return !0; let i = e.doc.nodeAt(r); return n.node.type === i?.type && Kt(e.doc, n.pos) && e.join(n.pos), !0; }, Iu = (e, t) => { let n = Pl((e) => e.type === t)(e.selection); if (!n) return !0; let r = e.doc.resolve(n.start).after(n.depth); if (r === void 0) return !0; let i = e.doc.nodeAt(r); return n.node.type === i?.type && Kt(e.doc, r) && e.join(r), !0; }; function Lu(e) { let t = e.doc, n = t.firstChild; if (!n) return null; let r = t.resolve(1), i = t.resolve(n.nodeSize - 1); return S.between(r, i); } var Ru = (e, t, n, r = {}) => ({ editor: i, tr: a, state: o, dispatch: s, chain: c, commands: l, can: u }) => { let { extensions: d, splittableMarks: f } = i.extensionManager, p = j(e, o.schema), m = j(t, o.schema), { selection: h, storedMarks: g } = o, { $from: _, $to: ee } = h, v = _.blockRange(ee), y = g || h.$to.parentOffset && h.$from.marks(); if (!v) return !1; let te = Pl((e) => vu(e.type.name, d))(h), ne = h.from === 0 && h.to === o.doc.content.size, re = o.doc.content.content, ie = re.length === 1 ? re[0] : null, ae = ne && ie && vu(ie.type.name, d) ? { node: ie, pos: 0, depth: 0 } : null, oe = te ?? ae, se = !!te && v.depth >= 1 && v.depth - te.depth <= 1, ce = !!ae; if ((se || ce) && oe) { if (oe.node.type === p) return ne && ce ? c().command(({ tr: e, dispatch: t }) => { let n = Lu(e); return n ? (e.setSelection(n), t && t(e), !0) : !1; }).liftListItem(m).run() : l.liftListItem(m); if (vu(oe.node.type.name, d) && p.validContent(oe.node.content)) return c().command(() => (a.setNodeMarkup(oe.pos, p), !0)).command(() => Fu(a, p)).command(() => Iu(a, p)).run(); } return !n || !y || !s ? c().command(() => u().wrapInList(p, r) ? !0 : l.clearNodes()).wrapInList(p, r).command(() => Fu(a, p)).command(() => Iu(a, p)).run() : c().command(() => { let e = u().wrapInList(p, r), t = y.filter((e) => f.includes(e.type.name)); return a.ensureMarks(t), e ? !0 : l.clearNodes(); }).wrapInList(p, r).command(() => Fu(a, p)).command(() => Iu(a, p)).run(); }, zu = (e, t = {}, n = {}) => ({ state: r, commands: i }) => { let { extendEmptyMarkRange: a = !1 } = n, o = Lc(e, r.schema); return pu(r, o, t) ? i.unsetMark(o, { extendEmptyMarkRange: a }) : i.setMark(o, t); }, Bu = (e, t, n = {}) => ({ state: r, commands: i }) => { let a = j(e, r.schema), o = j(t, r.schema), s = fl(r, a, n), c; return r.selection.$anchor.sameParent(r.selection.$head) && (c = r.selection.$anchor.parent.attrs), s ? i.setNode(o, c) : i.setNode(a, { ...c, ...n }); }, Vu = (e, t = {}) => ({ state: n, commands: r }) => { let i = j(e, n.schema); return fl(n, i, t) ? r.lift(i) : r.wrapIn(i, t); }, Hu = () => ({ state: e, dispatch: t }) => { let n = e.plugins; for (let r = 0; r < n.length; r += 1) { let i = n[r], a; if (i.spec.isInputRules && (a = i.getState(e))) { if (t) { let t = e.tr, n = a.transform; for (let e = n.steps.length - 1; e >= 0; --e) t.step(n.steps[e].invert(n.docs[e])); if (a.text) { let n = t.doc.resolve(a.from).marks(); t.replaceWith(a.from, a.to, e.schema.text(a.text, n)); } else t.delete(a.from, a.to); } return !0; } } return !1; }, Uu = (e = {}) => ({ tr: t, dispatch: n, editor: r }) => { let { ignoreClearable: i = !1 } = e, { selection: a } = t, { empty: o, ranges: s } = a; if (o) return !0; let { nonClearableMarks: c } = r.extensionManager; if (n) { let e = Object.values(r.schema.marks).filter((e) => i || !c.includes(e.name)); s.forEach((n) => { for (let r of e) t.removeMark(n.$from.pos, n.$to.pos, r); }); } return !0; }, Wu = (e, t = {}) => ({ tr: n, state: r, dispatch: i }) => { let { extendEmptyMarkRange: a = !1 } = t, { selection: o } = n, s = Lc(e, r.schema), { $from: c, empty: l, ranges: u } = o; if (!i) return !0; if (l && a) { let { from: e, to: t } = o, r = Ic(c, s, c.marks().find((e) => e.type === s)?.attrs); r && (e = r.from, t = r.to), n.removeMark(e, t, s); } else u.forEach((e) => { n.removeMark(e.$from.pos, e.$to.pos, s); }); return n.removeStoredMark(s), !0; }, Gu = (e) => ({ tr: t, state: n, dispatch: r }) => { let { selection: i } = n, a, o; return typeof e == "number" ? (a = e, o = e) : e && "from" in e && "to" in e ? (a = e.from, o = e.to) : (a = i.from, o = i.to), r && t.doc.nodesBetween(a, o, (e, n) => { if (e.isText) return; let r = { ...e.attrs }; delete r.dir, t.setNodeMarkup(n, void 0, r); }), !0; }, Ku = (e, t = {}) => ({ tr: n, state: r, dispatch: i }) => { let a = null, o = null, s = _l(typeof e == "string" ? e : e.name, r.schema); if (!s) return !1; s === "node" && (a = j(e, r.schema)), s === "mark" && (o = Lc(e, r.schema)); let c = !1; return n.selection.ranges.forEach((e) => { let s = e.$from.pos, l = e.$to.pos, u, d, f, p; n.selection.empty ? r.doc.nodesBetween(s, l, (e, t) => { a && a === e.type && (c = !0, f = Math.max(t, s), p = Math.min(t + e.nodeSize, l), u = t, d = e); }) : r.doc.nodesBetween(s, l, (e, r) => { r < s && a && a === e.type && (c = !0, f = Math.max(r, s), p = Math.min(r + e.nodeSize, l), u = r, d = e), r >= s && r <= l && (a && a === e.type && (c = !0, i && n.setNodeMarkup(r, void 0, { ...e.attrs, ...t })), o && e.marks.length && e.marks.forEach((a) => { if (o === a.type && (c = !0, i)) { let i = Math.max(r, s), c = Math.min(r + e.nodeSize, l); n.addMark(i, c, o.create({ ...a.attrs, ...t })); } })); }), d && (u !== void 0 && i && n.setNodeMarkup(u, void 0, { ...d.attrs, ...t }), o && d.marks.length && d.marks.forEach((e) => { o === e.type && i && n.addMark(f, p, o.create({ ...e.attrs, ...t })); })); }), c; }, qu = (e, t = {}) => ({ state: n, dispatch: r }) => _r(j(e, n.schema), t)(n, r), Ju = (e, t = {}) => ({ state: n, dispatch: r }) => wr(j(e, n.schema), t)(n, r), Yu = class { constructor() { this.callbacks = {}; } on(e, t) { return this.callbacks[e] || (this.callbacks[e] = []), this.callbacks[e].push(t), this; } emit(e, ...t) { let n = this.callbacks[e]; return n && n.forEach((e) => e.apply(this, t)), this; } off(e, t) { let n = this.callbacks[e]; return n && (t ? this.callbacks[e] = n.filter((e) => e !== t) : delete this.callbacks[e]), this; } once(e, t) { let n = (...r) => { this.off(e, n), t.apply(this, r); }; return this.on(e, n); } removeAllListeners() { this.callbacks = {}; } }, Xu = class { constructor(e) { this.find = e.find, this.handler = e.handler, this.undoable = e.undoable ?? !0; } }, Zu = (e, t) => { if (Mc(t)) return t.exec(e); let n = t(e); if (!n) return null; let r = [n.text]; return r.index = n.index, r.input = e, r.data = n.data, n.replaceWith && (n.text.includes(n.replaceWith) || console.warn("[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\"."), r.push(n.replaceWith)), r; }; function Qu(e) { let { editor: t, from: n, to: r, text: i, rules: a, plugin: o } = e, { view: s } = t; if (s.composing) return !1; let c = s.state.doc.resolve(n); if (c.parent.type.spec.code || (c.nodeBefore || c.nodeAfter)?.marks.find((e) => e.type.spec.code)) return !1; let l = !1, u = fu(c) + i; return a.forEach((e) => { if (l) return; let a = Zu(u, e.find); if (!a) return; let c = s.state.tr, d = mc({ state: s.state, transaction: c }), f = { from: n - (a[0].length - i.length), to: r }, { commands: p, chain: m, can: h } = new hc({ editor: t, state: d }); e.handler({ state: d, range: f, match: a, commands: p, chain: m, can: h }) === null || !c.steps.length || (e.undoable && c.setMeta(o, { transform: c, from: n, to: r, text: i }), s.dispatch(c), l = !0); }), l; } function $u(e) { let { editor: t, rules: n } = e, r = new w({ state: { init() { return null; }, apply(e, i, o) { let s = e.getMeta(r); if (s) return s; let c = e.getMeta("applyInputRules"); return c && setTimeout(() => { let { text: e } = c; e = typeof e == "string" ? e : Il(a.from(e), o.schema); let { from: i } = c; Qu({ editor: t, from: i, to: i + e.length, text: e, rules: n, plugin: r }); }), e.selectionSet || e.docChanged ? null : i; } }, props: { handleTextInput(e, i, a, o) { return Qu({ editor: t, from: i, to: a, text: o, rules: n, plugin: r }); }, handleDOMEvents: { compositionend: (e) => (setTimeout(() => { let { $cursor: i } = e.state.selection; i && Qu({ editor: t, from: i.pos, to: i.pos, text: "", rules: n, plugin: r }); }), !1) }, handleKeyDown(e, i) { if (i.key !== "Enter") return !1; let { $cursor: a } = e.state.selection; return a ? Qu({ editor: t, from: a.pos, to: a.pos, text: "\n", rules: n, plugin: r }) : !1; } }, isInputRules: !0 }); return r; } function ed(e) { return Object.prototype.toString.call(e).slice(8, -1); } function td(e) { return ed(e) === "Object" ? e.constructor === Object && Object.getPrototypeOf(e) === Object.prototype : !1; } function nd(e, t) { let n = { ...e }; return td(e) && td(t) && Object.keys(t).forEach((r) => { td(t[r]) && td(e[r]) ? n[r] = nd(e[r], t[r]) : n[r] = t[r]; }), n; } var rd = class { constructor(e = {}) { this.type = "extendable", this.parent = null, this.child = null, this.name = "", this.config = { name: this.name }, this.config = { ...this.config, ...e }, this.name = this.config.name; } get options() { return { ...N(M(this, "addOptions", { name: this.name })) }; } get storage() { return { ...N(M(this, "addStorage", { name: this.name, options: this.options })) }; } configure(e = {}) { let t = this.extend({ ...this.config, addOptions: () => nd(this.options, e) }); return t.name = this.name, t.parent = this.parent, this.child = null, t; } extend(e = {}) { let t = new this.constructor({ ...this.config, ...e }); return t.parent = this, this.child = t, t.name = "name" in e ? e.name : t.parent.name, t; } }, id = class e extends rd { constructor() { super(...arguments), this.type = "mark"; } static create(t = {}) { return new e(typeof t == "function" ? t() : t); } static handleExit({ editor: e, mark: t }) { let { tr: n } = e.state, r = e.state.selection.$from; if (r.pos === r.end()) { let i = r.marks(); if (!i.find((e) => e?.type.name === t.name)) return !1; let a = i.find((e) => e?.type.name === t.name); return a && n.removeStoredMark(a), n.insertText(" ", r.pos), e.view.dispatch(n), !0; } return !1; } configure(e) { return super.configure(e); } extend(e) { let t = typeof e == "function" ? e() : e; return super.extend(t); } }; function ad(e) { return typeof e == "number"; } var od = class { constructor(e) { this.find = e.find, this.handler = e.handler; } }, sd = (e, t, n) => { if (Mc(t)) return [...e.matchAll(t)]; let r = t(e, n); return r ? r.map((t) => { let n = [t.text]; return n.index = t.index, n.input = e, n.data = t.data, t.replaceWith && (t.text.includes(t.replaceWith) || console.warn("[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\"."), n.push(t.replaceWith)), n; }) : []; }; function cd(e) { let { editor: t, state: n, from: r, to: i, rule: a, pasteEvent: o, dropEvent: s } = e, { commands: c, chain: l, can: u } = new hc({ editor: t, state: n }), d = []; return n.doc.nodesBetween(r, i, (e, t) => { if (e.type?.spec?.code || !(e.isText || e.isTextblock || e.isInline)) return; let f = e.content?.size ?? e.nodeSize ?? 0, p = Math.max(r, t), m = Math.min(i, t + f); p >= m || sd(e.isText ? e.text || "" : e.textBetween(p - t, m - t, void 0, ""), a.find, o).forEach((e) => { if (e.index === void 0) return; let t = p + e.index + 1, r = t + e[0].length, i = { from: n.tr.mapping.map(t), to: n.tr.mapping.map(r) }, f = a.handler({ state: n, range: i, match: e, commands: c, chain: l, can: u, pasteEvent: o, dropEvent: s }); d.push(f); }); }), d.every((e) => e !== null); } var ld = null, ud = (e) => { var t; let n = new ClipboardEvent("paste", { clipboardData: new DataTransfer() }); return (t = n.clipboardData) == null || t.setData("text/html", e), n; }; function dd(e) { let { editor: t, rules: n } = e, r = null, i = !1, o = !1, s = typeof ClipboardEvent < "u" ? new ClipboardEvent("paste") : null, c; try { c = typeof DragEvent < "u" ? new DragEvent("drop") : null; } catch { c = null; } let l = ({ state: e, from: n, to: r, rule: i, pasteEvt: a }) => { let o = e.tr; if (!(!cd({ editor: t, state: mc({ state: e, transaction: o }), from: Math.max(n - 1, 0), to: r.b - 1, rule: i, pasteEvent: a, dropEvent: c }) || !o.steps.length)) { try { c = typeof DragEvent < "u" ? new DragEvent("drop") : null; } catch { c = null; } return s = typeof ClipboardEvent < "u" ? new ClipboardEvent("paste") : null, o; } }; return n.map((e) => new w({ view(e) { let n = (n) => { r = e.dom.parentElement?.contains(n.target) ? e.dom.parentElement : null, r && (ld = t); }, i = () => { ld &&= null; }; return window.addEventListener("dragstart", n), window.addEventListener("dragend", i), { destroy() { window.removeEventListener("dragstart", n), window.removeEventListener("dragend", i); } }; }, props: { handleDOMEvents: { drop: (e, t) => { if (o = r === e.dom.parentElement, c = t, !o) { let e = ld; e?.isEditable && setTimeout(() => { let t = e.state.selection; t && e.commands.deleteRange({ from: t.from, to: t.to }); }, 10); } return !1; }, paste: (e, t) => { let n = t.clipboardData?.getData("text/html"); return s = t, i = !!n?.includes("data-pm-slice"), !1; } } }, appendTransaction: (t, n, r) => { let c = t[0], u = c.getMeta("uiEvent") === "paste" && !i, d = c.getMeta("uiEvent") === "drop" && !o, f = c.getMeta("applyPasteRules"), p = !!f; if (!u && !d && !p) return; if (p) { let { text: t } = f; t = typeof t == "string" ? t : Il(a.from(t), r.schema); let { from: n } = f, i = n + t.length, o = ud(t); return l({ rule: e, state: r, from: n, to: { b: i }, pasteEvt: o }); } let m = n.doc.content.findDiffStart(r.doc.content), h = n.doc.content.findDiffEnd(r.doc.content); if (!(!ad(m) || !h || m === h.b)) return l({ rule: e, state: r, from: m, to: h, pasteEvt: s }); } })); } var fd = class { constructor(e, t) { this.splittableMarks = [], this.nonClearableMarks = [], this.editor = t, this.baseExtensions = e, this.extensions = Zl(e), this.schema = Jl(this.extensions, t), this.setupExtensions(); } get commands() { return this.extensions.reduce((e, t) => { let n = M(t, "addCommands", { name: t.name, options: t.options, storage: this.editor.extensionStorage[t.name], editor: this.editor, type: uu(t.name, this.schema) }); return n ? { ...e, ...n() } : e; }, {}); } get plugins() { let { editor: e } = this; return Xl([...this.extensions].reverse()).flatMap((t) => { let n = { name: t.name, options: t.options, storage: this.editor.extensionStorage[t.name], editor: e, type: uu(t.name, this.schema) }, r = [], i = M(t, "addKeyboardShortcuts", n), a = {}; if (t.type === "mark" && M(t, "exitable", n) && (a.ArrowRight = () => id.handleExit({ editor: e, mark: t })), i) { let t = Object.fromEntries(Object.entries(i()).map(([t, n]) => [t, () => n({ editor: e })])); a = { ...a, ...t }; } let o = uc(a); r.push(o); let s = M(t, "addInputRules", n); if (_u(t, e.options.enableInputRules) && s) { let t = s(); if (t && t.length) { let n = $u({ editor: e, rules: t }), i = Array.isArray(n) ? n : [n]; r.push(...i); } } let c = M(t, "addPasteRules", n); if (_u(t, e.options.enablePasteRules) && c) { let t = c(); if (t && t.length) { let n = dd({ editor: e, rules: t }); r.push(...n); } } let l = M(t, "addProseMirrorPlugins", n); if (l) { let e = l(); r.push(...e); } return r; }); } get attributes() { return Bl(this.extensions); } get nodeViews() { let { editor: e } = this, { nodeExtensions: t } = zl(this.extensions); return Object.fromEntries(t.filter((e) => !!M(e, "addNodeView")).map((t) => { let n = this.attributes.filter((e) => e.type === t.name), r = M(t, "addNodeView", { name: t.name, options: t.options, storage: this.editor.extensionStorage[t.name], editor: e, type: j(t.name, this.schema) }); if (!r) return []; let i = r(); return i ? [t.name, (r, a, o, s, c) => i({ node: r, view: a, getPos: o, decorations: s, innerDecorations: c, editor: e, extension: t, HTMLAttributes: Ul(r, n) })] : []; })); } dispatchTransaction(e) { let { editor: t } = this; return Xl([...this.extensions].reverse()).reduceRight((e, n) => { let r = { name: n.name, options: n.options, storage: this.editor.extensionStorage[n.name], editor: t, type: uu(n.name, this.schema) }, i = M(n, "dispatchTransaction", r); return i ? (t) => { i.call(r, { transaction: t, next: e }); } : e; }, e); } transformPastedHTML(e) { let { editor: t } = this; return Xl([...this.extensions]).reduce((e, n) => { let r = { name: n.name, options: n.options, storage: this.editor.extensionStorage[n.name], editor: t, type: uu(n.name, this.schema) }, i = M(n, "transformPastedHTML", r); return i ? (t, n) => { let a = e(t, n); return i.call(r, a); } : e; }, e || ((e) => e)); } get markViews() { let { editor: e } = this, { markExtensions: t } = zl(this.extensions); return Object.fromEntries(t.filter((e) => !!M(e, "addMarkView")).map((t) => { let n = this.attributes.filter((e) => e.type === t.name), r = M(t, "addMarkView", { name: t.name, options: t.options, storage: this.editor.extensionStorage[t.name], editor: e, type: Lc(t.name, this.schema) }); return r ? [t.name, (i, a, o) => { let s = Ul(i, n); return r()({ mark: i, view: a, inline: o, editor: e, extension: t, HTMLAttributes: s, updateAttributes: (t) => { Jd(i, e, t); } }); }] : []; })); } destroy() { this.extensions.forEach((e) => { let t = e; for (; t.parent;) { let e = t.parent; e.child === t && (e.child = null), t = e; } }), this.extensions = [], this.baseExtensions = [], this.schema = null, this.editor = null; } setupExtensions() { let e = this.extensions; this.editor.extensionStorage = Object.fromEntries(e.map((e) => [e.name, e.storage])), e.forEach((e) => { let t = { name: e.name, options: e.options, storage: this.editor.extensionStorage[e.name], editor: this.editor, type: uu(e.name, this.schema) }; e.type === "mark" && ((N(M(e, "keepOnSplit", t)) ?? !0) && this.splittableMarks.push(e.name), (N(M(e, "clearable", t)) ?? !0) || this.nonClearableMarks.push(e.name)); let n = M(e, "onBeforeCreate", t), r = M(e, "onCreate", t), i = M(e, "onUpdate", t), a = M(e, "onSelectionUpdate", t), o = M(e, "onTransaction", t), s = M(e, "onFocus", t), c = M(e, "onBlur", t), l = M(e, "onDestroy", t); n && this.editor.on("beforeCreate", n), r && this.editor.on("create", r), i && this.editor.on("update", i), a && this.editor.on("selectionUpdate", a), o && this.editor.on("transaction", o), s && this.editor.on("focus", s), c && this.editor.on("blur", c), l && this.editor.on("destroy", l); }); } }; fd.resolve = Zl, fd.sort = Xl, fd.flatten = Fl, pc({}, { ClipboardTextSerializer: () => pd, Commands: () => md, Delete: () => hd, Drop: () => gd, Editable: () => _d, FocusEvents: () => yd, Keymap: () => bd, Paste: () => xd, Tabindex: () => Sd, TextDirection: () => Cd, focusEventsPluginKey: () => vd }); var F = class e extends rd { constructor() { super(...arguments), this.type = "extension"; } static create(t = {}) { return new e(typeof t == "function" ? t() : t); } configure(e) { return super.configure(e); } extend(e) { let t = typeof e == "function" ? e() : e; return super.extend(t); } }, pd = F.create({ name: "clipboardTextSerializer", addOptions() { return { blockSeparator: void 0 }; }, addProseMirrorPlugins() { return [new w({ key: new T("clipboardTextSerializer"), props: { clipboardTextSerializer: () => { let { editor: e } = this, { state: t, schema: n } = e, { doc: r, selection: i } = t, a = nu(n), { blockSeparator: o } = this.options, s = { ...o === void 0 ? {} : { blockSeparator: o }, textSerializers: a }; return [...i.ranges].sort((e, t) => e.$from.pos - t.$from.pos).map(({ $from: e, $to: t }) => eu(r, { from: e.pos, to: t.pos }, s)).join(o ?? "\n\n"); } } })]; } }), md = F.create({ name: "commands", addCommands() { return { ...gc }; } }), hd = F.create({ name: "delete", onUpdate({ transaction: e, appendedTransactions: t }) { let n = () => { var n; if (((n = this.editor.options.coreExtensionOptions?.delete)?.filterTransaction)?.call(n, e) ?? e.getMeta("y-sync$")) return; let r = Al(e.before, [e, ...t]); su(r).forEach((t) => { r.mapping.mapResult(t.oldRange.from).deletedAfter && r.mapping.mapResult(t.oldRange.to).deletedBefore && r.before.nodesBetween(t.oldRange.from, t.oldRange.to, (n, i) => { let a = i + n.nodeSize - 2, o = t.oldRange.from <= i && a <= t.oldRange.to; this.editor.emit("delete", { type: "node", node: n, from: i, to: a, newFrom: r.mapping.map(i), newTo: r.mapping.map(a), deletedRange: t.oldRange, newRange: t.newRange, partial: !o, editor: this.editor, transaction: e, combinedTransform: r }); }); }); let i = r.mapping; r.steps.forEach((t, n) => { if (t instanceof St) { let a = i.slice(n).map(t.from, -1), o = i.slice(n).map(t.to), s = i.invert().map(a, -1), c = i.invert().map(o), l = a > 0 ? r.doc.nodeAt(a - 1)?.marks.some((e) => e.eq(t.mark)) : !1, u = r.doc.nodeAt(o)?.marks.some((e) => e.eq(t.mark)); this.editor.emit("delete", { type: "mark", mark: t.mark, from: t.from, to: t.to, deletedRange: { from: s, to: c }, newRange: { from: a, to: o }, partial: !!(u || l), editor: this.editor, transaction: e, combinedTransform: r }); } }); }; this.editor.options.coreExtensionOptions?.delete?.async ?? !0 ? setTimeout(n, 0) : n(); } }), gd = F.create({ name: "drop", addProseMirrorPlugins() { return [new w({ key: new T("tiptapDrop"), props: { handleDrop: (e, t, n, r) => { this.editor.emit("drop", { editor: this.editor, event: t, slice: n, moved: r }); } } })]; } }), _d = F.create({ name: "editable", addProseMirrorPlugins() { return [new w({ key: new T("editable"), props: { editable: () => this.editor.options.editable } })]; } }), vd = new T("focusEvents"), yd = F.create({ name: "focusEvents", addProseMirrorPlugins() { let { editor: e } = this; return [new w({ key: vd, props: { handleDOMEvents: { focus: (t, n) => { e.isFocused = !0; let r = e.state.tr.setMeta("focus", { event: n }).setMeta("addToHistory", !1); return t.dispatch(r), !1; }, blur: (t, n) => { e.isFocused = !1; let r = e.state.tr.setMeta("blur", { event: n }).setMeta("addToHistory", !1); return t.dispatch(r), !1; } } } })]; } }), bd = F.create({ name: "keymap", addKeyboardShortcuts() { let e = () => this.editor.commands.first(({ commands: e }) => [ () => e.undoInputRule(), () => e.command(({ tr: t }) => { let { selection: n, doc: r } = t, { empty: i, $anchor: a } = n, { pos: o, parent: s } = a, c = a.parent.isTextblock && o > 0 ? t.doc.resolve(o - 1) : a, l = c.parent.type.spec.isolating, u = a.pos - a.parentOffset, d = l && c.parent.childCount === 1 ? u === a.pos : x.atStart(r).from === o; return !i || !s.type.isTextblock || s.textContent.length || !d || d && a.parent.type.name === "paragraph" ? !1 : e.clearNodes(); }), () => e.deleteSelection(), () => e.joinBackward(), () => e.selectNodeBackward() ]), t = () => this.editor.commands.first(({ commands: e }) => [ () => e.deleteSelection(), () => e.deleteCurrentNode(), () => e.joinForward(), () => e.selectNodeForward() ]), n = { Enter: () => this.editor.commands.first(({ commands: e }) => [ () => e.newlineInCode(), () => e.createParagraphNear(), () => e.liftEmptyBlock(), () => e.splitBlock() ]), "Mod-Enter": () => this.editor.commands.exitCode(), Backspace: e, "Mod-Backspace": e, "Shift-Backspace": e, Delete: t, "Mod-Delete": t, "Mod-a": () => this.editor.commands.selectAll() }, r = { ...n }, i = { ...n, "Ctrl-h": e, "Alt-Backspace": e, "Ctrl-d": t, "Ctrl-Alt-Backspace": t, "Alt-Delete": t, "Alt-d": t, "Ctrl-a": () => this.editor.commands.selectTextblockStart(), "Ctrl-e": () => this.editor.commands.selectTextblockEnd() }; return Wc() || ll() ? i : r; }, addProseMirrorPlugins() { return [new w({ key: new T("clearDocument"), appendTransaction: (e, t, n) => { if (e.some((e) => e.getMeta("composition"))) return; let r = e.some((e) => e.docChanged) && !t.doc.eq(n.doc), i = e.some((e) => e.getMeta("preventClearDocument")); if (!r || i) return; let { empty: a, from: o, to: s } = t.selection, c = x.atStart(t.doc).from, l = x.atEnd(t.doc).to; if (a || !(o === c && s === l) || !yu(n.doc)) return; let u = n.tr, d = mc({ state: n, transaction: u }), { commands: f } = new hc({ editor: this.editor, state: d }); if (f.clearNodes(), u.steps.length) return u; } })]; } }), xd = F.create({ name: "paste", addProseMirrorPlugins() { return [new w({ key: new T("tiptapPaste"), props: { handlePaste: (e, t, n) => { this.editor.emit("paste", { editor: this.editor, event: t, slice: n }); } } })]; } }), Sd = F.create({ name: "tabindex", addOptions() { return { value: void 0 }; }, addProseMirrorPlugins() { return [new w({ key: new T("tabindex"), props: { attributes: () => !this.editor.isEditable && this.options.value === void 0 ? {} : { tabindex: this.options.value ?? "0" } } })]; } }), Cd = F.create({ name: "textDirection", addOptions() { return { direction: void 0 }; }, addGlobalAttributes() { if (!this.options.direction) return []; let { nodeExtensions: e } = zl(this.extensions); return [{ types: e.filter((e) => e.name !== "text").map((e) => e.name), attributes: { dir: { default: this.options.direction, parseHTML: (e) => { let t = e.getAttribute("dir"); return t && (t === "ltr" || t === "rtl" || t === "auto") ? t : this.options.direction; }, renderHTML: (e) => e.dir ? { dir: e.dir } : {} } } }]; }, addProseMirrorPlugins() { return [new w({ key: new T("textDirection"), props: { attributes: () => { let e = this.options.direction; return e ? { dir: e } : {}; } } })]; } }), wd = class e { constructor(e, t, n = !1, r = null) { this.currentNode = null, this.actualDepth = null, this.isBlock = n, this.resolvedPos = e, this.editor = t, this.currentNode = r; } get name() { return this.node.type.name; } get node() { return this.currentNode || this.resolvedPos.node(); } get element() { return this.editor.view.domAtPos(this.pos).node; } get depth() { return this.actualDepth ?? this.resolvedPos.depth; } get pos() { return this.resolvedPos.pos; } get content() { return this.node.content; } set content(e) { let t = this.from, n = this.to; if (this.isBlock) { if (this.content.size === 0) { console.error(`You can\u2019t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`); return; } t = this.from + 1, n = this.to - 1; } this.editor.commands.insertContentAt({ from: t, to: n }, e); } get attributes() { return this.node.attrs; } get textContent() { return this.node.textContent; } get size() { return this.node.nodeSize; } get from() { return this.isBlock ? this.pos : this.resolvedPos.start(this.resolvedPos.depth); } get range() { return { from: this.from, to: this.to }; } get to() { return this.isBlock ? this.pos + this.size : this.resolvedPos.end(this.resolvedPos.depth) + +!this.node.isText; } get parent() { if (this.depth === 0) return null; let t = this.resolvedPos.start(this.resolvedPos.depth - 1); return new e(this.resolvedPos.doc.resolve(t), this.editor); } get before() { let t = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2)); return t.depth !== this.depth && (t = this.resolvedPos.doc.resolve(this.from - 3)), new e(t, this.editor); } get after() { let t = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1)); return t.depth !== this.depth && (t = this.resolvedPos.doc.resolve(this.to + 3)), new e(t, this.editor); } get children() { let t = []; return this.node.content.forEach((n, r) => { let i = n.isBlock && !n.isTextblock, a = n.isAtom && !n.isText, o = n.isInline, s = this.pos + r + +!a; if (s < 0 || s > this.resolvedPos.doc.nodeSize - 2) return; let c = this.resolvedPos.doc.resolve(s); if (!i && !o && c.depth <= this.depth) return; let l = new e(c, this.editor, i, i || o ? n : null); i && (l.actualDepth = this.depth + 1), t.push(l); }), t; } get firstChild() { return this.children[0] || null; } get lastChild() { let e = this.children; return e[e.length - 1] || null; } closest(e, t = {}) { let n = null, r = this.parent; for (; r && !n;) { if (r.node.type.name === e) if (Object.keys(t).length > 0) { let e = r.node.attrs, n = Object.keys(t); for (let r = 0; r < n.length; r += 1) { let i = n[r]; if (e[i] !== t[i]) break; } } else n = r; r = r.parent; } return n; } querySelector(e, t = {}) { return this.querySelectorAll(e, t, !0)[0] || null; } querySelectorAll(e, t = {}, n = !1) { let r = []; if (!this.children || this.children.length === 0) return r; let i = Object.keys(t); return this.children.forEach((a) => { n && r.length > 0 || (a.node.type.name === e && i.every((e) => t[e] === a.node.attrs[e]) && r.push(a), !(n && r.length > 0) && (r = r.concat(a.querySelectorAll(e, t, n)))); }), r; } setAttribute(e) { let { tr: t } = this.editor.state; t.setNodeMarkup(this.from, void 0, { ...this.node.attrs, ...e }), this.editor.view.dispatch(t); } }, Td = ".ProseMirror {\n position: relative;\n}\n\n.ProseMirror {\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n display: inline !important;\n border: none !important;\n margin: 0 !important;\n width: 0 !important;\n height: 0 !important;\n}\n\n.ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid black;\n animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n to {\n visibility: hidden;\n }\n}\n\n.ProseMirror-hideselection *::selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection * {\n caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n}"; function Ed(e, t, n) { let r = document.querySelector(`style[data-tiptap-style${n ? `-${n}` : ""}]`); if (r !== null) return r; let i = document.createElement("style"); return t && i.setAttribute("nonce", t), i.setAttribute(`data-tiptap-style${n ? `-${n}` : ""}`, ""), i.innerHTML = e, document.getElementsByTagName("head")[0].appendChild(i), i; } var Dd = class extends Yu { constructor(e = {}) { super(), this.css = null, this.className = "tiptap", this.editorView = null, this.isFocused = !1, this.destroyed = !1, this.isInitialized = !1, this.extensionStorage = {}, this.instanceId = Math.random().toString(36).slice(2, 9), this.options = { element: typeof document < "u" ? document.createElement("div") : null, content: "", injectCSS: !0, injectNonce: void 0, extensions: [], autofocus: !1, editable: !0, textDirection: void 0, editorProps: {}, parseOptions: {}, coreExtensionOptions: {}, enableInputRules: !0, enablePasteRules: !0, enableCoreExtensions: !0, enableContentCheck: !1, emitContentError: !1, onBeforeCreate: () => null, onCreate: () => null, onMount: () => null, onUnmount: () => null, onUpdate: () => null, onSelectionUpdate: () => null, onTransaction: () => null, onFocus: () => null, onBlur: () => null, onDestroy: () => null, onContentError: ({ error: e }) => { throw e; }, onPaste: () => null, onDrop: () => null, onDelete: () => null, enableExtensionDispatchTransaction: !0 }, this.isCapturingTransaction = !1, this.capturedTransaction = null, this.utils = { getUpdatedPosition: Su, createMappablePosition: Cu }, this.setOptions(e), this.createExtensionManager(), this.createCommandManager(), this.createSchema(), this.on("beforeCreate", this.options.onBeforeCreate), this.emit("beforeCreate", { editor: this }), this.on("mount", this.options.onMount), this.on("unmount", this.options.onUnmount), this.on("contentError", this.options.onContentError), this.on("create", this.options.onCreate), this.on("update", this.options.onUpdate), this.on("selectionUpdate", this.options.onSelectionUpdate), this.on("transaction", this.options.onTransaction), this.on("focus", this.options.onFocus), this.on("blur", this.options.onBlur), this.on("destroy", this.options.onDestroy), this.on("drop", ({ event: e, slice: t, moved: n }) => this.options.onDrop(e, t, n)), this.on("paste", ({ event: e, slice: t }) => this.options.onPaste(e, t)), this.on("delete", this.options.onDelete); let t = this.createDoc(), n = Hc(t, this.options.autofocus); this.editorState = Ln.create({ doc: t, schema: this.schema, selection: n || void 0 }), this.options.element && this.mount(this.options.element); } mount(e) { if (typeof document > "u") throw Error("[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment."); this.createView(e), this.emit("mount", { editor: this }), this.css && !document.head.contains(this.css) && document.head.appendChild(this.css), window.setTimeout(() => { this.isDestroyed || (this.options.autofocus !== !1 && this.options.autofocus !== null && this.commands.focus(this.options.autofocus), this.emit("create", { editor: this }), this.isInitialized = !0); }, 0); } unmount() { if (this.editorView) { let e = this.editorView.dom; e?.editor && delete e.editor, this.editorView.destroy(); } if (this.editorView = null, this.isInitialized = !1, this.css && !document.querySelectorAll(`.${this.className}`).length) try { typeof this.css.remove == "function" ? this.css.remove() : this.css.parentNode && this.css.parentNode.removeChild(this.css); } catch (e) { console.warn("Failed to remove CSS element:", e); } this.css = null, this.emit("unmount", { editor: this }); } get storage() { return this.extensionStorage; } get commands() { return this.commandManager.commands; } chain() { return this.commandManager.chain(); } can() { return this.commandManager.can(); } injectCSS() { this.options.injectCSS && typeof document < "u" && (this.css = Ed(Td, this.options.injectNonce)); } setOptions(e = {}) { this.options = { ...this.options, ...e }, !(!this.editorView || !this.state || this.isDestroyed) && (this.options.editorProps && this.view.setProps(this.options.editorProps), this.view.updateState(this.state)); } setEditable(e, t = !0) { this.setOptions({ editable: e }), t && this.emit("update", { editor: this, transaction: this.state.tr, appendedTransactions: [] }); } get isEditable() { return this.options.editable && this.view && this.view.editable; } get view() { return this.editorView ? this.editorView : new Proxy({ state: this.editorState, updateState: (e) => { this.editorState = e; }, dispatch: (e) => { this.dispatchTransaction(e); }, composing: !1, dragging: null, editable: !0, isDestroyed: !1 }, { get: (e, t) => { if (this.editorView) return this.editorView[t]; if (t === "state") return this.editorState; if (t in e) return Reflect.get(e, t); throw Error(`[tiptap error]: The editor view is not available. Cannot access view['${t}']. The editor may not be mounted yet.`); } }); } get state() { return this.editorView && (this.editorState = this.view.state), this.editorState; } registerPlugin(e, t) { let n = Ll(t) ? t(e, [...this.state.plugins]) : [...this.state.plugins, e], r = this.state.reconfigure({ plugins: n }); return this.view.updateState(r), r; } unregisterPlugin(e) { if (this.isDestroyed) return; let t = this.state.plugins, n = t; if ([].concat(e).forEach((e) => { let t = typeof e == "string" ? `${e}$` : e.key; n = n.filter((e) => !e.key.startsWith(t)); }), t.length === n.length) return; let r = this.state.reconfigure({ plugins: n }); return this.view.updateState(r), r; } createExtensionManager() { let e = [...this.options.enableCoreExtensions ? [ _d, pd.configure({ blockSeparator: this.options.coreExtensionOptions?.clipboardTextSerializer?.blockSeparator }), md, yd, bd, Sd.configure({ value: this.options.coreExtensionOptions?.tabindex?.value }), gd, xd, hd, Cd.configure({ direction: this.options.textDirection }) ].filter((e) => typeof this.options.enableCoreExtensions == "object" ? this.options.enableCoreExtensions[e.name] !== !1 : !0) : [], ...this.options.extensions].filter((e) => [ "extension", "node", "mark" ].includes(e?.type)); this.extensionManager = new fd(e, this); } createCommandManager() { this.commandManager = new hc({ editor: this }); } createSchema() { this.schema = this.extensionManager.schema; } createDoc() { let e; try { e = Dl(this.options.content, this.schema, this.options.parseOptions, { errorOnInvalidContent: this.options.enableContentCheck }); } catch (t) { if (!(t instanceof Error) || !["[tiptap error]: Invalid JSON content", "[tiptap error]: Invalid HTML content"].includes(t.message)) throw t; this.emit("contentError", { editor: this, error: t, disableCollaboration: () => { "collaboration" in this.storage && typeof this.storage.collaboration == "object" && this.storage.collaboration && (this.storage.collaboration.isDisabled = !0), this.options.extensions = this.options.extensions.filter((e) => e.name !== "collaboration"), this.createExtensionManager(); } }), e = Dl(this.options.content, this.schema, this.options.parseOptions, { errorOnInvalidContent: !1 }); } return e; } createView(e) { let { editorProps: t, enableExtensionDispatchTransaction: n } = this.options, r = t.dispatchTransaction || this.dispatchTransaction.bind(this), i = n ? this.extensionManager.dispatchTransaction(r) : r, a = t.transformPastedHTML, o = this.extensionManager.transformPastedHTML(a); this.editorView = new Gs(e, { ...t, attributes: { role: "textbox", ...t?.attributes }, dispatchTransaction: i, transformPastedHTML: o, state: this.editorState, markViews: this.extensionManager.markViews, nodeViews: this.extensionManager.nodeViews }); let s = this.state.reconfigure({ plugins: this.extensionManager.plugins }); this.view.updateState(s), this.prependClass(), this.injectCSS(); let c = this.view.dom; c.editor = this; } createNodeViews() { this.view.isDestroyed || this.view.setProps({ markViews: this.extensionManager.markViews, nodeViews: this.extensionManager.nodeViews }); } prependClass() { this.view.dom.className = `${this.className} ${this.view.dom.className}`; } captureTransaction(e) { this.isCapturingTransaction = !0, e(), this.isCapturingTransaction = !1; let t = this.capturedTransaction; return this.capturedTransaction = null, t; } dispatchTransaction(e) { if (this.view.isDestroyed) return; if (this.isCapturingTransaction) { if (!this.capturedTransaction) { this.capturedTransaction = e; return; } e.steps.forEach((e) => this.capturedTransaction?.step(e)); return; } let { state: t, transactions: n } = this.state.applyTransaction(e), r = !this.state.selection.eq(t.selection), i = n.includes(e), a = this.state; if (this.emit("beforeTransaction", { editor: this, transaction: e, nextState: t }), !i) return; this.view.updateState(t), this.emit("transaction", { editor: this, transaction: e, appendedTransactions: n.slice(1) }), r && this.emit("selectionUpdate", { editor: this, transaction: e }); let o = n.findLast((e) => e.getMeta("focus") || e.getMeta("blur")), s = o?.getMeta("focus"), c = o?.getMeta("blur"); s && this.emit("focus", { editor: this, event: s.event, transaction: o }), c && this.emit("blur", { editor: this, event: c.event, transaction: o }), !(e.getMeta("preventUpdate") || !n.some((e) => e.docChanged) || a.doc.eq(t.doc)) && this.emit("update", { editor: this, transaction: e, appendedTransactions: n.slice(1) }); } getAttributes(e) { return iu(this.state, e); } isActive(e, t) { let n = typeof e == "string" ? e : null, r = typeof e == "string" ? t : e; return mu(this.state, n, r); } getJSON() { return this.state.doc.toJSON(); } getHTML() { return Il(this.state.doc.content, this.schema); } getText(e) { let { blockSeparator: t = "\n\n", textSerializers: n = {} } = e || {}; return tu(this.state.doc, { blockSeparator: t, textSerializers: { ...nu(this.schema), ...n } }); } get isEmpty() { return yu(this.state.doc); } destroy() { this.destroyed || (this.destroyed = !0, this.emit("destroy"), this.unmount(), this.removeAllListeners(), this.extensionManager.destroy(), this.extensionManager = null, this.schema = null, this.commandManager = null, this.extensionStorage = {}); } get isDestroyed() { return this.editorView?.isDestroyed ?? !0; } $node(e, t) { return this.$doc?.querySelector(e, t) || null; } $nodes(e, t) { return this.$doc?.querySelectorAll(e, t) || null; } $pos(e) { let t = this.state.doc.resolve(e), n = e > 0 && t.nodeAfter && !t.nodeAfter.isText ? t.nodeAfter : null; return new wd(t, this, !1, n); } get $doc() { return this.$pos(0); } }; function Od(e) { return new Xu({ find: e.find, handler: ({ state: t, range: n, match: r }) => { let i = N(e.getAttributes, void 0, r); if (i === !1 || i === null) return null; let { tr: a } = t, o = r[r.length - 1], s = r[0]; if (o) { let r = s.search(/\S/), c = n.from + s.indexOf(o), l = c + o.length; if (cu(n.from, n.to, t.doc).filter((t) => t.mark.type.excluded.find((n) => n === e.type && n !== t.mark.type)).filter((e) => e.to > c).length) return null; l < n.to && a.delete(l, n.to), c > n.from && a.delete(n.from + r, c); let u = n.from + r + o.length; a.addMark(n.from + r, u, e.type.create(i || {})), a.removeStoredMark(e.type); } }, undoable: e.undoable }); } function kd(e) { return new Xu({ find: e.find, handler: ({ state: t, range: n, match: r }) => { let i = N(e.getAttributes, void 0, r) || {}, { tr: a } = t, o = n.from, s = n.to, c = e.type.create(i); if (r[1]) { let e = o + r[0].lastIndexOf(r[1]); e > s ? e = s : s = e + r[1].length; let t = r[0][r[0].length - 1]; a.insertText(t, o + r[0].length - 1), a.replaceWith(e, s, c); } else if (r[0]) { let t = e.type.isInline ? o : o - 1; a.insert(t, e.type.create(i)).delete(a.mapping.map(o), a.mapping.map(s)); } a.scrollIntoView(); }, undoable: e.undoable }); } function Ad(e) { return new Xu({ find: e.find, handler: ({ state: t, range: n, match: r }) => { let i = t.doc.resolve(n.from), a = N(e.getAttributes, void 0, r) || {}; if (!i.node(-1).canReplaceWith(i.index(-1), i.indexAfter(-1), e.type)) return null; t.tr.delete(n.from, n.to).setBlockType(n.from, n.from, e.type, a); }, undoable: e.undoable }); } function jd(e) { return new Xu({ find: e.find, handler: ({ state: t, range: n, match: r, chain: i }) => { let a = N(e.getAttributes, void 0, r) || {}, o = t.tr.delete(n.from, n.to), s = o.doc.resolve(n.from).blockRange(), c = s && Pt(s, e.type, a); if (!c) return null; if (o.wrap(s, c), e.keepMarks && e.editor) { let { selection: n, storedMarks: r } = t, { splittableMarks: i } = e.editor.extensionManager, a = r || n.$to.parentOffset && n.$from.marks(); if (a) { let e = a.filter((e) => i.includes(e.type.name)); o.ensureMarks(e); } } if (e.keepAttributes) { let t = e.type.name === "bulletList" || e.type.name === "orderedList" ? "listItem" : "taskList"; i().updateAttributes(t, a).run(); } let l = o.doc.resolve(n.from - 1).nodeBefore; l && l.type === e.type && Kt(o.doc, n.from - 1) && (!e.joinPredicate || e.joinPredicate(r, l)) && o.join(n.from - 1); }, undoable: e.undoable }); } var Md = (e) => "touches" in e, Nd = class { constructor(e) { this.directions = [ "bottom-left", "bottom-right", "top-left", "top-right" ], this.minSize = { height: 8, width: 8 }, this.preserveAspectRatio = !1, this.classNames = { container: "", wrapper: "", handle: "", resizing: "" }, this.initialWidth = 0, this.initialHeight = 0, this.aspectRatio = 1, this.isResizing = !1, this.activeHandle = null, this.startX = 0, this.startY = 0, this.startWidth = 0, this.startHeight = 0, this.isShiftKeyPressed = !1, this.lastEditableState = void 0, this.handleMap = /* @__PURE__ */ new Map(), this.handleMouseMove = (e) => { if (!this.isResizing || !this.activeHandle) return; let t = e.clientX - this.startX, n = e.clientY - this.startY; this.handleResize(t, n); }, this.handleTouchMove = (e) => { if (!this.isResizing || !this.activeHandle) return; let t = e.touches[0]; if (!t) return; let n = t.clientX - this.startX, r = t.clientY - this.startY; this.handleResize(n, r); }, this.handleMouseUp = () => { if (!this.isResizing) return; let e = this.element.offsetWidth, t = this.element.offsetHeight; this.onCommit(e, t), this.isResizing = !1, this.activeHandle = null, this.container.dataset.resizeState = "false", this.classNames.resizing && this.container.classList.remove(this.classNames.resizing), document.removeEventListener("mousemove", this.handleMouseMove), document.removeEventListener("mouseup", this.handleMouseUp), document.removeEventListener("keydown", this.handleKeyDown), document.removeEventListener("keyup", this.handleKeyUp); }, this.handleKeyDown = (e) => { e.key === "Shift" && (this.isShiftKeyPressed = !0); }, this.handleKeyUp = (e) => { e.key === "Shift" && (this.isShiftKeyPressed = !1); }, this.node = e.node, this.editor = e.editor, this.element = e.element, this.element.draggable = !1, this.contentElement = e.contentElement, this.getPos = e.getPos, this.onResize = e.onResize, this.onCommit = e.onCommit, this.onUpdate = e.onUpdate, e.options?.min && (this.minSize = { ...this.minSize, ...e.options.min }), e.options?.max && (this.maxSize = e.options.max), e?.options?.directions && (this.directions = e.options.directions), e.options?.preserveAspectRatio && (this.preserveAspectRatio = e.options.preserveAspectRatio), e.options?.className && (this.classNames = { container: e.options.className.container || "", wrapper: e.options.className.wrapper || "", handle: e.options.className.handle || "", resizing: e.options.className.resizing || "" }), e.options?.createCustomHandle && (this.createCustomHandle = e.options.createCustomHandle), this.wrapper = this.createWrapper(), this.container = this.createContainer(), this.applyInitialSize(), this.attachHandles(), this.editor.on("update", this.handleEditorUpdate.bind(this)); } get dom() { return this.container; } get contentDOM() { return this.contentElement ?? null; } handleEditorUpdate() { let e = this.editor.isEditable; e !== this.lastEditableState && (this.lastEditableState = e, e ? e && this.handleMap.size === 0 && this.attachHandles() : this.removeHandles()); } update(e, t, n) { return e.type === this.node.type ? (this.node = e, this.onUpdate ? this.onUpdate(e, t, n) : !0) : !1; } destroy() { this.isResizing && (this.container.dataset.resizeState = "false", this.classNames.resizing && this.container.classList.remove(this.classNames.resizing), document.removeEventListener("mousemove", this.handleMouseMove), document.removeEventListener("mouseup", this.handleMouseUp), document.removeEventListener("keydown", this.handleKeyDown), document.removeEventListener("keyup", this.handleKeyUp), this.isResizing = !1, this.activeHandle = null), this.editor.off("update", this.handleEditorUpdate.bind(this)), this.container.remove(); } createContainer() { let e = document.createElement("div"); return e.dataset.resizeContainer = "", e.dataset.node = this.node.type.name, e.style.display = this.node.type.isInline ? "inline-flex" : "flex", this.classNames.container && (e.className = this.classNames.container), e.appendChild(this.wrapper), e; } createWrapper() { let e = document.createElement("div"); return e.style.position = "relative", e.style.display = "block", e.dataset.resizeWrapper = "", this.classNames.wrapper && (e.className = this.classNames.wrapper), e.appendChild(this.element), e; } createHandle(e) { let t = document.createElement("div"); return t.dataset.resizeHandle = e, t.style.position = "absolute", this.classNames.handle && (t.className = this.classNames.handle), t; } positionHandle(e, t) { let n = t.includes("top"), r = t.includes("bottom"), i = t.includes("left"), a = t.includes("right"); n && (e.style.top = "0"), r && (e.style.bottom = "0"), i && (e.style.left = "0"), a && (e.style.right = "0"), (t === "top" || t === "bottom") && (e.style.left = "0", e.style.right = "0"), (t === "left" || t === "right") && (e.style.top = "0", e.style.bottom = "0"); } attachHandles() { this.directions.forEach((e) => { let t; t = this.createCustomHandle ? this.createCustomHandle(e) : this.createHandle(e), t instanceof HTMLElement || (console.warn(`[ResizableNodeView] createCustomHandle("${e}") did not return an HTMLElement. Falling back to default handle.`), t = this.createHandle(e)), this.createCustomHandle || this.positionHandle(t, e), t.addEventListener("mousedown", (t) => this.handleResizeStart(t, e)), t.addEventListener("touchstart", (t) => this.handleResizeStart(t, e)), this.handleMap.set(e, t), this.wrapper.appendChild(t); }); } removeHandles() { this.handleMap.forEach((e) => e.remove()), this.handleMap.clear(); } applyInitialSize() { let e = this.node.attrs.width, t = this.node.attrs.height; e ? (this.element.style.width = `${e}px`, this.initialWidth = e) : this.initialWidth = this.element.offsetWidth, t ? (this.element.style.height = `${t}px`, this.initialHeight = t) : this.initialHeight = this.element.offsetHeight, this.initialWidth > 0 && this.initialHeight > 0 && (this.aspectRatio = this.initialWidth / this.initialHeight); } handleResizeStart(e, t) { e.preventDefault(), e.stopPropagation(), this.isResizing = !0, this.activeHandle = t, Md(e) ? (this.startX = e.touches[0].clientX, this.startY = e.touches[0].clientY) : (this.startX = e.clientX, this.startY = e.clientY), this.startWidth = this.element.offsetWidth, this.startHeight = this.element.offsetHeight, this.startWidth > 0 && this.startHeight > 0 && (this.aspectRatio = this.startWidth / this.startHeight), this.getPos(), this.container.dataset.resizeState = "true", this.classNames.resizing && this.container.classList.add(this.classNames.resizing), document.addEventListener("mousemove", this.handleMouseMove), document.addEventListener("touchmove", this.handleTouchMove), document.addEventListener("mouseup", this.handleMouseUp), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("keyup", this.handleKeyUp); } handleResize(e, t) { if (!this.activeHandle) return; let n = this.preserveAspectRatio || this.isShiftKeyPressed, { width: r, height: i } = this.calculateNewDimensions(this.activeHandle, e, t), a = this.applyConstraints(r, i, n); this.element.style.width = `${a.width}px`, this.element.style.height = `${a.height}px`, this.onResize && this.onResize(a.width, a.height); } calculateNewDimensions(e, t, n) { let r = this.startWidth, i = this.startHeight, a = e.includes("right"), o = e.includes("left"), s = e.includes("bottom"), c = e.includes("top"); return a ? r = this.startWidth + t : o && (r = this.startWidth - t), s ? i = this.startHeight + n : c && (i = this.startHeight - n), (e === "right" || e === "left") && (r = this.startWidth + (a ? t : -t)), (e === "top" || e === "bottom") && (i = this.startHeight + (s ? n : -n)), this.preserveAspectRatio || this.isShiftKeyPressed ? this.applyAspectRatio(r, i, e) : { width: r, height: i }; } applyConstraints(e, t, n) { if (!n) { let n = Math.max(this.minSize.width, e), r = Math.max(this.minSize.height, t); return this.maxSize?.width && (n = Math.min(this.maxSize.width, n)), this.maxSize?.height && (r = Math.min(this.maxSize.height, r)), { width: n, height: r }; } let r = e, i = t; return r < this.minSize.width && (r = this.minSize.width, i = r / this.aspectRatio), i < this.minSize.height && (i = this.minSize.height, r = i * this.aspectRatio), this.maxSize?.width && r > this.maxSize.width && (r = this.maxSize.width, i = r / this.aspectRatio), this.maxSize?.height && i > this.maxSize.height && (i = this.maxSize.height, r = i * this.aspectRatio), { width: r, height: i }; } applyAspectRatio(e, t, n) { return n === "left" || n === "right" ? { width: e, height: e / this.aspectRatio } : n === "top" || n === "bottom" ? { width: t * this.aspectRatio, height: t } : { width: e, height: e / this.aspectRatio }; } }; function Pd(e, t) { if (e === t) return !0; if (!e || !t) return !1; let n = Object.keys(e), r = Object.keys(t); return n.length === r.length ? n.every((n) => Object.prototype.hasOwnProperty.call(t, n) && Object.is(e[n], t[n])) : !1; } function Fd(e, t) { let { selection: n } = e, { $from: r } = n; if (n instanceof C) { let e = r.index(); return r.parent.canReplaceWith(e, e + 1, t); } let i = r.depth; for (; i >= 0;) { let e = r.index(i); if (r.node(i).contentMatchAt(e).matchType(t)) return !0; --i; } return !1; } function Id(e) { return e.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, "\"").replace(/&/g, "&"); } function Ld(e) { return e.replace(/&/g, "&").replace(//g, ">"); } pc({}, { createAtomBlockMarkdownSpec: () => Bd, createBlockMarkdownSpec: () => Vd, createInlineMarkdownSpec: () => Wd, parseAttributes: () => Rd, parseIndentedBlocks: () => Gd, renderNestedMarkdownContent: () => Kd, serializeAttributes: () => zd }); function Rd(e) { if (!e?.trim()) return {}; let t = {}, n = [], r = e.replace(/["']([^"']*)["']/g, (e) => (n.push(e), `__QUOTED_${n.length - 1}__`)), i = r.match(/(?:^|\s)\.([a-zA-Z][\w-]*)/g); i && (t.class = i.map((e) => e.trim().slice(1)).join(" ")); let a = r.match(/(?:^|\s)#([a-zA-Z][\w-]*)/); a && (t.id = a[1]), Array.from(r.matchAll(/([a-zA-Z][\w-]*)\s*=\s*(__QUOTED_\d+__)/g)).forEach(([, e, r]) => { let i = n[parseInt(r.match(/__QUOTED_(\d+)__/)?.[1] || "0", 10)]; i && (t[e] = i.slice(1, -1)); }); let o = r.replace(/(?:^|\s)\.([a-zA-Z][\w-]*)/g, "").replace(/(?:^|\s)#([a-zA-Z][\w-]*)/g, "").replace(/([a-zA-Z][\w-]*)\s*=\s*__QUOTED_\d+__/g, "").trim(); return o && o.split(/\s+/).filter(Boolean).forEach((e) => { e.match(/^[a-zA-Z][\w-]*$/) && (t[e] = !0); }), t; } function zd(e) { if (!e || Object.keys(e).length === 0) return ""; let t = []; return e.class && String(e.class).split(/\s+/).filter(Boolean).forEach((e) => t.push(`.${e}`)), e.id && t.push(`#${e.id}`), Object.entries(e).forEach(([e, n]) => { e === "class" || e === "id" || (n === !0 ? t.push(e) : n !== !1 && n != null && t.push(`${e}="${String(n)}"`)); }), t.join(" "); } function Bd(e) { let { nodeName: t, name: n, parseAttributes: r = Rd, serializeAttributes: i = zd, defaultAttributes: a = {}, requiredAttributes: o = [], allowedAttributes: s } = e, c = n || t, l = (e) => { if (!s) return e; let t = {}; return s.forEach((n) => { n in e && (t[n] = e[n]); }), t; }; return { parseMarkdown: (e, n) => { let r = { ...a, ...e.attributes }; return n.createNode(t, r, []); }, markdownTokenizer: { name: t, level: "block", start(e) { let t = RegExp(`^:::${c}(?:\\s|$)`, "m"), n = e.match(t)?.index; return n === void 0 ? -1 : n; }, tokenize(e, n, i) { let a = RegExp(`^:::${c}(?:\\s+\\{([^}]*)\\})?\\s*:::(?:\\n|$)`), s = e.match(a); if (!s) return; let l = r(s[1] || ""); if (!o.find((e) => !(e in l))) return { type: t, raw: s[0], attributes: l }; } }, renderMarkdown: (e) => { let t = i(l(e.attrs || {})); return `:::${c}${t ? ` {${t}}` : ""} :::`; } }; } function Vd(e) { let { nodeName: t, name: n, getContent: r, parseAttributes: i = Rd, serializeAttributes: a = zd, defaultAttributes: o = {}, content: s = "block", allowedAttributes: c } = e, l = n || t, u = (e) => { if (!c) return e; let t = {}; return c.forEach((n) => { n in e && (t[n] = e[n]); }), t; }; return { parseMarkdown: (e, n) => { let i; if (r) { let t = r(e); i = typeof t == "string" ? [{ type: "text", text: t }] : t; } else i = s === "block" ? n.parseChildren(e.tokens || []) : n.parseInline(e.tokens || []); let a = { ...o, ...e.attributes }; return n.createNode(t, a, i); }, markdownTokenizer: { name: t, level: "block", start(e) { let t = RegExp(`^:::${l}`, "m"), n = e.match(t)?.index; return n === void 0 ? -1 : n; }, tokenize(e, n, r) { let a = RegExp(`^:::${l}(?:\\s+\\{([^}]*)\\})?\\s*\\n`), o = e.match(a); if (!o) return; let [c, u = ""] = o, d = i(u), f = 1, p = c.length, m = "", h = /^:::([\w-]*)(\s.*)?/gm, g = e.slice(p); for (h.lastIndex = 0;;) { let n = h.exec(g); if (n === null) break; let i = n.index, a = n[1]; if (!n[2]?.endsWith(":::")) { if (a) f += 1; else if (--f, f === 0) { let a = g.slice(0, i); m = a.trim(); let o = e.slice(0, p + i + n[0].length), c = []; if (m) if (s === "block") for (c = r.blockTokens(a), c.forEach((e) => { e.text && (!e.tokens || e.tokens.length === 0) && (e.tokens = r.inlineTokens(e.text)); }); c.length > 0;) { let e = c[c.length - 1]; if (e.type === "paragraph" && (!e.text || e.text.trim() === "")) c.pop(); else break; } else c = r.inlineTokens(m); return { type: t, raw: o, attributes: d, content: m, tokens: c }; } } } } }, renderMarkdown: (e, t) => { let n = a(u(e.attrs || {})); return `:::${l}${n ? ` {${n}}` : ""} ${t.renderChildren(e.content || [], "\n\n")} :::`; } }; } function Hd(e) { if (!e.trim()) return {}; let t = {}, n = /(\w+)=(?:"([^"]*)"|'([^']*)')/g, r = n.exec(e); for (; r !== null;) { let [, i, a, o] = r; t[i] = a || o, r = n.exec(e); } return t; } function Ud(e) { return Object.entries(e).filter(([, e]) => e != null).map(([e, t]) => `${e}="${t}"`).join(" "); } function Wd(e) { let { nodeName: t, name: n, getContent: r, parseAttributes: i = Hd, serializeAttributes: a = Ud, defaultAttributes: o = {}, selfClosing: s = !1, allowedAttributes: c } = e, l = n || t, u = (e) => { if (!c) return e; let t = {}; return c.forEach((n) => { let r = typeof n == "string" ? n : n.name, i = typeof n == "string" ? void 0 : n.skipIfDefault; if (r in e) { let n = e[r]; if (i !== void 0 && n === i) return; t[r] = n; } }), t; }, d = l.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); return { parseMarkdown: (e, n) => { let i = { ...o, ...e.attributes }; if (s) return n.createNode(t, i); let a = r ? r(e) : e.content || ""; return a ? n.createNode(t, i, [n.createTextNode(a)]) : n.createNode(t, i, []); }, markdownTokenizer: { name: t, level: "inline", start(e) { let t = RegExp(s ? `\\[${d}\\s*[^\\]]*\\]` : `\\[${d}\\s*[^\\]]*\\][\\s\\S]*?\\[\\/${d}\\]`), n = e.match(t)?.index; return n === void 0 ? -1 : n; }, tokenize(e, n, r) { let a = RegExp(s ? `^\\[${d}\\s*([^\\]]*)\\]` : `^\\[${d}\\s*([^\\]]*)\\]([\\s\\S]*?)\\[\\/${d}\\]`), o = e.match(a); if (!o) return; let c = "", l = ""; if (s) { let [, e] = o; l = e; } else { let [, e, t] = o; l = e, c = t || ""; } let u = i(l.trim()); return { type: t, raw: o[0], content: c.trim(), attributes: u }; } }, renderMarkdown: (e) => { let t = ""; r ? t = r(e) : e.content && e.content.length > 0 && (t = e.content.filter((e) => e.type === "text").map((e) => e.text).join("")); let n = a(u(e.attrs || {})), i = n ? ` ${n}` : ""; return s ? `[${l}${i}]` : `[${l}${i}]${t}[/${l}]`; } }; } function Gd(e, t, n) { let r = e.split("\n"), i = [], a = "", o = 0, s = t.baseIndentSize || 2; for (; o < r.length;) { let e = r[o], c = e.match(t.itemPattern); if (!c) { if (i.length > 0) break; if (e.trim() === "") { o += 1, a = `${a}${e} `; continue; } else return; } let l = t.extractItemData(c), { indentLevel: u, mainContent: d } = l; a = `${a}${e} `; let f = [d]; for (o += 1; o < r.length;) { let e = r[o]; if (e.trim() === "") { let t = r.slice(o + 1).findIndex((e) => e.trim() !== ""); if (t === -1) break; if ((r[o + 1 + t].match(/^(\s*)/)?.[1]?.length || 0) > u) { f.push(e), a = `${a}${e} `, o += 1; continue; } else break; } if ((e.match(/^(\s*)/)?.[1]?.length || 0) > u) f.push(e), a = `${a}${e} `, o += 1; else break; } let p, m = f.slice(1); if (m.length > 0) { let e = m.map((e) => e.slice(u + s)).join("\n"); e.trim() && (p = t.customNestedParser ? t.customNestedParser(e) : n.blockTokens(e)); } let h = t.createToken(l, p); i.push(h); } if (i.length !== 0) return { items: i, raw: a }; } function Kd(e, t, n, r) { if (!e || !Array.isArray(e.content)) return ""; let i = typeof n == "function" ? n(r) : n, [a, ...o] = e.content, s = `${i}${t.renderChildren([a])}`; return o && o.length > 0 && o.forEach((e, n) => { let r = t.renderChild?.call(t, e, n + 1) ?? t.renderChildren([e]); if (r != null) { let n = r.split("\n").map((e) => e ? t.indent(e) : t.indent("")).join("\n"); s += e.type === "paragraph" ? ` ${n}` : ` ${n}`; } }), s; } function qd(e, t) { return e.length === t.length ? e.every((e, n) => { let r = t[n]; return e.type === r.type && Pd(e.attrs, r.attrs); }) : !1; } function Jd(e, t, n = {}) { let { state: r } = t, { doc: i, tr: a } = r, o = e; i.descendants((t, r) => { let i = a.mapping.map(r), s = a.mapping.map(r) + t.nodeSize, c = null; if (t.marks.forEach((e) => { if (e !== o) return !1; c = e; }), !c) return; let l = !1; if (Object.keys(n).forEach((e) => { n[e] !== c.attrs[e] && (l = !0); }), l) { let t = e.type.create({ ...e.attrs, ...n }); a.removeMark(i, s, e.type), a.addMark(i, s, t); } }), a.docChanged && t.view.dispatch(a); } var Yd = class e extends rd { constructor() { super(...arguments), this.type = "node"; } static create(t = {}) { return new e(typeof t == "function" ? t() : t); } configure(e) { return super.configure(e); } extend(e) { let t = typeof e == "function" ? e() : e; return super.extend(t); } }; function Xd(e) { return new od({ find: e.find, handler: ({ state: t, range: n, match: r, pasteEvent: i }) => { let a = N(e.getAttributes, void 0, r, i); if (a === !1 || a === null) return null; let { tr: o } = t, s = r[r.length - 1], c = r[0], l = n.to; if (s) { let i = c.search(/\S/), u = n.from + c.indexOf(s), d = u + s.length; if (cu(n.from, n.to, t.doc).filter((t) => t.mark.type.excluded.find((n) => n === e.type && n !== t.mark.type)).filter((e) => e.to > u).length) return null; d < n.to && o.delete(d, n.to), u > n.from && o.delete(n.from + i, u), l = n.from + i + s.length, o.addMark(n.from + i, l, e.type.create(a || {})), r.index !== void 0 && r.input !== void 0 && r.index + r[0].length >= r.input.length || o.removeStoredMark(e.type); } } }); } //#endregion //#region node_modules/.pnpm/@tiptap+extension-image@3.26.1_@tiptap+core@3.26.1_@tiptap+pm@3.26.1_/node_modules/@tiptap/extension-image/dist/index.js var Zd = /(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/, Qd = Yd.create({ name: "image", addOptions() { return { inline: !1, allowBase64: !1, HTMLAttributes: {}, resize: !1 }; }, inline() { return this.options.inline; }, group() { return this.options.inline ? "inline" : "block"; }, draggable: !0, addAttributes() { return { src: { default: null }, alt: { default: null }, title: { default: null }, width: { default: null }, height: { default: null } }; }, parseHTML() { return [{ tag: this.options.allowBase64 ? "img[src]" : "img[src]:not([src^=\"data:\"])" }]; }, renderHTML({ HTMLAttributes: e }) { return ["img", P(this.options.HTMLAttributes, e)]; }, parseMarkdown: (e, t) => t.createNode("image", { src: e.href, title: e.title, alt: e.text }), renderMarkdown: (e) => { let t = e.attrs?.src ?? "", n = e.attrs?.alt ?? "", r = e.attrs?.title ?? ""; return r ? `` : ``; }, addNodeView() { if (!this.options.resize || !this.options.resize.enabled || typeof document > "u") return null; let { directions: e, minWidth: t, minHeight: n, alwaysPreserveAspectRatio: r } = this.options.resize; return ({ node: i, getPos: a, HTMLAttributes: o, editor: s }) => { let c = document.createElement("img"); c.draggable = !1; let l = P(this.options.HTMLAttributes, o); Object.entries(l).forEach(([e, t]) => { if (t != null) switch (e) { case "width": case "height": break; default: c.setAttribute(e, t); break; } }), l.src !== null && (c.src = l.src); let u = new Nd({ element: c, editor: s, node: i, getPos: a, onResize: (e, t) => { c.style.width = `${e}px`, c.style.height = `${t}px`; }, onCommit: (e, t) => { let n = a(); n !== void 0 && this.editor.chain().setNodeSelection(n).updateAttributes(this.name, { width: e, height: t }).run(); }, onUpdate: (e, t, n) => e.type === i.type, options: { directions: e, min: { width: t, height: n }, preserveAspectRatio: r === !0 } }), d = u.dom; return d.style.visibility = "hidden", d.style.pointerEvents = "none", c.onload = () => { d.style.visibility = "", d.style.pointerEvents = ""; }, u; }; }, addCommands() { return { setImage: (e) => ({ commands: t }) => t.insertContent({ type: this.name, attrs: e }) }; }, addInputRules() { return [kd({ find: Zd, type: this.type, getAttributes: (e) => { let [, , t, n, r] = e; return { src: n, alt: t, title: r }; } })]; } }), $d = F.create({ name: "textAlign", addOptions() { return { types: [], alignments: [ "left", "center", "right", "justify" ], defaultAlignment: null }; }, addGlobalAttributes() { return [{ types: this.options.types, attributes: { textAlign: { default: this.options.defaultAlignment, parseHTML: (e) => { let t = e.style.textAlign; return this.options.alignments.includes(t) ? t : this.options.defaultAlignment; }, renderHTML: (e) => e.textAlign ? { style: `text-align: ${e.textAlign}` } : {} } } }]; }, addCommands() { return { setTextAlign: (e) => ({ commands: t }) => this.options.alignments.includes(e) ? this.options.types.map((n) => t.updateAttributes(n, { textAlign: e })).some((e) => e) : !1, unsetTextAlign: () => ({ commands: e }) => this.options.types.map((t) => e.resetAttributes(t, "textAlign")).some((e) => e), toggleTextAlign: (e) => ({ editor: t, commands: n }) => this.options.alignments.includes(e) ? t.isActive({ textAlign: e }) ? n.unsetTextAlign() : n.setTextAlign(e) : !1 }; }, addKeyboardShortcuts() { return { "Mod-Shift-l": () => this.editor.commands.setTextAlign("left"), "Mod-Shift-e": () => this.editor.commands.setTextAlign("center"), "Mod-Shift-r": () => this.editor.commands.setTextAlign("right"), "Mod-Shift-j": () => this.editor.commands.setTextAlign("justify") }; } }); //#endregion //#region node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.js function ef() { return { async: !1, breaks: !1, extensions: null, gfm: !0, hooks: null, pedantic: !1, renderer: null, silent: !1, tokenizer: null, walkTokens: null }; } var tf = ef(); function nf(e) { tf = e; } var rf = { exec: () => null }; function I(e, t = "") { let n = typeof e == "string" ? e : e.source, r = { replace: (e, t) => { let i = typeof t == "string" ? t : t.source; return i = i.replace(of.caret, "$1"), n = n.replace(e, i), r; }, getRegex: () => new RegExp(n, t) }; return r; } var af = (() => { try { return !0; } catch { return !1; } })(), of = { codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (e) => RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`), hrRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), fencesBeginRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}(?:\`\`\`|~~~)`), headingBeginRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}#`), htmlBeginRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}<(?:[a-z].*>|!--)`, "i"), blockquoteBeginRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}>`) }, sf = /^(?:[ \t]*(?:\n|$))+/, cf = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/, lf = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/, uf = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, df = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, ff = / {0,3}(?:[*+-]|\d{1,9}[.)])/, pf = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/, mf = I(pf).replace(/bull/g, ff).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex(), hf = I(pf).replace(/bull/g, ff).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(), gf = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, _f = /^[^\n]+/, vf = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/, yf = I(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", vf).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(), bf = I(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, ff).getRegex(), xf = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul", Sf = /|$))/, Cf = I("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", Sf).replace("tag", xf).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(), wf = I(gf).replace("hr", uf).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", xf).getRegex(), Tf = { blockquote: I(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", wf).getRegex(), code: cf, def: yf, fences: lf, heading: df, hr: uf, html: Cf, lheading: mf, list: bf, newline: sf, paragraph: wf, table: rf, text: _f }, Ef = I("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", uf).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", xf).getRegex(), Df = { ...Tf, lheading: hf, table: Ef, paragraph: I(gf).replace("hr", uf).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", Ef).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", xf).getRegex() }, Of = { ...Tf, html: I("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)|" + (n ? i : mp(i, !0)) + "\n" : "" + (n ? i : mp(i, !0)) + "\n";
}
blockquote({ tokens: e }) {
return `${this.parser.parse(e)}`; } html({ text: e }) { return e; } def(e) { return ""; } heading({ tokens: e, depth: t }) { return `
${this.parser.parseInline(e)}
`; } table(e) { let t = "", n = ""; for (let t = 0; t < e.header.length; t++) n += this.tablecell(e.header[t]); t += this.tablerow({ text: n }); let r = ""; for (let t = 0; t < e.rows.length; t++) { let i = e.rows[t]; n = ""; for (let e = 0; e < i.length; e++) n += this.tablecell(i[e]); r += this.tablerow({ text: n }); } return r &&= `${r}`, "${mp(e, !0)}`;
}
br(e) {
return "An error occurred:
" + mp(n.message + "", !0) + ""; return t ? Promise.resolve(e) : e; } if (t) return Promise.reject(n); throw n; }; } }(); function L(e, t) { return Op.parse(e, t); } L.options = L.setOptions = function(e) { return Op.setOptions(e), L.defaults = Op.defaults, nf(L.defaults), L; }, L.getDefaults = ef, L.defaults = tf, L.use = function(...e) { return Op.use(...e), L.defaults = Op.defaults, nf(L.defaults), L; }, L.walkTokens = function(e, t) { return Op.walkTokens(e, t); }, L.parseInline = Op.parseInline, L.Parser = Ep, L.parser = Ep.parse, L.Renderer = wp, L.TextRenderer = Tp, L.Lexer = Cp, L.lexer = Cp.lex, L.Tokenizer = Sp, L.Hooks = Dp, L.parse = L, L.options, L.setOptions, L.use, L.walkTokens, L.parseInline, Ep.parse, Cp.lex; //#endregion //#region node_modules/.pnpm/@tiptap+markdown@3.26.1_@tiptap+core@3.26.1_@tiptap+pm@3.26.1__@tiptap+pm@3.26.1/node_modules/@tiptap/markdown/dist/index.js function kp(e, t) { let n = t.split("\n").flatMap((e) => [e, ""]).map((t) => `${e}${t}`).join("\n"); return n.slice(0, n.length - 1); } function Ap(e, t) { let n = []; return Array.from(e.entries()).forEach(([e, r]) => { if (!t) { n.push(e); return; } (t.marks || []).find((t) => t.type === e && Pd(t.attrs, r.attrs)) || n.push(e); }), n; } function jp(e, t) { let n = []; return Array.from(t.entries()).forEach(([t, r]) => { let i = e.get(t); (!i || !Pd(i.attrs, r.attrs)) && n.push({ type: t, mark: r }); }), n; } function Mp(e, t, n, r) { let i = !n, a = n && (!n.marks || n.marks.length === 0), o = n && n.marks && !r(t, new Map(n.marks.map((e) => [e.type, e]))), s = []; return (i || a || o) && (n && n.marks ? Array.from(e.entries()).reverse().forEach(([e, t]) => { n.marks.find((n) => n.type === e && Pd(n.attrs, t.attrs)) || s.push(e); }) : (i || a) && s.push(...Array.from(e.keys()).reverse())), s; } function Np(e, t) { let n = ""; return Array.from(e.keys()).reverse().forEach((r) => { let i = t(r, e.get(r)); i && (n = i + n); }), e.clear(), n; } function Pp(e, t, n) { let r = ""; return Array.from(e.entries()).forEach(([e, i]) => { let a = n(e, i); a && (r += a), t.set(e, i); }), r; } function Fp(e) { let t = (e.raw || e.text || "").match(/^(\s*)[-+*]\s+\[([ xX])\]\s+/); return t ? { isTask: !0, checked: t[2].toLowerCase() === "x", indentLevel: t[1].length } : { isTask: !1, indentLevel: 0 }; } function Ip(e, t) { return typeof e == "string" ? t : "json"; } var Lp = (e) => { let t = window.HTMLUnknownElement; return typeof t == "function" && e instanceof t; }, Rp = class { constructor(e) { this.activeParseLexer = null, this.extensionRanks = /* @__PURE__ */ new Map(), this.baseExtensions = [], this.extensions = [], this.codeTypes = /* @__PURE__ */ new Set(), this.schemaParseDomTagsCache = null, this.lastParseResult = null, this.markedInstance = e?.marked ?? L, this.indentStyle = e?.indentation?.style ?? "space", this.indentSize = e?.indentation?.size ?? 2, this.baseExtensions = e?.extensions || [], e?.markedOptions && typeof this.markedInstance.setOptions == "function" && this.markedInstance.setOptions(e.markedOptions), this.registry = /* @__PURE__ */ new Map(), this.nodeTypeRegistry = /* @__PURE__ */ new Map(), e?.extensions && (this.baseExtensions = e.extensions, Xl(Fl(e.extensions)).forEach((e) => this.registerExtension(e))); } get instance() { return this.markedInstance; } get indentCharacter() { return this.indentStyle === "space" ? " " : " "; } get indentString() { return this.indentCharacter.repeat(this.indentSize); } hasMarked() { return !!this.markedInstance; } registerExtension(e) { this.extensions.push(e); let t = N(M(e, "code")), n = e.name; t && this.codeTypes.add(n), this.extensionRanks.has(n) || this.extensionRanks.set(n, this.extensionRanks.size); let r = M(e, "markdownTokenName") || n, i = M(e, "parseMarkdown"), a = M(e, "renderMarkdown"), o = M(e, "markdownTokenizer"), s = M(e, "markdownOptions") ?? null, c = { tokenName: r, nodeName: n, parseMarkdown: i, renderMarkdown: a, isIndenting: s?.indentsContent ?? !1, htmlReopen: s?.htmlReopen, tokenizer: o }; if (r && i) { let e = this.registry.get(r) || []; e.push(c), this.registry.set(r, e); } if (a) { let e = this.nodeTypeRegistry.get(n) || []; e.push(c), this.nodeTypeRegistry.set(n, e); } o && this.hasMarked() && this.registerTokenizer(o); } createLexer() { return new this.markedInstance.Lexer(); } createTokenizerHelpers(e) { return { inlineTokens: (t) => e.inlineTokens(t), blockTokens: (t) => e.blockTokens(t) }; } tokenizeInline(e) { return (this.activeParseLexer ?? this.createLexer()).inlineTokens(e); } registerTokenizer(e) { if (!this.hasMarked()) return; let { name: t, start: n, level: r = "inline", tokenize: i } = e, a = this.createTokenizerHelpers.bind(this), o = this.createLexer.bind(this), s; s = n ? typeof n == "function" ? n : (e) => e.indexOf(n) : (e) => { let t = i(e, [], this.createTokenizerHelpers(this.createLexer())); return t && t.raw ? e.indexOf(t.raw) : -1; }; let c = { name: t, level: r, start: s, tokenizer(e, n) { let r = i(e, n, this.lexer ? a(this.lexer) : a(o())); if (r && r.type) return { ...r, type: r.type || t, raw: r.raw || "", tokens: r.tokens || [] }; }, childTokens: [] }; this.markedInstance.use({ extensions: [c] }); } getHandlersForToken(e) { try { return this.registry.get(e) || []; } catch { return []; } } getHandlerForToken(e) { let t = this.getHandlersForToken(e); if (t.length > 0) return t[0]; let n = this.getHandlersForNodeType(e); return n.length > 0 ? n[0] : void 0; } getHandlersForNodeType(e) { try { return this.nodeTypeRegistry.get(e) || []; } catch { return []; } } serialize(e) { if (!e) return ""; let t = this.renderNodes(e, e); return this.isEmptyOutput(t) ? "" : t; } isEmptyOutput(e) { return !e || e.trim() === "" ? !0 : e.replace(/ /g, "").replace(/\u00A0/g, "").trim() === ""; } parse(e) { if (!this.hasMarked()) throw Error("No marked instance available for parsing"); let t = this.activeParseLexer, n = this.createLexer(); this.activeParseLexer = n; try { let t = n.lex(e); return { type: "doc", content: this.parseTokens(t, !0) }; } finally { this.activeParseLexer = t; } } parseTokens(e, t = !1) { let n = e.reduce((e, t, n) => (t.type !== "space" && e.push(n), e), []), r = -1, i = 0; return e.flatMap((e, a) => { for (; i < n.length && n[i] < a;) r = n[i], i += 1; if (t && e.type === "space") { let t = n[i] ?? -1; return this.createImplicitEmptyParagraphsFromSpace(e, r, t); } let o = this.parseToken(e, t); return o === null ? [] : Array.isArray(o) ? o : [o]; }); } createImplicitEmptyParagraphsFromSpace(e, t, n) { let r = this.countParagraphSeparators(e.raw || ""); if (r === 0) return []; let i = Math.max(r - (t === -1 || n === -1 ? 0 : 1), 0); return Array.from({ length: i }, () => ({ type: "paragraph", content: [] })); } countParagraphSeparators(e) { return (e.replace(/\r\n/g, "\n").match(/\n\n/g) || []).length; } parseToken(e, t = !1) { if (!e.type) return null; if (e.type === "list") return this.parseListToken(e); let n = this.getHandlersForToken(e.type), r = this.createParseHelpers(); if (n.find((t) => { if (!t.parseMarkdown) return !1; let n = t.parseMarkdown(e, r), i = this.normalizeParseResult(n); return i && (!Array.isArray(i) || i.length > 0) ? (this.lastParseResult = i, !0) : !1; }) && this.lastParseResult) { let e = this.lastParseResult; return this.lastParseResult = null, e; } return this.parseFallbackToken(e, t); } parseListToken(e) { if (!e.items || e.items.length === 0) return this.parseTokenWithHandlers(e); let t = e.items.some((e) => Fp(e).isTask), n = e.items.some((e) => !Fp(e).isTask); if (!t || !n || this.getHandlersForToken("taskList").length === 0) return this.parseTokenWithHandlers(e); let r = [], i = [], a = null; for (let t = 0; t < e.items.length; t += 1) { let n = e.items[t], { isTask: o, checked: s, indentLevel: c } = Fp(n), l = n; if (o) { let e = (n.raw || n.text || "").split("\n"), t = e[0].match(/^\s*[-+*]\s+\[([ xX])\]\s+(.*)$/), r = t ? t[2] : "", i = []; if (e.length > 1 && e.slice(1).join("\n").trim()) { let t = e.slice(1), n = t.filter((e) => e.trim()); if (n.length > 0) { let e = Math.min(...n.map((e) => e.length - e.trimStart().length)), r = t.map((t) => t.trim() ? t.slice(e) : "").join("\n").trim(); r && (i = this.markedInstance.lexer(`${r} `)); } } l = { type: "taskItem", raw: "", mainContent: r, indentLevel: c, checked: s ?? !1, text: r, tokens: this.tokenizeInline(r), nestedTokens: i }; } let u = o ? "taskList" : "list"; a === u ? i.push(l) : (i.length > 0 && r.push({ type: a, items: i }), i = [l], a = u); } i.length > 0 && r.push({ type: a, items: i }); let o = []; for (let t = 0; t < r.length; t += 1) { let n = r[t], i = { ...e, type: n.type, items: n.items }, a = this.parseToken(i); a && (Array.isArray(a) ? o.push(...a) : o.push(a)); } return o.length > 0 ? o : null; } parseTokenWithHandlers(e) { if (!e.type) return null; let t = this.getHandlersForToken(e.type), n = this.createParseHelpers(); if (t.find((t) => { if (!t.parseMarkdown) return !1; let r = t.parseMarkdown(e, n), i = this.normalizeParseResult(r); return i && (!Array.isArray(i) || i.length > 0) ? (this.lastParseResult = i, !0) : !1; }) && this.lastParseResult) { let e = this.lastParseResult; return this.lastParseResult = null, e; } return this.parseFallbackToken(e); } createParseHelpers() { return { parseInline: (e) => this.parseInlineTokens(e), tokenizeInline: (e) => this.tokenizeInline(e), parseChildren: (e) => this.parseTokens(e), parseBlockChildren: (e) => this.parseTokens(e, !0), createTextNode: (e, t) => ({ type: "text", text: e, marks: t || void 0 }), createNode: (e, t, n) => { let r = { type: e, attrs: t || void 0, content: n || void 0 }; return (!t || Object.keys(t).length === 0) && delete r.attrs, r; }, applyMark: (e, t, n) => ({ mark: e, content: t, attrs: n && Object.keys(n).length > 0 ? n : void 0 }) }; } escapeRegex(e) { return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } parseInlineTokens(e) { let t = []; for (let n = 0; n < e.length; n += 1) { let r = e[n]; if (r.type === "text") t.push({ type: "text", text: Id(r.text || "") }); else if (r.type === "escape") t.push({ type: "text", text: r.text || "" }); else if (r.type === "html") { let i = (r.raw ?? r.text ?? "").toString(), a = /^<\/[\s]*[\w-]+/i.test(i), o = i.match(/^<[\s]*([\w-]+)(\s|>|\/|$)/i); if (!a && o && !/\/>$/.test(i)) { let r = o[1], a = this.escapeRegex(r), s = RegExp(`^<\\/\\s*${a}\\b`, "i"), c = -1, l = [i]; for (let t = n + 1; t < e.length; t += 1) { let n = e[t], r = (n.raw ?? n.text ?? "").toString(); if (l.push(r), n.type === "html" && s.test(r)) { c = t; break; } } if (c !== -1) { let e = l.join(""), r = { type: "html", raw: e, text: e, block: !1 }, i = this.parseHTMLToken(r); if (i) { let e = this.normalizeParseResult(i); Array.isArray(e) ? t.push(...e) : e && t.push(e); } n = c; continue; } } let s = this.parseHTMLToken(r); if (s) { let e = this.normalizeParseResult(s); Array.isArray(e) ? t.push(...e) : e && t.push(e); } } else if (r.type) { let e = this.getHandlerForToken(r.type); if (e && e.parseMarkdown) { let n = this.createParseHelpers(), i = e.parseMarkdown(r, n); if (this.isMarkResult(i)) { let e = this.applyMarkToContent(i.mark, i.content, i.attrs); t.push(...e); } else { let e = this.normalizeParseResult(i); Array.isArray(e) ? t.push(...e) : e && t.push(e); } } else r.tokens && t.push(...this.parseInlineTokens(r.tokens)); } } for (let e = t.length - 1; e > 0; --e) { let n = t[e], r = t[e - 1]; n.type === "text" && r.type === "text" && qd(n.marks || [], r.marks || []) && (r.text = (r.text || "") + (n.text || ""), t.splice(e, 1)); } return t; } applyMarkToContent(e, t, n) { return t.map((t) => { if (t.type === "text") { let r = t.marks || [], i = n ? { type: e, attrs: n } : { type: e }; return { ...t, marks: [...r, i] }; } return { ...t, content: t.content ? this.applyMarkToContent(e, t.content, n) : void 0 }; }); } isMarkResult(e) { return e && typeof e == "object" && "mark" in e; } normalizeParseResult(e) { return e ? this.isMarkResult(e) ? e.content : e : null; } parseFallbackToken(e, t = !1) { switch (e.type) { case "paragraph": return { type: "paragraph", content: e.tokens ? this.parseInlineTokens(e.tokens) : [] }; case "heading": return { type: "heading", attrs: { level: e.depth || 1 }, content: e.tokens ? this.parseInlineTokens(e.tokens) : [] }; case "text": return { type: "text", text: Id(e.text || "") }; case "html": return this.parseHTMLToken(e); case "escape": return { type: "text", text: e.text || "" }; case "space": return null; default: return e.tokens ? this.parseTokens(e.tokens, t) : null; } } parseHTMLToken(e) { let t = e.text || e.raw || ""; if (!t.trim()) return null; if (typeof window > "u") return e.block ? { type: "paragraph", content: [{ type: "text", text: t }] } : { type: "text", text: t }; if (this.isUnrecognizedHtml(t)) return this.htmlAsLiteralText(t, !!e.block); try { let n = $l(t, this.baseExtensions); return n.type === "doc" && n.content ? e.block ? n.content : n.content.length === 1 && n.content[0].type === "paragraph" && n.content[0].content ? n.content[0].content : n.content : n; } catch (e) { throw Error(`Failed to parse HTML in markdown: ${e}`); } } isUnrecognizedHtml(e) { if (typeof window > "u" || window.DOMParser === void 0) return !1; let t = new window.DOMParser().parseFromString(`${e}`, "text/html").body.querySelectorAll("*"); if (t.length === 0) return !1; let n = this.getSchemaParseDomTags(); return Array.from(t).some((e) => { if (!Lp(e)) return !1; let t = e.tagName.toLowerCase(); return !n.has(t); }); } getSchemaParseDomTags() { if (this.schemaParseDomTagsCache) return this.schemaParseDomTagsCache; let e = /* @__PURE__ */ new Set(); try { let t = Ql(this.baseExtensions), n = (t) => { let n = t?.parseDOM; Array.isArray(n) && n.forEach((t) => { if (typeof t?.tag == "string") { let n = t.tag.match(/^[a-zA-Z][\w-]*/); n && e.add(n[0].toLowerCase()); } }); }; Object.values(t.nodes).forEach((e) => n(e.spec)), Object.values(t.marks).forEach((e) => n(e.spec)); } catch {} return this.schemaParseDomTagsCache = e, e; } htmlAsLiteralText(e, t) { let n = e.replace(/\s+$/, ""); return n ? t ? { type: "paragraph", content: [{ type: "text", text: n }] } : { type: "text", text: n } : null; } encodeTextForMarkdown(e, t, n) { return n?.type != null && this.codeTypes.has(n.type) || (t.marks || []).some((e) => this.codeTypes.has(typeof e == "string" ? e : e.type)) ? e : this.escapeMarkdownSyntax(Ld(e)); } escapeMarkdownSyntax(e) { return e.replace(/([\\`*_[\]~])/g, "\\$1"); } renderNodeToMarkdown(e, t, n = 0, r = 0, i = {}) { if (e.type === "text") return this.encodeTextForMarkdown(e.text || "", e, t); if (!e.type) return ""; let a = this.getHandlerForToken(e.type); if (!a) return ""; let o = Array.isArray(t?.content) && n > 0 ? t.content[n - 1] : void 0, s = { renderChildren: (t, i) => { let o = a.isIndenting ? r + 1 : r; return !Array.isArray(t) && t.content ? this.renderNodes(t.content, e, i || "", n, o) : this.renderNodes(t, e, i || "", n, o); }, renderChild: (t, n) => { let i = a.isIndenting ? r + 1 : r; return this.renderNodeToMarkdown(t, e, n, i); }, indent: (e) => this.indentString + e, wrapInBlock: kp }, c = { index: n, level: r, parentType: t?.type, previousNode: o, meta: { parentAttrs: t?.attrs, ...i } }; return a.renderMarkdown?.call(a, e, s, c) || ""; } renderNodes(e, t, n = "", r = 0, i = 0) { return Array.isArray(e) ? this.renderNodesWithMarkBoundaries(e, t, n, i) : e.type ? this.renderNodeToMarkdown(e, t, r, i) : ""; } renderNodesWithMarkBoundaries(e, t, n = "", r = 0) { let i = [], a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Set(), s = /* @__PURE__ */ new Map(); return e.forEach((n, c) => { let l = c < e.length - 1 ? e[c + 1] : null; if (n.type) if (n.type === "text") { let e = this.encodeTextForMarkdown(n.text || "", n, t), r = new Map((n.marks || []).map((e) => [e.type, e])), c = this.getMarksToOpenForSerialization(a, r, l), u = Ap(r, l), d = u.filter((e) => a.has(e)), f = d.length > 0 && c.length > 0, p = ""; if (u.length > 0 && !f) { let t = e.match(/(\s+)$/); t && (p = t[1], e = e.slice(0, -p.length)); } f || u.slice().reverse().forEach((t) => { if (!a.has(t)) return; let n = r.get(t), i = this.getMarkClosing(t, n, s.get(t)); i && (e += i), a.has(t) && (a.delete(t), s.delete(t)); }); let m = ""; if (c.length > 0) { let t = e.match(/^(\s+)/); t && (m = t[1], e = e.slice(m.length)); } c.forEach(({ type: t, mark: n }) => { let r = o.has(t) ? "html" : "markdown", i = this.getMarkOpening(t, n, r); i && (e = i + e), s.set(t, r), o.delete(t); }), f || c.slice().reverse().forEach(({ type: e, mark: t }) => { a.set(e, t); }), e = m + e; let h; if (f) { let e = new Set((l?.marks || []).map((e) => e.type)); c.forEach(({ type: t }) => { e.has(t) && this.getHtmlReopenTags(t) && o.add(t); }); let t = Array.from(a.keys()), n = d.slice().sort((e, n) => t.indexOf(n) - t.indexOf(e)); h = [...c.map((e) => e.type), ...n]; } else h = Mp(a, r, l, this.markSetsEqual.bind(this)); let g = ""; if (h.length > 0) { let t = e.match(/(\s+)$/); t && (g = t[1], e = e.slice(0, -g.length)); } h.forEach((t) => { let n = a.get(t) ?? r.get(t), i = this.getMarkClosing(t, n, s.get(t)); i && (e += i), a.delete(t), s.delete(t); }), e += g, e += p, i.push(e); } else { let e = new Set((n.marks || []).map((e) => e.type)), o = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map(); a.forEach((t, n) => { e.has(n) && (o.set(n, t), l.set(n, s.get(n) ?? "markdown")); }); let u = Np(a, (e, t) => this.getMarkClosing(e, t, s.get(e))); s.clear(); let d = this.renderNodeToMarkdown(n, t, c, r), f = n.type === "hardBreak" ? "" : Pp(o, a, (e, t) => { let n = l.get(e) ?? "markdown"; return s.set(e, n), this.getMarkOpening(e, t, n); }); i.push(u + d + f); } }), i.join(n); } getMarkOpening(e, t, n = "markdown") { if (n === "html") return this.getHtmlReopenTags(e)?.open || ""; let r = this.getHandlersForNodeType(e), i = r.length > 0 ? r[0] : void 0; if (!i || !i.renderMarkdown) return ""; let a = "__TIPTAP_MARKDOWN_PLACEHOLDER__", o = { type: e, attrs: t.attrs || {}, content: [{ type: "text", text: a }] }; try { let e = i.renderMarkdown(o, { renderChildren: () => a, renderChild: () => a, indent: (e) => e, wrapInBlock: (e, t) => e + t }, { index: 0, level: 0, parentType: "text", meta: {} }), t = e.indexOf(a); return t >= 0 ? e.substring(0, t) : ""; } catch (t) { throw Error(`Failed to get mark opening for ${e}: ${t}`); } } getMarkClosing(e, t, n = "markdown") { if (n === "html") return this.getHtmlReopenTags(e)?.close || ""; let r = this.getHandlersForNodeType(e), i = r.length > 0 ? r[0] : void 0; if (!i || !i.renderMarkdown) return ""; let a = "__TIPTAP_MARKDOWN_PLACEHOLDER__", o = { type: e, attrs: t.attrs || {}, content: [{ type: "text", text: a }] }; try { let e = i.renderMarkdown(o, { renderChildren: () => a, renderChild: () => a, indent: (e) => e, wrapInBlock: (e, t) => e + t }, { index: 0, level: 0, parentType: "text", meta: {} }), t = e.indexOf(a), n = t + 33; return t >= 0 ? e.substring(n) : ""; } catch (t) { throw Error(`Failed to get mark closing for ${e}: ${t}`); } } getHtmlReopenTags(e) { let t = this.getHandlersForNodeType(e); return (t.length > 0 ? t[0] : void 0)?.htmlReopen; } markSetsEqual(e, t) { return e.size === t.size ? Array.from(e.entries()).every(([e, n]) => { let r = t.get(e); return r && Pd(n.attrs, r.attrs); }) : !1; } getMarksToOpenForSerialization(e, t, n) { let r = jp(e, t); if (r.length <= 1) return r; let i = n?.marks || [], a = (e, t) => i.some((n) => n.type === e && Pd(n.attrs, t)), o = (e, t) => { let n = this.extensionRanks.get(e.type) ?? 2 ** 53 - 1, r = this.extensionRanks.get(t.type) ?? 2 ** 53 - 1; return n === r ? e.type.localeCompare(t.type) : r - n; }, s = r.filter((e) => !a(e.type, e.mark.attrs)).sort(o), c = r.filter((e) => a(e.type, e.mark.attrs)).sort(o); return [...s, ...c]; } }, zp = F.create({ name: "markdown", addOptions() { return { indentation: { style: "space", size: 2 }, marked: void 0, markedOptions: {} }; }, addCommands() { return { setContent: (e, t) => { if (!t?.contentType || Ip(e, t?.contentType) !== "markdown" || !this.editor.markdown) return gc.setContent(e, t); let n = this.editor.markdown.parse(e); return gc.setContent(n, t); }, insertContent: (e, t) => { if (!t?.contentType || Ip(e, t?.contentType) !== "markdown" || !this.editor.markdown) return gc.insertContent(e, t); let n = this.editor.markdown.parse(e); return gc.insertContent(n, t); }, insertContentAt: (e, t, n) => { if (!n?.contentType || Ip(t, n?.contentType) !== "markdown" || !this.editor.markdown) return gc.insertContentAt(e, t, n); let r = this.editor.markdown.parse(t); return gc.insertContentAt(e, r, n); } }; }, addStorage() { return { manager: new Rp({ indentation: this.options.indentation, marked: this.options.marked, markedOptions: this.options.markedOptions, extensions: [] }) }; }, onBeforeCreate() { if (this.editor.markdown) { console.error("[tiptap][markdown]: There is already a `markdown` property on the editor instance. This might lead to unexpected behavior."); return; } if (this.storage.manager = new Rp({ indentation: this.options.indentation, marked: this.options.marked, markedOptions: this.options.markedOptions, extensions: this.editor.extensionManager.baseExtensions }), this.editor.markdown = this.storage.manager, this.editor.getMarkdown = () => this.storage.manager.serialize(this.editor.getJSON()), !this.editor.options.contentType || Ip(this.editor.options.content, this.editor.options.contentType) !== "markdown") return; if (!this.editor.markdown) throw Error("[tiptap][markdown]: The `contentType` option is set to \"markdown\", but the Markdown extension is not added to the editor. Please add the Markdown extension to use this feature."); if (this.editor.options.content === void 0 || typeof this.editor.options.content != "string") throw Error("[tiptap][markdown]: The `contentType` option is set to \"markdown\", but the initial content is not a string. Please provide the initial content as a markdown string."); let e = this.editor.markdown.parse(this.editor.options.content); e.content?.length && (this.editor.options.content = e); } }), Bp = (e, t) => { if (e === "slot") return 0; if (e instanceof Function) return e(t); let { children: n, ...r } = t ?? {}; if (e === "svg") throw Error("SVG elements are not supported in the JSX syntax, use the array syntax instead"); return [ e, r, n ]; }; //#endregion //#region node_modules/.pnpm/@tiptap+extension-blockquote@3.26.1_@tiptap+core@3.26.1_@tiptap+pm@3.26.1_/node_modules/@tiptap/extension-blockquote/dist/index.js function Vp(e, t, n) { for (let r = 0;; r++) { if (r == e.childCount || r == t.childCount) return e.childCount == t.childCount ? null : n; let i = e.child(r), a = t.child(r); if (i == a) { n += i.nodeSize; continue; } if (!i.sameMarkup(a)) return n; if (i.isText && i.text != a.text) { for (let e = 0; i.text[e] == a.text[e]; e++) n++; return n; } if (i.content.size || a.content.size) { let e = Vp(i.content, a.content, n + 1); if (e != null) return e; } n += i.nodeSize; } } function Hp(e, t, n, r) { for (let i = e.childCount, a = t.childCount;;) { if (i == 0 || a == 0) return i == a ? null : { a: n, b: r }; let o = e.child(--i), s = t.child(--a), c = o.nodeSize; if (o == s) { n -= c, r -= c; continue; } if (!o.sameMarkup(s)) return { a: n, b: r }; if (o.isText && o.text != s.text) { let e = 0, t = Math.min(o.text.length, s.text.length); for (; e < t && o.text[o.text.length - e - 1] == s.text[s.text.length - e - 1];) e++, n--, r--; return { a: n, b: r }; } if (o.content.size || s.content.size) { let e = Hp(o.content, s.content, n - 1, r - 1); if (e) return e; } n -= c, r -= c; } } var R = class e { constructor(e, t) { if (this.content = e, this.size = t || 0, t == null) for (let t = 0; t < e.length; t++) this.size += e[t].nodeSize; } nodesBetween(e, t, n, r = 0, i) { for (let a = 0, o = 0; o < t; a++) { let s = this.content[a], c = o + s.nodeSize; if (c > e && n(s, r + o, i || null, a) !== !1 && s.content.size) { let i = o + 1; s.nodesBetween(Math.max(0, e - i), Math.min(s.content.size, t - i), n, r + i); } o = c; } } descendants(e) { this.nodesBetween(0, this.size, e); } textBetween(e, t, n, r) { let i = "", a = !0; return this.nodesBetween(e, t, (o, s) => { let c = o.isText ? o.text.slice(Math.max(e, s) - s, t - s) : o.isLeaf ? r ? typeof r == "function" ? r(o) : r : o.type.spec.leafText ? o.type.spec.leafText(o) : "" : ""; o.isBlock && (o.isLeaf && c || o.isTextblock) && n && (a ? a = !1 : i += n), i += c; }, 0), i; } append(t) { if (!t.size) return this; if (!this.size) return t; let n = this.lastChild, r = t.firstChild, i = this.content.slice(), a = 0; for (n.isText && n.sameMarkup(r) && (i[i.length - 1] = n.withText(n.text + r.text), a = 1); a < t.content.length; a++) i.push(t.content[a]); return new e(i, this.size + t.size); } cut(t, n = this.size) { if (t == 0 && n == this.size) return this; let r = [], i = 0; if (n > t) for (let e = 0, a = 0; a < n; e++) { let o = this.content[e], s = a + o.nodeSize; s > t && ((a < t || s > n) && (o = o.isText ? o.cut(Math.max(0, t - a), Math.min(o.text.length, n - a)) : o.cut(Math.max(0, t - a - 1), Math.min(o.content.size, n - a - 1))), r.push(o), i += o.nodeSize), a = s; } return new e(r, i); } cutByIndex(t, n) { return t == n ? e.empty : t == 0 && n == this.content.length ? this : new e(this.content.slice(t, n)); } replaceChild(t, n) { let r = this.content[t]; if (r == n) return this; let i = this.content.slice(), a = this.size + n.nodeSize - r.nodeSize; return i[t] = n, new e(i, a); } addToStart(t) { return new e([t].concat(this.content), this.size + t.nodeSize); } addToEnd(t) { return new e(this.content.concat(t), this.size + t.nodeSize); } eq(e) { if (this.content.length != e.content.length) return !1; for (let t = 0; t < this.content.length; t++) if (!this.content[t].eq(e.content[t])) return !1; return !0; } get firstChild() { return this.content.length ? this.content[0] : null; } get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; } get childCount() { return this.content.length; } child(e) { let t = this.content[e]; if (!t) throw RangeError("Index " + e + " out of range for " + this); return t; } maybeChild(e) { return this.content[e] || null; } forEach(e) { for (let t = 0, n = 0; t < this.content.length; t++) { let r = this.content[t]; e(r, n, t), n += r.nodeSize; } } findDiffStart(e, t = 0) { return Vp(this, e, t); } findDiffEnd(e, t = this.size, n = e.size) { return Hp(this, e, t, n); } findIndex(e) { if (e == 0) return Wp(0, e); if (e == this.size) return Wp(this.content.length, e); if (e > this.size || e < 0) throw RangeError(`Position ${e} outside of fragment (${this})`); for (let t = 0, n = 0;; t++) { let r = this.child(t), i = n + r.nodeSize; if (i >= e) return i == e ? Wp(t + 1, i) : Wp(t, n); n = i; } } toString() { return "<" + this.toStringInner() + ">"; } toStringInner() { return this.content.join(", "); } toJSON() { return this.content.length ? this.content.map((e) => e.toJSON()) : null; } static fromJSON(t, n) { if (!n) return e.empty; if (!Array.isArray(n)) throw RangeError("Invalid input for Fragment.fromJSON"); return e.fromArray(n.map(t.nodeFromJSON)); } static fromArray(t) { if (!t.length) return e.empty; let n, r = 0; for (let e = 0; e < t.length; e++) { let i = t[e]; r += i.nodeSize, e && i.isText && t[e - 1].sameMarkup(i) ? (n ||= t.slice(0, e), n[n.length - 1] = i.withText(n[n.length - 1].text + i.text)) : n && n.push(i); } return new e(n || t, r); } static from(t) { if (!t) return e.empty; if (t instanceof e) return t; if (Array.isArray(t)) return this.fromArray(t); if (t.attrs) return new e([t], t.nodeSize); throw RangeError("Can not convert " + t + " to a Fragment" + (t.nodesBetween ? " (looks like multiple versions of prosemirror-model were loaded)" : "")); } }; R.empty = new R([], 0); var Up = { index: 0, offset: 0 }; function Wp(e, t) { return Up.index = e, Up.offset = t, Up; } function Gp(e, t) { if (e === t) return !0; if (!(e && typeof e == "object") || !(t && typeof t == "object")) return !1; let n = Array.isArray(e); if (Array.isArray(t) != n) return !1; if (n) { if (e.length != t.length) return !1; for (let n = 0; n < e.length; n++) if (!Gp(e[n], t[n])) return !1; } else { for (let n in e) if (!(n in t) || !Gp(e[n], t[n])) return !1; for (let n in t) if (!(n in e)) return !1; } return !0; } var Kp = class e { constructor(e, t) { this.type = e, this.attrs = t; } addToSet(e) { let t, n = !1; for (let r = 0; r < e.length; r++) { let i = e[r]; if (this.eq(i)) return e; if (this.type.excludes(i.type)) t ||= e.slice(0, r); else if (i.type.excludes(this.type)) return e; else !n && i.type.rank > this.type.rank && (t ||= e.slice(0, r), t.push(this), n = !0), t && t.push(i); } return t ||= e.slice(), n || t.push(this), t; } removeFromSet(e) { for (let t = 0; t < e.length; t++) if (this.eq(e[t])) return e.slice(0, t).concat(e.slice(t + 1)); return e; } isInSet(e) { for (let t = 0; t < e.length; t++) if (this.eq(e[t])) return !0; return !1; } eq(e) { return this == e || this.type == e.type && Gp(this.attrs, e.attrs); } toJSON() { let e = { type: this.type.name }; for (let t in this.attrs) { e.attrs = this.attrs; break; } return e; } static fromJSON(e, t) { if (!t) throw RangeError("Invalid input for Mark.fromJSON"); let n = e.marks[t.type]; if (!n) throw RangeError(`There is no mark type ${t.type} in this schema`); let r = n.create(t.attrs); return n.checkAttrs(r.attrs), r; } static sameSet(e, t) { if (e == t) return !0; if (e.length != t.length) return !1; for (let n = 0; n < e.length; n++) if (!e[n].eq(t[n])) return !1; return !0; } static setFrom(t) { if (!t || Array.isArray(t) && t.length == 0) return e.none; if (t instanceof e) return [t]; let n = t.slice(); return n.sort((e, t) => e.type.rank - t.type.rank), n; } }; Kp.none = []; var qp = class extends Error {}, z = class e { constructor(e, t, n) { this.content = e, this.openStart = t, this.openEnd = n; } get size() { return this.content.size - this.openStart - this.openEnd; } insertAt(t, n) { let r = Yp(this.content, t + this.openStart, n, this.openStart + 1, this.openEnd + 1); return r && new e(r, this.openStart, this.openEnd); } removeBetween(t, n) { return new e(Jp(this.content, t + this.openStart, n + this.openStart), this.openStart, this.openEnd); } eq(e) { return this.content.eq(e.content) && this.openStart == e.openStart && this.openEnd == e.openEnd; } toString() { return this.content + "(" + this.openStart + "," + this.openEnd + ")"; } toJSON() { if (!this.content.size) return null; let e = { content: this.content.toJSON() }; return this.openStart > 0 && (e.openStart = this.openStart), this.openEnd > 0 && (e.openEnd = this.openEnd), e; } static fromJSON(t, n) { if (!n) return e.empty; let r = n.openStart || 0, i = n.openEnd || 0; if (typeof r != "number" || typeof i != "number") throw RangeError("Invalid input for Slice.fromJSON"); return new e(R.fromJSON(t, n.content), r, i); } static maxOpen(t, n = !0) { let r = 0, i = 0; for (let e = t.firstChild; e && !e.isLeaf && (n || !e.type.spec.isolating); e = e.firstChild) r++; for (let e = t.lastChild; e && !e.isLeaf && (n || !e.type.spec.isolating); e = e.lastChild) i++; return new e(t, r, i); } }; z.empty = new z(R.empty, 0, 0); function Jp(e, t, n) { let { index: r, offset: i } = e.findIndex(t), a = e.maybeChild(r), { index: o, offset: s } = e.findIndex(n); if (i == t || a.isText) { if (s != n && !e.child(o).isText) throw RangeError("Removing non-flat range"); return e.cut(0, t).append(e.cut(n)); } if (r != o) throw RangeError("Removing non-flat range"); return e.replaceChild(r, a.copy(Jp(a.content, t - i - 1, n - i - 1))); } function Yp(e, t, n, r, i, a) { let { index: o, offset: s } = e.findIndex(t), c = e.maybeChild(o); if (s == t || c.isText) return a && r <= 0 && i <= 0 && !a.canReplace(o, o, n) ? null : e.cut(0, t).append(n).append(e.cut(t)); let l = Yp(c.content, t - s - 1, n, o == 0 ? r - 1 : 0, o == e.childCount - 1 ? i - 1 : 0, c); return l && e.replaceChild(o, c.copy(l)); } function Xp(e, t, n) { if (n.openStart > e.depth) throw new qp("Inserted content deeper than insertion position"); if (e.depth - n.openStart != t.depth - n.openEnd) throw new qp("Inconsistent open depths"); return Zp(e, t, n, 0); } function Zp(e, t, n, r) { let i = e.index(r), a = e.node(r); if (i == t.index(r) && r < e.depth - n.openStart) { let o = Zp(e, t, n, r + 1); return a.copy(a.content.replaceChild(i, o)); } else if (!n.content.size) return nm(a, im(e, t, r)); else if (!n.openStart && !n.openEnd && e.depth == r && t.depth == r) { let r = e.parent, i = r.content; return nm(r, i.cut(0, e.parentOffset).append(n.content).append(i.cut(t.parentOffset))); } else { let { start: i, end: o } = am(n, e); return nm(a, rm(e, i, o, t, r)); } } function Qp(e, t) { if (!t.type.compatibleContent(e.type)) throw new qp("Cannot join " + t.type.name + " onto " + e.type.name); } function $p(e, t, n) { let r = e.node(n); return Qp(r, t.node(n)), r; } function em(e, t) { let n = t.length - 1; n >= 0 && e.isText && e.sameMarkup(t[n]) ? t[n] = e.withText(t[n].text + e.text) : t.push(e); } function tm(e, t, n, r) { let i = (t || e).node(n), a = 0, o = t ? t.index(n) : i.childCount; e && (a = e.index(n), e.depth > n ? a++ : e.textOffset && (em(e.nodeAfter, r), a++)); for (let e = a; e < o; e++) em(i.child(e), r); t && t.depth == n && t.textOffset && em(t.nodeBefore, r); } function nm(e, t) { return e.type.checkContent(t), e.copy(t); } function rm(e, t, n, r, i) { let a = e.depth > i && $p(e, t, i + 1), o = r.depth > i && $p(n, r, i + 1), s = []; return tm(null, e, i, s), a && o && t.index(i) == n.index(i) ? (Qp(a, o), em(nm(a, rm(e, t, n, r, i + 1)), s)) : (a && em(nm(a, im(e, t, i + 1)), s), tm(t, n, i, s), o && em(nm(o, im(n, r, i + 1)), s)), tm(r, null, i, s), new R(s); } function im(e, t, n) { let r = []; return tm(null, e, n, r), e.depth > n && em(nm($p(e, t, n + 1), im(e, t, n + 1)), r), tm(t, null, n, r), new R(r); } function am(e, t) { let n = t.depth - e.openStart, r = t.node(n).copy(e.content); for (let e = n - 1; e >= 0; e--) r = t.node(e).copy(R.from(r)); return { start: r.resolveNoCache(e.openStart + n), end: r.resolveNoCache(r.content.size - e.openEnd - n) }; } var om = class e { constructor(e, t, n) { this.pos = e, this.path = t, this.parentOffset = n, this.depth = t.length / 3 - 1; } resolveDepth(e) { return e == null ? this.depth : e < 0 ? this.depth + e : e; } get parent() { return this.node(this.depth); } get doc() { return this.node(0); } node(e) { return this.path[this.resolveDepth(e) * 3]; } index(e) { return this.path[this.resolveDepth(e) * 3 + 1]; } indexAfter(e) { return e = this.resolveDepth(e), this.index(e) + (e == this.depth && !this.textOffset ? 0 : 1); } start(e) { return e = this.resolveDepth(e), e == 0 ? 0 : this.path[e * 3 - 1] + 1; } end(e) { return e = this.resolveDepth(e), this.start(e) + this.node(e).content.size; } before(e) { if (e = this.resolveDepth(e), !e) throw RangeError("There is no position before the top-level node"); return e == this.depth + 1 ? this.pos : this.path[e * 3 - 1]; } after(e) { if (e = this.resolveDepth(e), !e) throw RangeError("There is no position after the top-level node"); return e == this.depth + 1 ? this.pos : this.path[e * 3 - 1] + this.path[e * 3].nodeSize; } get textOffset() { return this.pos - this.path[this.path.length - 1]; } get nodeAfter() { let e = this.parent, t = this.index(this.depth); if (t == e.childCount) return null; let n = this.pos - this.path[this.path.length - 1], r = e.child(t); return n ? e.child(t).cut(n) : r; } get nodeBefore() { let e = this.index(this.depth), t = this.pos - this.path[this.path.length - 1]; return t ? this.parent.child(e).cut(0, t) : e == 0 ? null : this.parent.child(e - 1); } posAtIndex(e, t) { t = this.resolveDepth(t); let n = this.path[t * 3], r = t == 0 ? 0 : this.path[t * 3 - 1] + 1; for (let t = 0; t < e; t++) r += n.child(t).nodeSize; return r; } marks() { let e = this.parent, t = this.index(); if (e.content.size == 0) return Kp.none; if (this.textOffset) return e.child(t).marks; let n = e.maybeChild(t - 1), r = e.maybeChild(t); if (!n) { let e = n; n = r, r = e; } let i = n.marks; for (var a = 0; a < i.length; a++) i[a].type.spec.inclusive === !1 && (!r || !i[a].isInSet(r.marks)) && (i = i[a--].removeFromSet(i)); return i; } marksAcross(e) { let t = this.parent.maybeChild(this.index()); if (!t || !t.isInline) return null; let n = t.marks, r = e.parent.maybeChild(e.index()); for (var i = 0; i < n.length; i++) n[i].type.spec.inclusive === !1 && (!r || !n[i].isInSet(r.marks)) && (n = n[i--].removeFromSet(n)); return n; } sharedDepth(e) { for (let t = this.depth; t > 0; t--) if (this.start(t) <= e && this.end(t) >= e) return t; return 0; } blockRange(e = this, t) { if (e.pos < this.pos) return e.blockRange(this); for (let n = this.depth - (this.parent.inlineContent || this.pos == e.pos ? 1 : 0); n >= 0; n--) if (e.pos <= this.end(n) && (!t || t(this.node(n)))) return new um(this, e, n); return null; } sameParent(e) { return this.pos - this.parentOffset == e.pos - e.parentOffset; } max(e) { return e.pos > this.pos ? e : this; } min(e) { return e.pos < this.pos ? e : this; } toString() { let e = ""; for (let t = 1; t <= this.depth; t++) e += (e ? "/" : "") + this.node(t).type.name + "_" + this.index(t - 1); return e + ":" + this.parentOffset; } static resolve(t, n) { if (!(n >= 0 && n <= t.content.size)) throw RangeError("Position " + n + " out of range"); let r = [], i = 0, a = n; for (let e = t;;) { let { index: t, offset: n } = e.content.findIndex(a), o = a - n; if (r.push(e, t, i + n), !o || (e = e.child(t), e.isText)) break; a = o - 1, i += n + 1; } return new e(n, r, a); } static resolveCached(t, n) { let r = lm.get(t); if (r) for (let e = 0; e < r.elts.length; e++) { let t = r.elts[e]; if (t.pos == n) return t; } else lm.set(t, r = new sm()); let i = r.elts[r.i] = e.resolve(t, n); return r.i = (r.i + 1) % cm, i; } }, sm = class { constructor() { this.elts = [], this.i = 0; } }, cm = 12, lm = /* @__PURE__ */ new WeakMap(), um = class { constructor(e, t, n) { this.$from = e, this.$to = t, this.depth = n; } get start() { return this.$from.before(this.depth + 1); } get end() { return this.$to.after(this.depth + 1); } get parent() { return this.$from.node(this.depth); } get startIndex() { return this.$from.index(this.depth); } get endIndex() { return this.$to.indexAfter(this.depth); } }, dm = /* @__PURE__ */ Object.create(null), fm = class e { constructor(e, t, n, r = Kp.none) { this.type = e, this.attrs = t, this.marks = r, this.content = n || R.empty; } get children() { return this.content.content; } get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; } get childCount() { return this.content.childCount; } child(e) { return this.content.child(e); } maybeChild(e) { return this.content.maybeChild(e); } forEach(e) { this.content.forEach(e); } nodesBetween(e, t, n, r = 0) { this.content.nodesBetween(e, t, n, r, this); } descendants(e) { this.nodesBetween(0, this.content.size, e); } get textContent() { return this.isLeaf && this.type.spec.leafText ? this.type.spec.leafText(this) : this.textBetween(0, this.content.size, ""); } textBetween(e, t, n, r) { return this.content.textBetween(e, t, n, r); } get firstChild() { return this.content.firstChild; } get lastChild() { return this.content.lastChild; } eq(e) { return this == e || this.sameMarkup(e) && this.content.eq(e.content); } sameMarkup(e) { return this.hasMarkup(e.type, e.attrs, e.marks); } hasMarkup(e, t, n) { return this.type == e && Gp(this.attrs, t || e.defaultAttrs || dm) && Kp.sameSet(this.marks, n || Kp.none); } copy(t = null) { return t == this.content ? this : new e(this.type, this.attrs, t, this.marks); } mark(t) { return t == this.marks ? this : new e(this.type, this.attrs, this.content, t); } cut(e, t = this.content.size) { return e == 0 && t == this.content.size ? this : this.copy(this.content.cut(e, t)); } slice(e, t = this.content.size, n = !1) { if (e == t) return z.empty; let r = this.resolve(e), i = this.resolve(t), a = n ? 0 : r.sharedDepth(t), o = r.start(a); return new z(r.node(a).content.cut(r.pos - o, i.pos - o), r.depth - a, i.depth - a); } replace(e, t, n) { return Xp(this.resolve(e), this.resolve(t), n); } nodeAt(e) { for (let t = this;;) { let { index: n, offset: r } = t.content.findIndex(e); if (t = t.maybeChild(n), !t) return null; if (r == e || t.isText) return t; e -= r + 1; } } childAfter(e) { let { index: t, offset: n } = this.content.findIndex(e); return { node: this.content.maybeChild(t), index: t, offset: n }; } childBefore(e) { if (e == 0) return { node: null, index: 0, offset: 0 }; let { index: t, offset: n } = this.content.findIndex(e); if (n < e) return { node: this.content.child(t), index: t, offset: n }; let r = this.content.child(t - 1); return { node: r, index: t - 1, offset: n - r.nodeSize }; } resolve(e) { return om.resolveCached(this, e); } resolveNoCache(e) { return om.resolve(this, e); } rangeHasMark(e, t, n) { let r = !1; return t > e && this.nodesBetween(e, t, (e) => (n.isInSet(e.marks) && (r = !0), !r)), r; } get isBlock() { return this.type.isBlock; } get isTextblock() { return this.type.isTextblock; } get inlineContent() { return this.type.inlineContent; } get isInline() { return this.type.isInline; } get isText() { return this.type.isText; } get isLeaf() { return this.type.isLeaf; } get isAtom() { return this.type.isAtom; } toString() { if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this); let e = this.type.name; return this.content.size && (e += "(" + this.content.toStringInner() + ")"), pm(this.marks, e); } contentMatchAt(e) { let t = this.type.contentMatch.matchFragment(this.content, 0, e); if (!t) throw Error("Called contentMatchAt on a node with invalid content"); return t; } canReplace(e, t, n = R.empty, r = 0, i = n.childCount) { let a = this.contentMatchAt(e).matchFragment(n, r, i), o = a && a.matchFragment(this.content, t); if (!o || !o.validEnd) return !1; for (let e = r; e < i; e++) if (!this.type.allowsMarks(n.child(e).marks)) return !1; return !0; } canReplaceWith(e, t, n, r) { if (r && !this.type.allowsMarks(r)) return !1; let i = this.contentMatchAt(e).matchType(n), a = i && i.matchFragment(this.content, t); return a ? a.validEnd : !1; } canAppend(e) { return e.content.size ? this.canReplace(this.childCount, this.childCount, e.content) : this.type.compatibleContent(e.type); } check() { this.type.checkContent(this.content), this.type.checkAttrs(this.attrs); let e = Kp.none; for (let t = 0; t < this.marks.length; t++) { let n = this.marks[t]; n.type.checkAttrs(n.attrs), e = n.addToSet(e); } if (!Kp.sameSet(e, this.marks)) throw RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map((e) => e.type.name)}`); this.content.forEach((e) => e.check()); } toJSON() { let e = { type: this.type.name }; for (let t in this.attrs) { e.attrs = this.attrs; break; } return this.content.size && (e.content = this.content.toJSON()), this.marks.length && (e.marks = this.marks.map((e) => e.toJSON())), e; } static fromJSON(e, t) { if (!t) throw RangeError("Invalid input for Node.fromJSON"); let n; if (t.marks) { if (!Array.isArray(t.marks)) throw RangeError("Invalid mark data for Node.fromJSON"); n = t.marks.map(e.markFromJSON); } if (t.type == "text") { if (typeof t.text != "string") throw RangeError("Invalid text node in JSON"); return e.text(t.text, n); } let r = R.fromJSON(e, t.content), i = e.nodeType(t.type).create(t.attrs, r, n); return i.type.checkAttrs(i.attrs), i; } }; fm.prototype.text = void 0; function pm(e, t) { for (let n = e.length - 1; n >= 0; n--) t = e[n].type.name + "(" + t + ")"; return t; } var mm = class e { constructor(e) { this.validEnd = e, this.next = [], this.wrapCache = []; } static parse(t, n) { let r = new hm(t, n); if (r.next == null) return e.empty; let i = gm(r); r.next && r.err("Unexpected trailing text"); let a = Em(Cm(i)); return Dm(a, r), a; } matchType(e) { for (let t = 0; t < this.next.length; t++) if (this.next[t].type == e) return this.next[t].next; return null; } matchFragment(e, t = 0, n = e.childCount) { let r = this; for (let i = t; r && i < n; i++) r = r.matchType(e.child(i).type); return r; } get inlineContent() { return this.next.length != 0 && this.next[0].type.isInline; } get defaultType() { for (let e = 0; e < this.next.length; e++) { let { type: t } = this.next[e]; if (!(t.isText || t.hasRequiredAttrs())) return t; } return null; } compatible(e) { for (let t = 0; t < this.next.length; t++) for (let n = 0; n < e.next.length; n++) if (this.next[t].type == e.next[n].type) return !0; return !1; } fillBefore(e, t = !1, n = 0) { let r = [this]; function i(a, o) { let s = a.matchFragment(e, n); if (s && (!t || s.validEnd)) return R.from(o.map((e) => e.createAndFill())); for (let e = 0; e < a.next.length; e++) { let { type: t, next: n } = a.next[e]; if (!(t.isText || t.hasRequiredAttrs()) && r.indexOf(n) == -1) { r.push(n); let e = i(n, o.concat(t)); if (e) return e; } } return null; } return i(this, []); } findWrapping(e) { for (let t = 0; t < this.wrapCache.length; t += 2) if (this.wrapCache[t] == e) return this.wrapCache[t + 1]; let t = this.computeWrapping(e); return this.wrapCache.push(e, t), t; } computeWrapping(e) { let t = /* @__PURE__ */ Object.create(null), n = [{ match: this, type: null, via: null }]; for (; n.length;) { let r = n.shift(), i = r.match; if (i.matchType(e)) { let e = []; for (let t = r; t.type; t = t.via) e.push(t.type); return e.reverse(); } for (let e = 0; e < i.next.length; e++) { let { type: a, next: o } = i.next[e]; !a.isLeaf && !a.hasRequiredAttrs() && !(a.name in t) && (!r.type || o.validEnd) && (n.push({ match: a.contentMatch, type: a, via: r }), t[a.name] = !0); } } return null; } get edgeCount() { return this.next.length; } edge(e) { if (e >= this.next.length) throw RangeError(`There's no ${e}th edge in this content match`); return this.next[e]; } toString() { let e = []; function t(n) { e.push(n); for (let r = 0; r < n.next.length; r++) e.indexOf(n.next[r].next) == -1 && t(n.next[r].next); } return t(this), e.map((t, n) => { let r = n + (t.validEnd ? "*" : " ") + " "; for (let n = 0; n < t.next.length; n++) r += (n ? ", " : "") + t.next[n].type.name + "->" + e.indexOf(t.next[n].next); return r; }).join("\n"); } }; mm.empty = new mm(!0); var hm = class { constructor(e, t) { this.string = e, this.nodeTypes = t, this.inline = null, this.pos = 0, this.tokens = e.split(/\s*(?=\b|\W|$)/), this.tokens[this.tokens.length - 1] == "" && this.tokens.pop(), this.tokens[0] == "" && this.tokens.shift(); } get next() { return this.tokens[this.pos]; } eat(e) { return this.next == e && (this.pos++ || !0); } err(e) { throw SyntaxError(e + " (in content expression '" + this.string + "')"); } }; function gm(e) { let t = []; do t.push(_m(e)); while (e.eat("|")); return t.length == 1 ? t[0] : { type: "choice", exprs: t }; } function _m(e) { let t = []; do t.push(vm(e)); while (e.next && e.next != ")" && e.next != "|"); return t.length == 1 ? t[0] : { type: "seq", exprs: t }; } function vm(e) { let t = Sm(e); for (;;) if (e.eat("+")) t = { type: "plus", expr: t }; else if (e.eat("*")) t = { type: "star", expr: t }; else if (e.eat("?")) t = { type: "opt", expr: t }; else if (e.eat("{")) t = bm(e, t); else break; return t; } function ym(e) { /\D/.test(e.next) && e.err("Expected number, got '" + e.next + "'"); let t = Number(e.next); return e.pos++, t; } function bm(e, t) { let n = ym(e), r = n; return e.eat(",") && (r = e.next == "}" ? -1 : ym(e)), e.eat("}") || e.err("Unclosed braced range"), { type: "range", min: n, max: r, expr: t }; } function xm(e, t) { let n = e.nodeTypes, r = n[t]; if (r) return [r]; let i = []; for (let e in n) { let r = n[e]; r.isInGroup(t) && i.push(r); } return i.length == 0 && e.err("No node type or group '" + t + "' found"), i; } function Sm(e) { if (e.eat("(")) { let t = gm(e); return e.eat(")") || e.err("Missing closing paren"), t; } else if (/\W/.test(e.next)) e.err("Unexpected token '" + e.next + "'"); else { let t = xm(e, e.next).map((t) => (e.inline == null ? e.inline = t.isInline : e.inline != t.isInline && e.err("Mixing inline and block content"), { type: "name", value: t })); return e.pos++, t.length == 1 ? t[0] : { type: "choice", exprs: t }; } } function Cm(e) { let t = [[]]; return i(a(e, 0), n()), t; function n() { return t.push([]) - 1; } function r(e, n, r) { let i = { term: r, to: n }; return t[e].push(i), i; } function i(e, t) { e.forEach((e) => e.to = t); } function a(e, t) { if (e.type == "choice") return e.exprs.reduce((e, n) => e.concat(a(n, t)), []); if (e.type == "seq") for (let r = 0;; r++) { let o = a(e.exprs[r], t); if (r == e.exprs.length - 1) return o; i(o, t = n()); } else if (e.type == "star") { let o = n(); return r(t, o), i(a(e.expr, o), o), [r(o)]; } else if (e.type == "plus") { let o = n(); return i(a(e.expr, t), o), i(a(e.expr, o), o), [r(o)]; } else if (e.type == "opt") return [r(t)].concat(a(e.expr, t)); else if (e.type == "range") { let o = t; for (let t = 0; t < e.min; t++) { let t = n(); i(a(e.expr, o), t), o = t; } if (e.max == -1) i(a(e.expr, o), o); else for (let t = e.min; t < e.max; t++) { let t = n(); r(o, t), i(a(e.expr, o), t), o = t; } return [r(o)]; } else if (e.type == "name") return [r(t, void 0, e.value)]; else throw Error("Unknown expr type"); } } function wm(e, t) { return t - e; } function Tm(e, t) { let n = []; return r(t), n.sort(wm); function r(t) { let i = e[t]; if (i.length == 1 && !i[0].term) return r(i[0].to); n.push(t); for (let e = 0; e < i.length; e++) { let { term: t, to: a } = i[e]; !t && n.indexOf(a) == -1 && r(a); } } } function Em(e) { let t = /* @__PURE__ */ Object.create(null); return n(Tm(e, 0)); function n(r) { let i = []; r.forEach((t) => { e[t].forEach(({ term: t, to: n }) => { if (!t) return; let r; for (let e = 0; e < i.length; e++) i[e][0] == t && (r = i[e][1]); Tm(e, n).forEach((e) => { r || i.push([t, r = []]), r.indexOf(e) == -1 && r.push(e); }); }); }); let a = t[r.join(",")] = new mm(r.indexOf(e.length - 1) > -1); for (let e = 0; e < i.length; e++) { let r = i[e][1].sort(wm); a.next.push({ type: i[e][0], next: t[r.join(",")] || n(r) }); } return a; } } function Dm(e, t) { for (let n = 0, r = [e]; n < r.length; n++) { let e = r[n], i = !e.validEnd, a = []; for (let t = 0; t < e.next.length; t++) { let { type: n, next: o } = e.next[t]; a.push(n.name), i && !(n.isText || n.hasRequiredAttrs()) && (i = !1), r.indexOf(o) == -1 && r.push(o); } i && t.err("Only non-generatable nodes (" + a.join(", ") + ") in a required position (see https://prosemirror.net/docs/guide/#generatable)"); } } var Om = 65535, km = 2 ** 16; function Am(e, t) { return e + t * km; } function jm(e) { return e & Om; } function Mm(e) { return (e - (e & Om)) / km; } var Nm = 1, Pm = 2, Fm = 4, Im = 8, Lm = class { constructor(e, t, n) { this.pos = e, this.delInfo = t, this.recover = n; } get deleted() { return (this.delInfo & Im) > 0; } get deletedBefore() { return (this.delInfo & (Nm | Fm)) > 0; } get deletedAfter() { return (this.delInfo & (Pm | Fm)) > 0; } get deletedAcross() { return (this.delInfo & Fm) > 0; } }, Rm = class e { constructor(t, n = !1) { if (this.ranges = t, this.inverted = n, !t.length && e.empty) return e.empty; } recover(e) { let t = 0, n = jm(e); if (!this.inverted) for (let e = 0; e < n; e++) t += this.ranges[e * 3 + 2] - this.ranges[e * 3 + 1]; return this.ranges[n * 3] + t + Mm(e); } mapResult(e, t = 1) { return this._map(e, t, !1); } map(e, t = 1) { return this._map(e, t, !0); } _map(e, t, n) { let r = 0, i = this.inverted ? 2 : 1, a = this.inverted ? 1 : 2; for (let o = 0; o < this.ranges.length; o += 3) { let s = this.ranges[o] - (this.inverted ? r : 0); if (s > e) break; let c = this.ranges[o + i], l = this.ranges[o + a], u = s + c; if (e <= u) { let i = c ? e == s ? -1 : e == u ? 1 : t : t, a = s + r + (i < 0 ? 0 : l); if (n) return a; let d = e == (t < 0 ? s : u) ? null : Am(o / 3, e - s), f = e == s ? Pm : e == u ? Nm : Fm; return (t < 0 ? e != s : e != u) && (f |= Im), new Lm(a, f, d); } r += l - c; } return n ? e + r : new Lm(e + r, 0, null); } touches(e, t) { let n = 0, r = jm(t), i = this.inverted ? 2 : 1, a = this.inverted ? 1 : 2; for (let t = 0; t < this.ranges.length; t += 3) { let o = this.ranges[t] - (this.inverted ? n : 0); if (o > e) break; let s = this.ranges[t + i]; if (e <= o + s && t == r * 3) return !0; n += this.ranges[t + a] - s; } return !1; } forEach(e) { let t = this.inverted ? 2 : 1, n = this.inverted ? 1 : 2; for (let r = 0, i = 0; r < this.ranges.length; r += 3) { let a = this.ranges[r], o = a - (this.inverted ? i : 0), s = a + (this.inverted ? 0 : i), c = this.ranges[r + t], l = this.ranges[r + n]; e(o, o + c, s, s + l), i += l - c; } } invert() { return new e(this.ranges, !this.inverted); } toString() { return (this.inverted ? "-" : "") + JSON.stringify(this.ranges); } static offset(t) { return t == 0 ? e.empty : new e(t < 0 ? [ 0, -t, 0 ] : [ 0, 0, t ]); } }; Rm.empty = new Rm([]); var zm = /* @__PURE__ */ Object.create(null), B = class { getMap() { return Rm.empty; } merge(e) { return null; } static fromJSON(e, t) { if (!t || !t.stepType) throw RangeError("Invalid input for Step.fromJSON"); let n = zm[t.stepType]; if (!n) throw RangeError(`No step type ${t.stepType} defined`); return n.fromJSON(e, t); } static jsonID(e, t) { if (e in zm) throw RangeError("Duplicate use of step JSON ID " + e); return zm[e] = t, t.prototype.jsonID = e, t; } }, V = class e { constructor(e, t) { this.doc = e, this.failed = t; } static ok(t) { return new e(t, null); } static fail(t) { return new e(null, t); } static fromReplace(t, n, r, i) { try { return e.ok(t.replace(n, r, i)); } catch (t) { if (t instanceof qp) return e.fail(t.message); throw t; } } }; function Bm(e, t, n) { let r = []; for (let i = 0; i < e.childCount; i++) { let a = e.child(i); a.content.size && (a = a.copy(Bm(a.content, t, a))), a.isInline && (a = t(a, n, i)), r.push(a); } return R.fromArray(r); } var Vm = class e extends B { constructor(e, t, n) { super(), this.from = e, this.to = t, this.mark = n; } apply(e) { let t = e.slice(this.from, this.to), n = e.resolve(this.from), r = n.node(n.sharedDepth(this.to)), i = new z(Bm(t.content, (e, t) => !e.isAtom || !t.type.allowsMarkType(this.mark.type) ? e : e.mark(this.mark.addToSet(e.marks)), r), t.openStart, t.openEnd); return V.fromReplace(e, this.from, this.to, i); } invert() { return new Hm(this.from, this.to, this.mark); } map(t) { let n = t.mapResult(this.from, 1), r = t.mapResult(this.to, -1); return n.deleted && r.deleted || n.pos >= r.pos ? null : new e(n.pos, r.pos, this.mark); } merge(t) { return t instanceof e && t.mark.eq(this.mark) && this.from <= t.to && this.to >= t.from ? new e(Math.min(this.from, t.from), Math.max(this.to, t.to), this.mark) : null; } toJSON() { return { stepType: "addMark", mark: this.mark.toJSON(), from: this.from, to: this.to }; } static fromJSON(t, n) { if (typeof n.from != "number" || typeof n.to != "number") throw RangeError("Invalid input for AddMarkStep.fromJSON"); return new e(n.from, n.to, t.markFromJSON(n.mark)); } }; B.jsonID("addMark", Vm); var Hm = class e extends B { constructor(e, t, n) { super(), this.from = e, this.to = t, this.mark = n; } apply(e) { let t = e.slice(this.from, this.to), n = new z(Bm(t.content, (e) => e.mark(this.mark.removeFromSet(e.marks)), e), t.openStart, t.openEnd); return V.fromReplace(e, this.from, this.to, n); } invert() { return new Vm(this.from, this.to, this.mark); } map(t) { let n = t.mapResult(this.from, 1), r = t.mapResult(this.to, -1); return n.deleted && r.deleted || n.pos >= r.pos ? null : new e(n.pos, r.pos, this.mark); } merge(t) { return t instanceof e && t.mark.eq(this.mark) && this.from <= t.to && this.to >= t.from ? new e(Math.min(this.from, t.from), Math.max(this.to, t.to), this.mark) : null; } toJSON() { return { stepType: "removeMark", mark: this.mark.toJSON(), from: this.from, to: this.to }; } static fromJSON(t, n) { if (typeof n.from != "number" || typeof n.to != "number") throw RangeError("Invalid input for RemoveMarkStep.fromJSON"); return new e(n.from, n.to, t.markFromJSON(n.mark)); } }; B.jsonID("removeMark", Hm); var Um = class e extends B { constructor(e, t) { super(), this.pos = e, this.mark = t; } apply(e) { let t = e.nodeAt(this.pos); if (!t) return V.fail("No node at mark step's position"); let n = t.type.create(t.attrs, null, this.mark.addToSet(t.marks)); return V.fromReplace(e, this.pos, this.pos + 1, new z(R.from(n), 0, +!t.isLeaf)); } invert(t) { let n = t.nodeAt(this.pos); if (n) { let t = this.mark.addToSet(n.marks); if (t.length == n.marks.length) { for (let r = 0; r < n.marks.length; r++) if (!n.marks[r].isInSet(t)) return new e(this.pos, n.marks[r]); return new e(this.pos, this.mark); } } return new Wm(this.pos, this.mark); } map(t) { let n = t.mapResult(this.pos, 1); return n.deletedAfter ? null : new e(n.pos, this.mark); } toJSON() { return { stepType: "addNodeMark", pos: this.pos, mark: this.mark.toJSON() }; } static fromJSON(t, n) { if (typeof n.pos != "number") throw RangeError("Invalid input for AddNodeMarkStep.fromJSON"); return new e(n.pos, t.markFromJSON(n.mark)); } }; B.jsonID("addNodeMark", Um); var Wm = class e extends B { constructor(e, t) { super(), this.pos = e, this.mark = t; } apply(e) { let t = e.nodeAt(this.pos); if (!t) return V.fail("No node at mark step's position"); let n = t.type.create(t.attrs, null, this.mark.removeFromSet(t.marks)); return V.fromReplace(e, this.pos, this.pos + 1, new z(R.from(n), 0, +!t.isLeaf)); } invert(e) { let t = e.nodeAt(this.pos); return !t || !this.mark.isInSet(t.marks) ? this : new Um(this.pos, this.mark); } map(t) { let n = t.mapResult(this.pos, 1); return n.deletedAfter ? null : new e(n.pos, this.mark); } toJSON() { return { stepType: "removeNodeMark", pos: this.pos, mark: this.mark.toJSON() }; } static fromJSON(t, n) { if (typeof n.pos != "number") throw RangeError("Invalid input for RemoveNodeMarkStep.fromJSON"); return new e(n.pos, t.markFromJSON(n.mark)); } }; B.jsonID("removeNodeMark", Wm); var Gm = class e extends B { constructor(e, t, n, r = !1) { super(), this.from = e, this.to = t, this.slice = n, this.structure = r; } apply(e) { return this.structure && qm(e, this.from, this.to) ? V.fail("Structure replace would overwrite content") : V.fromReplace(e, this.from, this.to, this.slice); } getMap() { return new Rm([ this.from, this.to - this.from, this.slice.size ]); } invert(t) { return new e(this.from, this.from + this.slice.size, t.slice(this.from, this.to)); } map(t) { let n = t.mapResult(this.to, -1), r = this.from == this.to && e.MAP_BIAS < 0 ? n : t.mapResult(this.from, 1); return r.deletedAcross && n.deletedAcross ? null : new e(r.pos, Math.max(r.pos, n.pos), this.slice, this.structure); } merge(t) { if (!(t instanceof e) || t.structure || this.structure) return null; if (this.from + this.slice.size == t.from && !this.slice.openEnd && !t.slice.openStart) { let n = this.slice.size + t.slice.size == 0 ? z.empty : new z(this.slice.content.append(t.slice.content), this.slice.openStart, t.slice.openEnd); return new e(this.from, this.to + (t.to - t.from), n, this.structure); } else if (t.to == this.from && !this.slice.openStart && !t.slice.openEnd) { let n = this.slice.size + t.slice.size == 0 ? z.empty : new z(t.slice.content.append(this.slice.content), t.slice.openStart, this.slice.openEnd); return new e(t.from, this.to, n, this.structure); } else return null; } toJSON() { let e = { stepType: "replace", from: this.from, to: this.to }; return this.slice.size && (e.slice = this.slice.toJSON()), this.structure && (e.structure = !0), e; } static fromJSON(t, n) { if (typeof n.from != "number" || typeof n.to != "number") throw RangeError("Invalid input for ReplaceStep.fromJSON"); return new e(n.from, n.to, z.fromJSON(t, n.slice), !!n.structure); } }; Gm.MAP_BIAS = 1, B.jsonID("replace", Gm); var Km = class e extends B { constructor(e, t, n, r, i, a, o = !1) { super(), this.from = e, this.to = t, this.gapFrom = n, this.gapTo = r, this.slice = i, this.insert = a, this.structure = o; } apply(e) { if (this.structure && (qm(e, this.from, this.gapFrom) || qm(e, this.gapTo, this.to))) return V.fail("Structure gap-replace would overwrite content"); let t = e.slice(this.gapFrom, this.gapTo); if (t.openStart || t.openEnd) return V.fail("Gap is not a flat range"); let n = this.slice.insertAt(this.insert, t.content); return n ? V.fromReplace(e, this.from, this.to, n) : V.fail("Content does not fit in gap"); } getMap() { return new Rm([ this.from, this.gapFrom - this.from, this.insert, this.gapTo, this.to - this.gapTo, this.slice.size - this.insert ]); } invert(t) { let n = this.gapTo - this.gapFrom; return new e(this.from, this.from + this.slice.size + n, this.from + this.insert, this.from + this.insert + n, t.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure); } map(t) { let n = t.mapResult(this.from, 1), r = t.mapResult(this.to, -1), i = this.from == this.gapFrom ? n.pos : t.map(this.gapFrom, -1), a = this.to == this.gapTo ? r.pos : t.map(this.gapTo, 1); return n.deletedAcross && r.deletedAcross || i < n.pos || a > r.pos ? null : new e(n.pos, r.pos, i, a, this.slice, this.insert, this.structure); } toJSON() { let e = { stepType: "replaceAround", from: this.from, to: this.to, gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert }; return this.slice.size && (e.slice = this.slice.toJSON()), this.structure && (e.structure = !0), e; } static fromJSON(t, n) { if (typeof n.from != "number" || typeof n.to != "number" || typeof n.gapFrom != "number" || typeof n.gapTo != "number" || typeof n.insert != "number") throw RangeError("Invalid input for ReplaceAroundStep.fromJSON"); return new e(n.from, n.to, n.gapFrom, n.gapTo, z.fromJSON(t, n.slice), n.insert, !!n.structure); } }; B.jsonID("replaceAround", Km); function qm(e, t, n) { let r = e.resolve(t), i = n - t, a = r.depth; for (; i > 0 && a > 0 && r.indexAfter(a) == r.node(a).childCount;) a--, i--; if (i > 0) { let e = r.node(a).maybeChild(r.indexAfter(a)); for (; i > 0;) { if (!e || e.isLeaf) return !0; e = e.firstChild, i--; } } return !1; } var Jm = class e extends B { constructor(e, t, n) { super(), this.pos = e, this.attr = t, this.value = n; } apply(e) { let t = e.nodeAt(this.pos); if (!t) return V.fail("No node at attribute step's position"); let n = /* @__PURE__ */ Object.create(null); for (let e in t.attrs) n[e] = t.attrs[e]; n[this.attr] = this.value; let r = t.type.create(n, null, t.marks); return V.fromReplace(e, this.pos, this.pos + 1, new z(R.from(r), 0, +!t.isLeaf)); } getMap() { return Rm.empty; } invert(t) { return new e(this.pos, this.attr, t.nodeAt(this.pos).attrs[this.attr]); } map(t) { let n = t.mapResult(this.pos, 1); return n.deletedAfter ? null : new e(n.pos, this.attr, this.value); } toJSON() { return { stepType: "attr", pos: this.pos, attr: this.attr, value: this.value }; } static fromJSON(t, n) { if (typeof n.pos != "number" || typeof n.attr != "string") throw RangeError("Invalid input for AttrStep.fromJSON"); return new e(n.pos, n.attr, n.value); } }; B.jsonID("attr", Jm); var Ym = class e extends B { constructor(e, t) { super(), this.attr = e, this.value = t; } apply(e) { let t = /* @__PURE__ */ Object.create(null); for (let n in e.attrs) t[n] = e.attrs[n]; t[this.attr] = this.value; let n = e.type.create(t, e.content, e.marks); return V.ok(n); } getMap() { return Rm.empty; } invert(t) { return new e(this.attr, t.attrs[this.attr]); } map(e) { return this; } toJSON() { return { stepType: "docAttr", attr: this.attr, value: this.value }; } static fromJSON(t, n) { if (typeof n.attr != "string") throw RangeError("Invalid input for DocAttrStep.fromJSON"); return new e(n.attr, n.value); } }; B.jsonID("docAttr", Ym); var Xm = class extends Error {}; Xm = function e(t) { let n = Error.call(this, t); return n.__proto__ = e.prototype, n; }, Xm.prototype = Object.create(Error.prototype), Xm.prototype.constructor = Xm, Xm.prototype.name = "TransformError"; var Zm = /* @__PURE__ */ Object.create(null), H = class { constructor(e, t, n) { this.$anchor = e, this.$head = t, this.ranges = n || [new Qm(e.min(t), e.max(t))]; } get anchor() { return this.$anchor.pos; } get head() { return this.$head.pos; } get from() { return this.$from.pos; } get to() { return this.$to.pos; } get $from() { return this.ranges[0].$from; } get $to() { return this.ranges[0].$to; } get empty() { let e = this.ranges; for (let t = 0; t < e.length; t++) if (e[t].$from.pos != e[t].$to.pos) return !1; return !0; } content() { return this.$from.doc.slice(this.from, this.to, !0); } replace(e, t = z.empty) { let n = t.content.lastChild, r = null; for (let e = 0; e < t.openEnd; e++) r = n, n = n.lastChild; let i = e.steps.length, a = this.ranges; for (let o = 0; o < a.length; o++) { let { $from: s, $to: c } = a[o], l = e.mapping.slice(i); e.replaceRange(l.map(s.pos), l.map(c.pos), o ? z.empty : t), o == 0 && ch(e, i, (n ? n.isInline : r && r.isTextblock) ? -1 : 1); } } replaceWith(e, t) { let n = e.steps.length, r = this.ranges; for (let i = 0; i < r.length; i++) { let { $from: a, $to: o } = r[i], s = e.mapping.slice(n), c = s.map(a.pos), l = s.map(o.pos); i ? e.deleteRange(c, l) : (e.replaceRangeWith(c, l, t), ch(e, n, t.isInline ? -1 : 1)); } } static findFrom(e, t, n = !1) { let r = e.parent.inlineContent ? new th(e) : sh(e.node(0), e.parent, e.pos, e.index(), t, n); if (r) return r; for (let r = e.depth - 1; r >= 0; r--) { let i = t < 0 ? sh(e.node(0), e.node(r), e.before(r + 1), e.index(r), t, n) : sh(e.node(0), e.node(r), e.after(r + 1), e.index(r) + 1, t, n); if (i) return i; } return null; } static near(e, t = 1) { return this.findFrom(e, t) || this.findFrom(e, -t) || new ah(e.node(0)); } static atStart(e) { return sh(e, e, 0, 0, 1) || new ah(e); } static atEnd(e) { return sh(e, e, e.content.size, e.childCount, -1) || new ah(e); } static fromJSON(e, t) { if (!t || !t.type) throw RangeError("Invalid input for Selection.fromJSON"); let n = Zm[t.type]; if (!n) throw RangeError(`No selection type ${t.type} defined`); return n.fromJSON(e, t); } static jsonID(e, t) { if (e in Zm) throw RangeError("Duplicate use of selection JSON ID " + e); return Zm[e] = t, t.prototype.jsonID = e, t; } getBookmark() { return th.between(this.$anchor, this.$head).getBookmark(); } }; H.prototype.visible = !0; var Qm = class { constructor(e, t) { this.$from = e, this.$to = t; } }, $m = !1; function eh(e) { !$m && !e.parent.inlineContent && ($m = !0, console.warn("TextSelection endpoint not pointing into a node with inline content (" + e.parent.type.name + ")")); } var th = class e extends H { constructor(e, t = e) { eh(e), eh(t), super(e, t); } get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; } map(t, n) { let r = t.resolve(n.map(this.head)); if (!r.parent.inlineContent) return H.near(r); let i = t.resolve(n.map(this.anchor)); return new e(i.parent.inlineContent ? i : r, r); } replace(e, t = z.empty) { if (super.replace(e, t), t == z.empty) { let t = this.$from.marksAcross(this.$to); t && e.ensureMarks(t); } } eq(t) { return t instanceof e && t.anchor == this.anchor && t.head == this.head; } getBookmark() { return new nh(this.anchor, this.head); } toJSON() { return { type: "text", anchor: this.anchor, head: this.head }; } static fromJSON(t, n) { if (typeof n.anchor != "number" || typeof n.head != "number") throw RangeError("Invalid input for TextSelection.fromJSON"); return new e(t.resolve(n.anchor), t.resolve(n.head)); } static create(e, t, n = t) { let r = e.resolve(t); return new this(r, n == t ? r : e.resolve(n)); } static between(t, n, r) { let i = t.pos - n.pos; if ((!r || i) && (r = i >= 0 ? 1 : -1), !n.parent.inlineContent) { let e = H.findFrom(n, r, !0) || H.findFrom(n, -r, !0); if (e) n = e.$head; else return H.near(n, r); } return t.parent.inlineContent || (i == 0 ? t = n : (t = (H.findFrom(t, -r, !0) || H.findFrom(t, r, !0)).$anchor, t.pos < n.pos != i < 0 && (t = n))), new e(t, n); } }; H.jsonID("text", th); var nh = class e { constructor(e, t) { this.anchor = e, this.head = t; } map(t) { return new e(t.map(this.anchor), t.map(this.head)); } resolve(e) { return th.between(e.resolve(this.anchor), e.resolve(this.head)); } }, rh = class e extends H { constructor(e) { let t = e.nodeAfter, n = e.node(0).resolve(e.pos + t.nodeSize); super(e, n), this.node = t; } map(t, n) { let { deleted: r, pos: i } = n.mapResult(this.anchor), a = t.resolve(i); return r ? H.near(a) : new e(a); } content() { return new z(R.from(this.node), 0, 0); } eq(t) { return t instanceof e && t.anchor == this.anchor; } toJSON() { return { type: "node", anchor: this.anchor }; } getBookmark() { return new ih(this.anchor); } static fromJSON(t, n) { if (typeof n.anchor != "number") throw RangeError("Invalid input for NodeSelection.fromJSON"); return new e(t.resolve(n.anchor)); } static create(t, n) { return new e(t.resolve(n)); } static isSelectable(e) { return !e.isText && e.type.spec.selectable !== !1; } }; rh.prototype.visible = !1, H.jsonID("node", rh); var ih = class e { constructor(e) { this.anchor = e; } map(t) { let { deleted: n, pos: r } = t.mapResult(this.anchor); return n ? new nh(r, r) : new e(r); } resolve(e) { let t = e.resolve(this.anchor), n = t.nodeAfter; return n && rh.isSelectable(n) ? new rh(t) : H.near(t); } }, ah = class e extends H { constructor(e) { super(e.resolve(0), e.resolve(e.content.size)); } replace(e, t = z.empty) { if (t == z.empty) { e.delete(0, e.doc.content.size); let t = H.atStart(e.doc); t.eq(e.selection) || e.setSelection(t); } else super.replace(e, t); } toJSON() { return { type: "all" }; } static fromJSON(t) { return new e(t); } map(t) { return new e(t); } eq(t) { return t instanceof e; } getBookmark() { return oh; } }; H.jsonID("all", ah); var oh = { map() { return this; }, resolve(e) { return new ah(e); } }; function sh(e, t, n, r, i, a = !1) { if (t.inlineContent) return th.create(e, n); for (let o = r - (i > 0 ? 0 : 1); i > 0 ? o < t.childCount : o >= 0; o += i) { let r = t.child(o); if (!r.isAtom) { let t = sh(e, r, n + i, i < 0 ? r.childCount : 0, i, a); if (t) return t; } else if (!a && rh.isSelectable(r)) return rh.create(e, n - (i < 0 ? r.nodeSize : 0)); n += r.nodeSize * i; } return null; } function ch(e, t, n) { let r = e.steps.length - 1; if (r < t) return; let i = e.steps[r]; if (!(i instanceof Gm || i instanceof Km)) return; let a = e.mapping.maps[r], o; a.forEach((e, t, n, r) => { o ??= r; }), e.setSelection(H.near(e.doc.resolve(o), n)); } function lh(e, t) { return !t || !e ? e : e.bind(t); } var uh = class { constructor(e, t, n) { this.name = e, this.init = lh(t.init, n), this.apply = lh(t.apply, n); } }; new uh("doc", { init(e) { return e.doc || e.schema.topNodeType.createAndFill(); }, apply(e) { return e.doc; } }), new uh("selection", { init(e, t) { return e.selection || H.atStart(t.doc); }, apply(e) { return e.selection; } }), new uh("storedMarks", { init(e) { return e.storedMarks || null; }, apply(e, t, n, r) { return r.selection.$cursor ? e.storedMarks : null; } }), new uh("scrollToSelection", { init() { return 0; }, apply(e, t) { return e.scrolledIntoView ? t + 1 : t; } }); var dh = (e, t) => { let { state: n, view: r } = e, { selection: i } = n; if (!i.empty) return !1; let { $from: a } = i; if (a.parentOffset !== 0) return !1; let o = a.depth - 1, s = a.node(o), c = a.index(o); if (c === 0) return !1; if (s.type === t) return e.commands.lift(t.name); let l = s.child(c - 1); if (l.type !== t || !l.lastChild?.isTextblock) return !1; let u = a.before(), d = u - 1 - 1, { tr: f } = n; return f.delete(u, a.after()).insert(d, a.parent.content), f.setSelection(th.create(f.doc, d)), r.dispatch(f.scrollIntoView()), !0; }, fh = /^\s*>\s$/, ph = Yd.create({ name: "blockquote", addOptions() { return { HTMLAttributes: {} }; }, content: "block+", group: "block", defining: !0, parseHTML() { return [{ tag: "blockquote" }]; }, renderHTML({ HTMLAttributes: e }) { return /* @__PURE__ */ Bp("blockquote", { ...P(this.options.HTMLAttributes, e), children: /* @__PURE__ */ Bp("slot", {}) }); }, parseMarkdown: (e, t) => { let n = t.parseBlockChildren ?? t.parseChildren; return t.createNode("blockquote", void 0, n(e.tokens || [])); }, renderMarkdown: (e, t) => { if (!e.content) return ""; let n = []; return e.content.forEach((e, r) => { let i = (t.renderChild?.call(t, e, r) ?? t.renderChildren([e])).split("\n").map((e) => e.trim() === "" ? ">" : `> ${e}`); n.push(i.join("\n")); }), n.join("\n>\n"); }, addCommands() { return { setBlockquote: () => ({ commands: e }) => e.wrapIn(this.name), toggleBlockquote: () => ({ commands: e }) => e.toggleWrap(this.name), unsetBlockquote: () => ({ commands: e }) => e.lift(this.name) }; }, addKeyboardShortcuts() { return { "Mod-Shift-b": () => this.editor.commands.toggleBlockquote(), Backspace: () => dh(this.editor, this.type) }; }, addInputRules() { return [jd({ find: fh, type: this.type })]; } }), mh = /(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))$/, hh = /(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))/g, gh = /(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))$/, _h = /(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))/g, vh = id.create({ name: "bold", addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [ { tag: "strong" }, { tag: "b", getAttrs: (e) => e.style.fontWeight !== "normal" && null }, { style: "font-weight=400", clearMark: (e) => e.type.name === this.name }, { style: "font-weight", getAttrs: (e) => /^(bold(er)?|[5-9]\d{2,})$/.test(e) && null } ]; }, renderHTML({ HTMLAttributes: e }) { return /* @__PURE__ */ Bp("strong", { ...P(this.options.HTMLAttributes, e), children: /* @__PURE__ */ Bp("slot", {}) }); }, markdownTokenName: "strong", parseMarkdown: (e, t) => t.applyMark("bold", t.parseInline(e.tokens || [])), markdownOptions: { htmlReopen: { open: "", close: "" } }, renderMarkdown: (e, t) => `**${t.renderChildren(e)}**`, addCommands() { return { setBold: () => ({ commands: e }) => e.setMark(this.name), toggleBold: () => ({ commands: e }) => e.toggleMark(this.name), unsetBold: () => ({ commands: e }) => e.unsetMark(this.name) }; }, addKeyboardShortcuts() { return { "Mod-b": () => this.editor.commands.toggleBold(), "Mod-B": () => this.editor.commands.toggleBold() }; }, addInputRules() { return [Od({ find: mh, type: this.type }), Od({ find: gh, type: this.type })]; }, addPasteRules() { return [Xd({ find: hh, type: this.type }), Xd({ find: _h, type: this.type })]; } }), yh = (e) => { let t = /`([^`]+)`(?!`)$/.exec(e); return !t || t.index > 0 && e[t.index - 1] === "`" ? null : { index: t.index, text: t[0], replaceWith: t[1] }; }, bh = (e) => { let t = /`([^`]+)`(?!`)/g, n = [], r; for (; (r = t.exec(e)) !== null;) r.index > 0 && e[r.index - 1] === "`" || n.push({ index: r.index, text: r[0], replaceWith: r[1] }); return n; }, xh = id.create({ name: "code", addOptions() { return { HTMLAttributes: {} }; }, excludes: "_", code: !0, exitable: !0, parseHTML() { return [{ tag: "code" }]; }, renderHTML({ HTMLAttributes: e }) { return [ "code", P(this.options.HTMLAttributes, e), 0 ]; }, markdownTokenName: "codespan", parseMarkdown: (e, t) => t.applyMark("code", [{ type: "text", text: e.text || "" }]), renderMarkdown: (e, t) => e.content ? `\`${t.renderChildren(e.content)}\`` : "", addCommands() { return { setCode: () => ({ commands: e }) => e.setMark(this.name), toggleCode: () => ({ commands: e }) => e.toggleMark(this.name), unsetCode: () => ({ commands: e }) => e.unsetMark(this.name) }; }, addKeyboardShortcuts() { return { "Mod-e": () => this.editor.commands.toggleCode() }; }, addInputRules() { return [Od({ find: yh, type: this.type })]; }, addPasteRules() { return [Xd({ find: bh, type: this.type })]; } }), Sh = 4, Ch = /^```([a-z]+)?[\s\n]$/, wh = /^~~~([a-z]+)?[\s\n]$/, Th = Yd.create({ name: "codeBlock", addOptions() { return { languageClassPrefix: "language-", exitOnTripleEnter: !0, exitOnArrowDown: !0, defaultLanguage: null, enableTabIndentation: !1, tabSize: Sh, HTMLAttributes: {} }; }, content: "text*", marks: "", group: "block", code: !0, defining: !0, addAttributes() { return { language: { default: this.options.defaultLanguage, parseHTML: (e) => { let { languageClassPrefix: t } = this.options; return t && [...e.firstElementChild?.classList || []].filter((e) => e.startsWith(t)).map((e) => e.replace(t, ""))[0] || null; }, rendered: !1 } }; }, parseHTML() { return [{ tag: "pre", preserveWhitespace: "full" }]; }, renderHTML({ node: e, HTMLAttributes: t }) { return [ "pre", P(this.options.HTMLAttributes, t), [ "code", { class: e.attrs.language ? this.options.languageClassPrefix + e.attrs.language : null }, 0 ] ]; }, markdownTokenName: "code", parseMarkdown: (e, t) => e.raw?.startsWith("```") === !1 && e.raw?.startsWith("~~~") === !1 && e.codeBlockStyle !== "indented" ? [] : t.createNode("codeBlock", { language: e.lang || null }, e.text ? [t.createTextNode(e.text)] : []), renderMarkdown: (e, t) => { let n = "", r = e.attrs?.language || ""; return n = e.content ? [ `\`\`\`${r}`, t.renderChildren(e.content), "```" ].join("\n") : `\`\`\`${r} \`\`\``, n; }, addCommands() { return { setCodeBlock: (e) => ({ commands: t }) => t.setNode(this.name, e), toggleCodeBlock: (e) => ({ commands: t }) => t.toggleNode(this.name, "paragraph", e) }; }, addKeyboardShortcuts() { return { "Mod-Alt-c": () => this.editor.commands.toggleCodeBlock(), Backspace: () => { let { empty: e, $anchor: t } = this.editor.state.selection, n = t.pos === 1; return !e || t.parent.type.name !== this.name ? !1 : n || !t.parent.textContent.length ? this.editor.commands.clearNodes() : !1; }, Tab: ({ editor: e }) => { if (!this.options.enableTabIndentation) return !1; let t = this.options.tabSize ?? Sh, { state: n } = e, { selection: r } = n, { $from: i, empty: a } = r; if (i.parent.type !== this.type) return !1; let o = " ".repeat(t); return a ? e.commands.insertContent(o) : e.commands.command(({ tr: e }) => { let { from: t, to: i } = r, a = n.doc.textBetween(t, i, "\n", "\n").split("\n").map((e) => o + e).join("\n"); return e.replaceWith(t, i, n.schema.text(a)), !0; }); }, "Shift-Tab": ({ editor: e }) => { if (!this.options.enableTabIndentation) return !1; let t = this.options.tabSize ?? Sh, { state: n } = e, { selection: r } = n, { $from: i, empty: a } = r; return i.parent.type === this.type ? a ? e.commands.command(({ tr: e }) => { let { pos: r } = i, a = i.start(), o = i.end(), s = n.doc.textBetween(a, o, "\n", "\n").split("\n"), c = 0, l = 0, u = r - a; for (let e = 0; e < s.length; e += 1) { if (l + s[e].length >= u) { c = e; break; } l += s[e].length + 1; } let d = s[c].match(/^ */)?.[0] || "", f = Math.min(d.length, t); if (f === 0) return !0; let p = a; for (let e = 0; e < c; e += 1) p += s[e].length + 1; return e.delete(p, p + f), r - p <= f && e.setSelection(S.create(e.doc, p)), !0; }) : e.commands.command(({ tr: e }) => { let { from: i, to: a } = r, o = n.doc.textBetween(i, a, "\n", "\n").split("\n").map((e) => { let n = e.match(/^ */)?.[0] || "", r = Math.min(n.length, t); return e.slice(r); }).join("\n"); return e.replaceWith(i, a, n.schema.text(o)), !0; }) : !1; }, Enter: ({ editor: e }) => { if (!this.options.exitOnTripleEnter) return !1; let { state: t } = e, { selection: n } = t, { $from: r, empty: i } = n; if (!i || r.parent.type !== this.type) return !1; let a = r.parentOffset === r.parent.nodeSize - 2, o = r.parent.textContent.endsWith("\n\n"); return !a || !o ? !1 : e.chain().command(({ tr: e }) => (e.delete(r.pos - 2, r.pos), !0)).exitCode().run(); }, ArrowDown: ({ editor: e }) => { if (!this.options.exitOnArrowDown) return !1; let { state: t } = e, { selection: n, doc: r } = t, { $from: i, empty: a } = n; if (!a || i.parent.type !== this.type || i.parentOffset !== i.parent.nodeSize - 2) return !1; let o = i.after(); return o === void 0 ? !1 : r.nodeAt(o) ? e.commands.command(({ tr: e }) => (e.setSelection(x.near(r.resolve(o))), !0)) : e.commands.exitCode(); } }; }, addInputRules() { return [Ad({ find: Ch, type: this.type, getAttributes: (e) => ({ language: e[1] }) }), Ad({ find: wh, type: this.type, getAttributes: (e) => ({ language: e[1] }) })]; }, addProseMirrorPlugins() { return [new w({ key: new T("codeBlockVSCodeHandler"), props: { handlePaste: (e, t) => { if (!t.clipboardData || this.editor.isActive(this.type.name)) return !1; let n = t.clipboardData.getData("text/plain"), r = t.clipboardData.getData("vscode-editor-data"), i = (r ? JSON.parse(r) : void 0)?.mode; if (!n || !i) return !1; let { tr: a, schema: o } = e.state, s = o.text(n.replace(/\r\n?/g, "\n")); return a.replaceSelectionWith(this.type.create({ language: i }, s)), a.selection.$from.parent.type !== this.type && a.setSelection(S.near(a.doc.resolve(Math.max(0, a.selection.from - 2)))), a.setMeta("paste", !0), e.dispatch(a), !0; } } })]; } }), Eh = Yd.create({ name: "doc", topNode: !0, content: "block+", renderMarkdown: (e, t) => e.content ? t.renderChildren(e.content, "\n\n") : "" }), Dh = Yd.create({ name: "hardBreak", markdownTokenName: "br", addOptions() { return { keepMarks: !0, HTMLAttributes: {} }; }, inline: !0, group: "inline", selectable: !1, linebreakReplacement: !0, parseHTML() { return [{ tag: "br" }]; }, renderHTML({ HTMLAttributes: e }) { return ["br", P(this.options.HTMLAttributes, e)]; }, renderText() { return "\n"; }, renderMarkdown: () => " \n", parseMarkdown: () => ({ type: "hardBreak" }), addCommands() { return { setHardBreak: () => ({ commands: e, chain: t, state: n, editor: r }) => e.first([() => e.exitCode(), () => e.command(() => { let { selection: e, storedMarks: i } = n; if (e.$from.parent.type.spec.isolating) return !1; let { keepMarks: a } = this.options, { splittableMarks: o } = r.extensionManager, s = i || e.$to.parentOffset && e.$from.marks(); return t().insertContent({ type: this.name }).command(({ tr: e, dispatch: t }) => { if (t && s && a) { let t = s.filter((e) => o.includes(e.type.name)); e.ensureMarks(t); } return !0; }).run(); })]) }; }, addKeyboardShortcuts() { return { "Mod-Enter": () => this.editor.commands.setHardBreak(), "Shift-Enter": () => this.editor.commands.setHardBreak() }; } }), Oh = Yd.create({ name: "heading", addOptions() { return { levels: [ 1, 2, 3, 4, 5, 6 ], HTMLAttributes: {} }; }, content: "inline*", group: "block", defining: !0, addAttributes() { return { level: { default: 1, rendered: !1 } }; }, parseHTML() { return this.options.levels.map((e) => ({ tag: `h${e}`, attrs: { level: e } })); }, renderHTML({ node: e, HTMLAttributes: t }) { return [ `h${this.options.levels.includes(e.attrs.level) ? e.attrs.level : this.options.levels[0]}`, P(this.options.HTMLAttributes, t), 0 ]; }, parseMarkdown: (e, t) => t.createNode("heading", { level: e.depth || 1 }, t.parseInline(e.tokens || [])), renderMarkdown: (e, t) => { let n = e.attrs?.level ? parseInt(e.attrs.level, 10) : 1, r = "#".repeat(n); return e.content ? `${r} ${t.renderChildren(e.content)}` : ""; }, addCommands() { return { setHeading: (e) => ({ commands: t }) => this.options.levels.includes(e.level) ? t.setNode(this.name, e) : !1, toggleHeading: (e) => ({ commands: t }) => this.options.levels.includes(e.level) ? t.toggleNode(this.name, "paragraph", e) : !1 }; }, addKeyboardShortcuts() { return this.options.levels.reduce((e, t) => ({ ...e, [`Mod-Alt-${t}`]: () => this.editor.commands.toggleHeading({ level: t }) }), {}); }, addInputRules() { return this.options.levels.map((e) => Ad({ find: RegExp(`^(#{${Math.min(...this.options.levels)},${e}})\\s$`), type: this.type, getAttributes: { level: e } })); } }), kh = Yd.create({ name: "horizontalRule", addOptions() { return { HTMLAttributes: {}, nextNodeType: "paragraph" }; }, group: "block", parseHTML() { return [{ tag: "hr" }]; }, renderHTML({ HTMLAttributes: e }) { return ["hr", P(this.options.HTMLAttributes, e)]; }, markdownTokenName: "hr", parseMarkdown: (e, t) => t.createNode("horizontalRule"), renderMarkdown: () => "---", addCommands() { return { setHorizontalRule: () => ({ chain: e, state: t }) => { if (!Fd(t, t.schema.nodes[this.name])) return !1; let { selection: n } = t, { $to: r } = n, i = e(); return bu(n) ? i.insertContentAt(r.pos, { type: this.name }) : i.insertContent({ type: this.name }), i.command(({ state: e, tr: t, dispatch: n }) => { if (n) { let { $to: n } = t.selection, r = n.end(); if (n.nodeAfter) n.nodeAfter.isTextblock ? t.setSelection(S.create(t.doc, n.pos + 1)) : n.nodeAfter.isBlock ? t.setSelection(C.create(t.doc, n.pos)) : t.setSelection(S.create(t.doc, n.pos)); else { let i = (e.schema.nodes[this.options.nextNodeType] || n.parent.type.contentMatch.defaultType)?.create(); i && (t.insert(r, i), t.setSelection(S.create(t.doc, r + 1))); } t.scrollIntoView(); } return !0; }).run(); } }; }, addInputRules() { return [kd({ find: /^(?:---|—-|___\s|\*\*\*\s)$/, type: this.type })]; } }), Ah = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/, jh = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g, Mh = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/, Nh = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g, Ph = id.create({ name: "italic", addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [ { tag: "em" }, { tag: "i", getAttrs: (e) => e.style.fontStyle !== "normal" && null }, { style: "font-style=normal", clearMark: (e) => e.type.name === this.name }, { style: "font-style=italic" } ]; }, renderHTML({ HTMLAttributes: e }) { return [ "em", P(this.options.HTMLAttributes, e), 0 ]; }, addCommands() { return { setItalic: () => ({ commands: e }) => e.setMark(this.name), toggleItalic: () => ({ commands: e }) => e.toggleMark(this.name), unsetItalic: () => ({ commands: e }) => e.unsetMark(this.name) }; }, markdownTokenName: "em", parseMarkdown: (e, t) => t.applyMark("italic", t.parseInline(e.tokens || [])), markdownOptions: { htmlReopen: { open: "", close: "" } }, renderMarkdown: (e, t) => `*${t.renderChildren(e)}*`, addKeyboardShortcuts() { return { "Mod-i": () => this.editor.commands.toggleItalic(), "Mod-I": () => this.editor.commands.toggleItalic() }; }, addInputRules() { return [Od({ find: Ah, type: this.type }), Od({ find: Mh, type: this.type })]; }, addPasteRules() { return [Xd({ find: jh, type: this.type }), Xd({ find: Nh, type: this.type })]; } }), Fh = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2", Ih = "ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2", Lh = "numeric", Rh = "ascii", zh = "alpha", Bh = "asciinumeric", Vh = "alphanumeric", Hh = "domain", Uh = "emoji", Wh = "scheme", Gh = "slashscheme", Kh = "whitespace"; function qh(e, t) { return e in t || (t[e] = []), t[e]; } function Jh(e, t, n) { t[Lh] && (t[Bh] = !0, t[Vh] = !0), t[Rh] && (t[Bh] = !0, t[zh] = !0), t[Bh] && (t[Vh] = !0), t[zh] && (t[Vh] = !0), t[Vh] && (t[Hh] = !0), t[Uh] && (t[Hh] = !0); for (let r in t) { let t = qh(r, n); t.indexOf(e) < 0 && t.push(e); } } function Yh(e, t) { let n = {}; for (let r in t) t[r].indexOf(e) >= 0 && (n[r] = !0); return n; } function Xh(e = null) { this.j = {}, this.jr = [], this.jd = null, this.t = e; } Xh.groups = {}, Xh.prototype = { accepts() { return !!this.t; }, go(e) { let t = this, n = t.j[e]; if (n) return n; for (let n = 0; n < t.jr.length; n++) { let r = t.jr[n][0], i = t.jr[n][1]; if (i && r.test(e)) return i; } return t.jd; }, has(e, t = !1) { return t ? e in this.j : !!this.go(e); }, ta(e, t, n, r) { for (let i = 0; i < e.length; i++) this.tt(e[i], t, n, r); }, tr(e, t, n, r) { r ||= Xh.groups; let i; return t && t.j ? i = t : (i = new Xh(t), n && r && Jh(t, n, r)), this.jr.push([e, i]), i; }, ts(e, t, n, r) { let i = this, a = e.length; if (!a) return i; for (let t = 0; t < a - 1; t++) i = i.tt(e[t]); return i.tt(e[a - 1], t, n, r); }, tt(e, t, n, r) { r ||= Xh.groups; let i = this; if (t && t.j) return i.j[e] = t, t; let a = t, o, s = i.go(e); return s ? (o = new Xh(), Object.assign(o.j, s.j), o.jr.push.apply(o.jr, s.jr), o.jd = s.jd, o.t = s.t) : o = new Xh(), a && (r && (o.t && typeof o.t == "string" ? Jh(a, Object.assign(Yh(o.t, r), n), r) : n && Jh(a, n, r)), o.t = a), i.j[e] = o, o; } }; var U = (e, t, n, r, i) => e.ta(t, n, r, i), W = (e, t, n, r, i) => e.tr(t, n, r, i), Zh = (e, t, n, r, i) => e.ts(t, n, r, i), G = (e, t, n, r, i) => e.tt(t, n, r, i), Qh = "WORD", $h = "UWORD", eg = "ASCIINUMERICAL", tg = "ALPHANUMERICAL", ng = "LOCALHOST", rg = "TLD", ig = "UTLD", ag = "SCHEME", og = "SLASH_SCHEME", sg = "NUM", cg = "WS", lg = "NL", ug = "OPENBRACE", dg = "CLOSEBRACE", fg = "OPENBRACKET", pg = "CLOSEBRACKET", mg = "OPENPAREN", hg = "CLOSEPAREN", gg = "OPENANGLEBRACKET", _g = "CLOSEANGLEBRACKET", vg = "FULLWIDTHLEFTPAREN", yg = "FULLWIDTHRIGHTPAREN", bg = "LEFTCORNERBRACKET", xg = "RIGHTCORNERBRACKET", Sg = "LEFTWHITECORNERBRACKET", Cg = "RIGHTWHITECORNERBRACKET", wg = "FULLWIDTHLESSTHAN", Tg = "FULLWIDTHGREATERTHAN", Eg = "AMPERSAND", Dg = "APOSTROPHE", Og = "ASTERISK", kg = "AT", Ag = "BACKSLASH", jg = "BACKTICK", Mg = "CARET", Ng = "COLON", Pg = "COMMA", Fg = "DOLLAR", Ig = "DOT", Lg = "EQUALS", Rg = "EXCLAMATION", zg = "HYPHEN", Bg = "PERCENT", Vg = "PIPE", Hg = "PLUS", Ug = "POUND", Wg = "QUERY", Gg = "QUOTE", Kg = "FULLWIDTHMIDDLEDOT", qg = "SEMI", Jg = "SLASH", Yg = "TILDE", Xg = "UNDERSCORE", Zg = "EMOJI", Qg = "SYM", $g = /*#__PURE__*/ Object.freeze({ __proto__: null, ALPHANUMERICAL: tg, AMPERSAND: Eg, APOSTROPHE: Dg, ASCIINUMERICAL: eg, ASTERISK: Og, AT: kg, BACKSLASH: Ag, BACKTICK: jg, CARET: Mg, CLOSEANGLEBRACKET: _g, CLOSEBRACE: dg, CLOSEBRACKET: pg, CLOSEPAREN: hg, COLON: Ng, COMMA: Pg, DOLLAR: Fg, DOT: Ig, EMOJI: Zg, EQUALS: Lg, EXCLAMATION: Rg, FULLWIDTHGREATERTHAN: Tg, FULLWIDTHLEFTPAREN: vg, FULLWIDTHLESSTHAN: wg, FULLWIDTHMIDDLEDOT: Kg, FULLWIDTHRIGHTPAREN: yg, HYPHEN: zg, LEFTCORNERBRACKET: bg, LEFTWHITECORNERBRACKET: Sg, LOCALHOST: ng, NL: lg, NUM: sg, OPENANGLEBRACKET: gg, OPENBRACE: ug, OPENBRACKET: fg, OPENPAREN: mg, PERCENT: Bg, PIPE: Vg, PLUS: Hg, POUND: Ug, QUERY: Wg, QUOTE: Gg, RIGHTCORNERBRACKET: xg, RIGHTWHITECORNERBRACKET: Cg, SCHEME: ag, SEMI: qg, SLASH: Jg, SLASH_SCHEME: og, SYM: Qg, TILDE: Yg, TLD: rg, UNDERSCORE: Xg, UTLD: ig, UWORD: $h, WORD: Qh, WS: cg }), e_ = /[a-z]/, t_ = /\p{L}/u, n_ = /\p{Emoji}/u, r_ = /\d/, i_ = /\s/, a_ = "\r", o_ = "\n", s_ = "️", c_ = "", l_ = "", u_ = null, d_ = null; function f_(e = []) { let t = {}; Xh.groups = t; let n = new Xh(); u_ ??= g_(Fh), d_ ??= g_(Ih), G(n, "'", Dg), G(n, "{", ug), G(n, "}", dg), G(n, "[", fg), G(n, "]", pg), G(n, "(", mg), G(n, ")", hg), G(n, "<", gg), G(n, ">", _g), G(n, "(", vg), G(n, ")", yg), G(n, "「", bg), G(n, "」", xg), G(n, "『", Sg), G(n, "』", Cg), G(n, "<", wg), G(n, ">", Tg), G(n, "&", Eg), G(n, "*", Og), G(n, "@", kg), G(n, "`", jg), G(n, "^", Mg), G(n, ":", Ng), G(n, ",", Pg), G(n, "$", Fg), G(n, ".", Ig), G(n, "=", Lg), G(n, "!", Rg), G(n, "-", zg), G(n, "%", Bg), G(n, "|", Vg), G(n, "+", Hg), G(n, "#", Ug), G(n, "?", Wg), G(n, "\"", Gg), G(n, "/", Jg), G(n, ";", qg), G(n, "~", Yg), G(n, "_", Xg), G(n, "\\", Ag), G(n, "・", Kg); let r = W(n, r_, sg, { [Lh]: !0 }); W(r, r_, r); let i = W(r, e_, eg, { [Bh]: !0 }), a = W(r, t_, tg, { [Vh]: !0 }), o = W(n, e_, Qh, { [Rh]: !0 }); W(o, r_, i), W(o, e_, o), W(i, r_, i), W(i, e_, i); let s = W(n, t_, $h, { [zh]: !0 }); W(s, e_), W(s, r_, a), W(s, t_, s), W(a, r_, a), W(a, e_), W(a, t_, a); let c = G(n, o_, lg, { [Kh]: !0 }), l = G(n, a_, cg, { [Kh]: !0 }), u = W(n, i_, cg, { [Kh]: !0 }); G(n, l_, u), G(l, o_, c), G(l, l_, u), W(l, i_, u), G(u, a_), G(u, o_), W(u, i_, u), G(u, l_, u); let d = W(n, n_, Zg, { [Uh]: !0 }); G(d, "#"), W(d, n_, d), G(d, s_, d); let f = G(d, c_); G(f, "#"), W(f, n_, d); let p = [[e_, o], [r_, i]], m = [ [e_, null], [t_, s], [r_, a] ]; for (let e = 0; e < u_.length; e++) h_(n, u_[e], rg, Qh, p); for (let e = 0; e < d_.length; e++) h_(n, d_[e], ig, $h, m); Jh(rg, { tld: !0, ascii: !0 }, t), Jh(ig, { utld: !0, alpha: !0 }, t), h_(n, "file", ag, Qh, p), h_(n, "mailto", ag, Qh, p), h_(n, "http", og, Qh, p), h_(n, "https", og, Qh, p), h_(n, "ftp", og, Qh, p), h_(n, "ftps", og, Qh, p), Jh(ag, { scheme: !0, ascii: !0 }, t), Jh(og, { slashscheme: !0, ascii: !0 }, t), e = e.sort((e, t) => e[0] > t[0] ? 1 : -1); for (let t = 0; t < e.length; t++) { let r = e[t][0], i = e[t][1] ? { [Wh]: !0 } : { [Gh]: !0 }; r.indexOf("-") >= 0 ? i[Hh] = !0 : e_.test(r) ? r_.test(r) ? i[Bh] = !0 : i[Rh] = !0 : i[Lh] = !0, Zh(n, r, r, i); } return Zh(n, "localhost", ng, { ascii: !0 }), n.jd = new Xh(Qg), { start: n, tokens: Object.assign({ groups: t }, $g) }; } function p_(e, t) { let n = m_(t.replace(/[A-Z]/g, (e) => e.toLowerCase())), r = n.length, i = [], a = 0, o = 0; for (; o < r;) { let s = e, c = null, l = 0, u = null, d = -1, f = -1; for (; o < r && (c = s.go(n[o]));) s = c, s.accepts() ? (d = 0, f = 0, u = s) : d >= 0 && (d += n[o].length, f++), l += n[o].length, a += n[o].length, o++; a -= d, o -= f, l -= d, i.push({ t: u.t, v: t.slice(a - l, a), s: a - l, e: a }); } return i; } function m_(e) { let t = [], n = e.length, r = 0; for (; r < n;) { let i = e.charCodeAt(r), a, o = i < 55296 || i > 56319 || r + 1 === n || (a = e.charCodeAt(r + 1)) < 56320 || a > 57343 ? e[r] : e.slice(r, r + 2); t.push(o), r += o.length; } return t; } function h_(e, t, n, r, i) { let a, o = t.length; for (let n = 0; n < o - 1; n++) { let o = t[n]; e.j[o] ? a = e.j[o] : (a = new Xh(r), a.jr = i.slice(), e.j[o] = a), e = a; } return a = new Xh(n), a.jr = i.slice(), e.j[t[o - 1]] = a, a; } function g_(e) { let t = [], n = [], r = 0; for (; r < e.length;) { let i = 0; for (; "0123456789".indexOf(e[r + i]) >= 0;) i++; if (i > 0) { t.push(n.join("")); for (let t = parseInt(e.substring(r, r + i), 10); t > 0; t--) n.pop(); r += i; } else n.push(e[r]), r++; } return t; } var __ = { defaultProtocol: "http", events: null, format: y_, formatHref: y_, nl2br: !1, tagName: "a", target: null, rel: null, validate: !0, truncate: Infinity, className: null, attributes: null, ignoreTags: [], render: null }; function v_(e, t = null) { let n = Object.assign({}, __); e && (n = Object.assign(n, e instanceof v_ ? e.o : e)); let r = n.ignoreTags, i = []; for (let e = 0; e < r.length; e++) i.push(r[e].toUpperCase()); this.o = n, t && (this.defaultRender = t), this.ignoreTags = i; } v_.prototype = { o: __, ignoreTags: [], defaultRender(e) { return e; }, check(e) { return this.get("validate", e.toString(), e); }, get(e, t, n) { let r = t != null, i = this.o[e]; return i && (typeof i == "object" ? (i = n.t in i ? i[n.t] : __[e], typeof i == "function" && r && (i = i(t, n))) : typeof i == "function" && r && (i = i(t, n.t, n)), i); }, getObj(e, t, n) { let r = this.o[e]; return typeof r == "function" && t != null && (r = r(t, n.t, n)), r; }, render(e) { let t = e.render(this); return (this.get("render", null, e) || this.defaultRender)(t, e.t, e); } }; function y_(e) { return e; } function b_(e, t) { this.t = "token", this.v = e, this.tk = t; } b_.prototype = { isLink: !1, toString() { return this.v; }, toHref(e) { return this.toString(); }, toFormattedString(e) { let t = this.toString(), n = e.get("truncate", t, this), r = e.get("format", t, this); return n && r.length > n ? r.substring(0, n) + "…" : r; }, toFormattedHref(e) { return e.get("formatHref", this.toHref(e.get("defaultProtocol")), this); }, startIndex() { return this.tk[0].s; }, endIndex() { return this.tk[this.tk.length - 1].e; }, toObject(e = __.defaultProtocol) { return { type: this.t, value: this.toString(), isLink: this.isLink, href: this.toHref(e), start: this.startIndex(), end: this.endIndex() }; }, toFormattedObject(e) { return { type: this.t, value: this.toFormattedString(e), isLink: this.isLink, href: this.toFormattedHref(e), start: this.startIndex(), end: this.endIndex() }; }, validate(e) { return e.get("validate", this.toString(), this); }, render(e) { let t = this, n = this.toHref(e.get("defaultProtocol")), r = e.get("formatHref", n, this), i = e.get("tagName", n, t), a = this.toFormattedString(e), o = {}, s = e.get("className", n, t), c = e.get("target", n, t), l = e.get("rel", n, t), u = e.getObj("attributes", n, t), d = e.getObj("events", n, t); return o.href = r, s && (o.class = s), c && (o.target = c), l && (o.rel = l), u && Object.assign(o, u), { tagName: i, attributes: o, content: a, eventListeners: d }; } }; function x_(e, t) { class n extends b_ { constructor(t, n) { super(t, n), this.t = e; } } for (let e in t) n.prototype[e] = t[e]; return n.t = e, n; } var S_ = x_("email", { isLink: !0, toHref() { return "mailto:" + this.toString(); } }), C_ = x_("text"), w_ = x_("nl"), T_ = x_("url", { isLink: !0, toHref(e = __.defaultProtocol) { return this.hasProtocol() ? this.v : `${e}://${this.v}`; }, hasProtocol() { let e = this.tk; return e.length >= 2 && e[0].t !== ng && e[1].t === Ng; } }), E_ = (e) => new Xh(e); function D_({ groups: e }) { let t = e.domain.concat([ Eg, Og, kg, Ag, jg, Mg, Fg, Lg, zg, sg, Bg, Vg, Hg, Ug, Jg, Qg, Yg, Xg ]), n = [ Dg, Ng, Pg, Ig, Rg, Bg, Wg, Gg, qg, gg, _g, ug, dg, pg, fg, mg, hg, vg, yg, bg, xg, Sg, Cg, wg, Tg ], r = [ Eg, Dg, Og, Ag, jg, Mg, Fg, Lg, zg, ug, dg, Bg, Vg, Hg, Ug, Wg, Jg, Qg, Yg, Xg ], i = E_(), a = G(i, Yg); U(a, r, a), U(a, e.domain, a); let o = E_(), s = E_(), c = E_(); U(i, e.domain, o), U(i, e.scheme, s), U(i, e.slashscheme, c), U(o, r, a), U(o, e.domain, o); let l = G(o, kg); G(a, kg, l), G(s, kg, l), G(c, kg, l); let u = G(a, Ig); U(u, r, a), U(u, e.domain, a); let d = E_(); U(l, e.domain, d), U(d, e.domain, d); let f = G(d, Ig); U(f, e.domain, d); let p = E_(S_); U(f, e.tld, p), U(f, e.utld, p), G(l, ng, p); let m = G(d, zg); G(m, zg, m), U(m, e.domain, d), U(p, e.domain, d), G(p, Ig, f), G(p, zg, m); let h = G(o, zg), g = G(o, Ig); G(h, zg, h), U(h, e.domain, o), U(g, r, a), U(g, e.domain, o); let _ = E_(T_); U(g, e.tld, _), U(g, e.utld, _), U(_, e.domain, o), U(_, r, a), G(_, Ig, g), G(_, zg, h), G(_, kg, l); let ee = G(_, Ng), v = E_(T_); U(ee, e.numeric, v); let y = E_(T_), te = E_(); U(y, t, y), U(y, n, te), U(te, t, y), U(te, n, te), G(_, Jg, y), G(v, Jg, y); let ne = G(s, Ng), re = G(G(G(c, Ng), Jg), Jg); U(s, e.domain, o), G(s, Ig, g), G(s, zg, h), U(c, e.domain, o), G(c, Ig, g), G(c, zg, h), U(ne, e.domain, y), G(ne, Jg, y), G(ne, Wg, y), U(re, e.domain, y), U(re, t, y), G(re, Jg, y); let ie = [ [ug, dg], [fg, pg], [mg, hg], [gg, _g], [vg, yg], [bg, xg], [Sg, Cg], [wg, Tg] ]; for (let e = 0; e < ie.length; e++) { let [r, i] = ie[e], a = G(y, r); G(te, r, a); let o = E_(T_); U(a, t, o); let s = E_(); U(a, n, s), G(a, i, y), U(o, t, o), U(o, n, s), U(s, t, o), U(s, n, s), G(o, i, y), G(s, i, y); } return G(i, ng, _), G(i, lg, w_), { start: i, tokens: $g }; } function O_(e, t, n) { let r = n.length, i = 0, a = [], o = []; for (; i < r;) { let s = e, c = null, l = null, u = 0, d = null, f = -1; for (; i < r && !(c = s.go(n[i].t));) o.push(n[i++]); for (; i < r && (l = c || s.go(n[i].t));) c = null, s = l, s.accepts() ? (f = 0, d = s) : f >= 0 && f++, i++, u++; if (f < 0) i -= u, i < r && (o.push(n[i]), i++); else { o.length > 0 && (a.push(k_(C_, t, o)), o = []), i -= f, u -= f; let e = d.t, r = n.slice(i - u, i); a.push(k_(e, t, r)); } } return o.length > 0 && a.push(k_(C_, t, o)), a; } function k_(e, t, n) { let r = n[0].s, i = n[n.length - 1].e; return new e(t.slice(r, i), n); } var A_ = typeof console < "u" && console && console.warn || (() => {}), j_ = "until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.", K = { scanner: null, parser: null, tokenQueue: [], pluginQueue: [], customSchemes: [], initialized: !1 }; function M_() { return Xh.groups = {}, K.scanner = null, K.parser = null, K.tokenQueue = [], K.pluginQueue = [], K.customSchemes = [], K.initialized = !1, K; } function N_(e, t = !1) { if (K.initialized && A_(`linkifyjs: already initialized - will not register custom scheme "${e}" ${j_}`), !/^[0-9a-z]+(-[0-9a-z]+)*$/.test(e)) throw Error("linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat"); K.customSchemes.push([e, t]); } function P_() { K.scanner = f_(K.customSchemes); for (let e = 0; e < K.tokenQueue.length; e++) K.tokenQueue[e][1]({ scanner: K.scanner }); K.parser = D_(K.scanner.tokens); for (let e = 0; e < K.pluginQueue.length; e++) K.pluginQueue[e][1]({ scanner: K.scanner, parser: K.parser }); return K.initialized = !0, K; } function F_(e) { return K.initialized || P_(), O_(K.parser.start, e, p_(K.scanner.start, e)); } F_.scan = p_; function I_(e, t = null, n = null) { if (t && typeof t == "object") { if (n) throw Error(`linkifyjs: Invalid link type ${t}; must be a string`); n = t, t = null; } let r = new v_(n), i = F_(e), a = []; for (let e = 0; e < i.length; e++) { let n = i[e]; n.isLink && (!t || n.t === t) && r.check(n) && a.push(n.toFormattedObject(r)); } return a; } //#endregion //#region node_modules/.pnpm/@tiptap+extension-link@3.26.1_@tiptap+core@3.26.1_@tiptap+pm@3.26.1__@tiptap+pm@3.26.1/node_modules/@tiptap/extension-link/dist/index.js var L_ = "[\0- \xA0 -\u2029 ]", R_ = new RegExp(L_), z_ = RegExp(`${L_}$`), B_ = new RegExp(L_, "g"); function V_(e) { return e.length === 1 ? e[0].isLink : e.length === 3 && e[1].isLink ? ["()", "[]"].includes(e[0].value + e[2].value) : !1; } function H_(e) { return new w({ key: new T("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 (su(Al(n.doc, [...t])).forEach(({ newRange: t }) => { let n = Ml(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 (!z_.test(e)) return; i = n[0], a = r.doc.textBetween(i.pos, t.to, void 0, " "); } if (i && a) { let t = a.split(R_).filter(Boolean); if (t.length <= 0) return !1; let n = t[t.length - 1], s = i.pos + a.lastIndexOf(n); if (!n) return !1; let c = F_(n).map((t) => t.toObject(e.defaultProtocol)); if (!V_(c)) return !1; 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) => { cu(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; } }); } function U_(e) { return new w({ key: new T("handleClickLink"), props: { handleClick: (t, n, r) => { if (r.button !== 0 || !t.editable) return !1; let i = null; if (r.target instanceof HTMLAnchorElement) i = r.target; else { let t = r.target; if (!t) return !1; let n = e.editor.view.dom; i = t.closest("a"), i && !n.contains(i) && (i = null); } if (!i) return !1; let a = !1; if (e.enableClickSelection && (a = e.editor.commands.extendMarkRange(e.type.name)), e.openOnClick) { let n = iu(t.state, e.type.name), r = i.href ?? n.href, o = i.target ?? n.target; r && (window.open(r, o), a = !0); } return a; } } }); } function W_(e) { return new w({ key: new T("handlePasteLink"), props: { handlePaste: (t, n, r) => { let { shouldAutoLink: i } = e, { state: a } = t, { selection: o } = a, { empty: s } = o; if (s) return !1; let c = ""; r.content.forEach((e) => { c += e.textContent; }); let l = I_(c, { defaultProtocol: e.defaultProtocol }).find((e) => e.isLink && e.value === c); return !c || !l || i !== void 0 && !i(l.value) ? !1 : e.editor.commands.setMark(e.type, { href: l.href }); } } }); } function G_(e, t) { let n = [ "http", "https", "ftp", "ftps", "mailto", "tel", "callto", "sms", "cid", "xmpp" ]; return t && t.forEach((e) => { let t = typeof e == "string" ? e : e.scheme; t && n.push(t); }), !e || e.replace(B_, "").match(RegExp(`^(?:(?:${n.join("|")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`, "i")); } var K_ = id.create({ name: "link", priority: 1e3, keepOnSplit: !1, exitable: !0, onCreate() { this.options.validate && !this.options.shouldAutoLink && (this.options.shouldAutoLink = this.options.validate, console.warn("The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.")), this.options.protocols.forEach((e) => { if (typeof e == "string") { N_(e); return; } N_(e.scheme, e.optionalSlashes); }); }, onDestroy() { M_(); }, inclusive() { return this.options.autolink; }, addOptions() { return { openOnClick: !0, enableClickSelection: !1, linkOnPaste: !0, autolink: !0, protocols: [], defaultProtocol: "http", HTMLAttributes: { target: "_blank", rel: "noopener noreferrer nofollow", class: null }, isAllowedUri: (e, t) => !!G_(e, t.protocols), validate: (e) => !!e, shouldAutoLink: (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)); } }; }, addAttributes() { return { href: { default: null, parseHTML(e) { return e.getAttribute("href"); } }, target: { default: this.options.HTMLAttributes.target }, rel: { default: this.options.HTMLAttributes.rel }, class: { default: this.options.HTMLAttributes.class }, title: { default: null } }; }, parseHTML() { return [{ tag: "a[href]", getAttrs: (e) => { let t = e.getAttribute("href"); return !t || !this.options.isAllowedUri(t, { defaultValidate: (e) => !!G_(e, this.options.protocols), protocols: this.options.protocols, defaultProtocol: this.options.defaultProtocol }) ? !1 : null; } }]; }, renderHTML({ HTMLAttributes: e }) { return this.options.isAllowedUri(e.href, { defaultValidate: (e) => !!G_(e, this.options.protocols), protocols: this.options.protocols, defaultProtocol: this.options.defaultProtocol }) ? [ "a", P(this.options.HTMLAttributes, e), 0 ] : [ "a", P(this.options.HTMLAttributes, { ...e, href: "" }), 0 ]; }, markdownTokenName: "link", parseMarkdown: (e, t) => t.applyMark("link", t.parseInline(e.tokens || []), { href: e.href, title: e.title || null }), renderMarkdown: (e, t) => { let n = e.attrs?.href ?? "", r = e.attrs?.title ?? "", i = t.renderChildren(e); return r ? `[${i}](${n} "${r}")` : `[${i}](${n})`; }, addCommands() { return { setLink: (e) => ({ chain: t }) => { let { href: n } = e; return this.options.isAllowedUri(n, { defaultValidate: (e) => !!G_(e, this.options.protocols), protocols: this.options.protocols, defaultProtocol: this.options.defaultProtocol }) ? t().setMark(this.name, e).setMeta("preventAutolink", !0).run() : !1; }, toggleLink: (e) => ({ chain: t }) => { let { href: n } = e || {}; return n && !this.options.isAllowedUri(n, { defaultValidate: (e) => !!G_(e, this.options.protocols), protocols: this.options.protocols, defaultProtocol: this.options.defaultProtocol }) ? !1 : t().toggleMark(this.name, e, { extendEmptyMarkRange: !0 }).setMeta("preventAutolink", !0).run(); }, unsetLink: () => ({ chain: e }) => e().unsetMark(this.name, { extendEmptyMarkRange: !0 }).setMeta("preventAutolink", !0).run() }; }, addPasteRules() { return [Xd({ find: (e) => { let t = []; if (e) { let { protocols: n, defaultProtocol: r } = this.options, i = I_(e).filter((e) => e.isLink && this.options.isAllowedUri(e.value, { defaultValidate: (e) => !!G_(e, n), protocols: n, defaultProtocol: r })); i.length && i.forEach((e) => { this.options.shouldAutoLink(e.value) && t.push({ text: e.value, data: { href: e.href }, index: e.start }); }); } return t; }, type: this.type, getAttributes: (e) => ({ href: e.data?.href }) })]; }, addProseMirrorPlugins() { let e = [], { protocols: t, defaultProtocol: n } = this.options; return this.options.autolink && e.push(H_({ type: this.type, defaultProtocol: this.options.defaultProtocol, validate: (e) => this.options.isAllowedUri(e, { defaultValidate: (e) => !!G_(e, t), protocols: t, defaultProtocol: n }), shouldAutoLink: this.options.shouldAutoLink })), e.push(U_({ type: this.type, editor: this.editor, openOnClick: this.options.openOnClick === "whenNotEditable" ? !0 : this.options.openOnClick, enableClickSelection: this.options.enableClickSelection })), this.options.linkOnPaste && e.push(W_({ editor: this.editor, defaultProtocol: this.options.defaultProtocol, type: this.type, shouldAutoLink: this.options.shouldAutoLink })), e; } }), q_ = Object.defineProperty, J_ = (e, t) => { for (var n in t) q_(e, n, { get: t[n], enumerable: !0 }); }, Y_ = "listItem", X_ = "textStyle", Z_ = /^\s*([-+*])\s$/, Q_ = Yd.create({ name: "bulletList", addOptions() { return { itemTypeName: "listItem", HTMLAttributes: {}, keepMarks: !1, keepAttributes: !1 }; }, group: "block list", content() { return `${this.options.itemTypeName}+`; }, parseHTML() { return [{ tag: "ul" }]; }, renderHTML({ HTMLAttributes: e }) { return [ "ul", P(this.options.HTMLAttributes, e), 0 ]; }, markdownTokenName: "list", parseMarkdown: (e, t) => e.type !== "list" || e.ordered ? [] : { type: "bulletList", content: e.items ? t.parseChildren(e.items) : [] }, renderMarkdown: (e, t) => e.content ? t.renderChildren(e.content, "\n") : "", markdownOptions: { indentsContent: !0 }, addCommands() { return { toggleBulletList: () => ({ commands: e, chain: t }) => this.options.keepAttributes ? t().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(Y_, this.editor.getAttributes(X_)).run() : e.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks) }; }, addKeyboardShortcuts() { return { "Mod-Shift-8": () => this.editor.commands.toggleBulletList() }; }, addInputRules() { let e = jd({ find: Z_, type: this.type }); return (this.options.keepMarks || this.options.keepAttributes) && (e = jd({ find: Z_, type: this.type, keepMarks: this.options.keepMarks, keepAttributes: this.options.keepAttributes, getAttributes: () => this.editor.getAttributes(X_), editor: this.editor })), [e]; } }), $_ = (e, t, n) => { let { selection: r } = e; if (!r.empty) return null; let { $from: i } = r; if (!i.parent.isTextblock || i.parentOffset !== i.parent.content.size) return null; let a = -1; for (let e = i.depth; e > 0; --e) if (i.node(e).type.name === t) { a = e; break; } if (a < 0) return null; let o = i.node(a), s = i.index(a); if (s + 1 >= o.childCount) return null; let c = o.child(s + 1); if (!n.includes(c.type.name)) return null; let l = e.schema.nodes[t], u = !1; if (c.forEach((e) => { e.type === l && e.childCount > 1 && (u = !0); }), !u) return null; let d = e.doc.resolve(i.after()).nodeAfter; if (!d || !n.includes(d.type.name)) return null; let f = []; return d.forEach((e) => { f.push(e); }), f.length === 0 ? null : { listItemDepth: a, nestedList: d, nestedListPos: i.after(), insertPos: i.after(a), items: f }; }, ev = (e, t, n, r) => { let i = $_(e, n, r); if (!i) return !1; let { selection: o } = e, { nestedList: s, nestedListPos: c, insertPos: l, items: u } = i, d = e.tr; d.delete(c, c + s.nodeSize); let f = d.mapping.map(l); return d.insert(f, a.from(u)), d.setSelection(o.map(d.doc, d.mapping)), t && t(d), !0; }, tv = (e, t, n) => ev(e.state, e.view.dispatch, t, n), nv = (e, t) => F.create({ name: `${e}BranchingDeleteKeymap`, priority: 101, addKeyboardShortcuts() { let n = () => tv(this.editor, e, t); return { Delete: n, "Mod-Delete": n }; } }); function rv(e) { let t = e.tokens?.[0]; return !!(e.text && e.tokens?.length === 1 && t?.type === "list" && t.ordered && t.raw === e.text); } function iv(e, t) { return t.tokenizeInline ? t.parseInline(t.tokenizeInline(e)) : t.parseInline([{ type: "text", raw: e, text: e }]); } var av = Yd.create({ name: "listItem", addOptions() { return { HTMLAttributes: {}, bulletListTypeName: "bulletList", orderedListTypeName: "orderedList" }; }, content: "paragraph block*", defining: !0, parseHTML() { return [{ tag: "li" }]; }, renderHTML({ HTMLAttributes: e }) { return [ "li", P(this.options.HTMLAttributes, e), 0 ]; }, markdownTokenName: "list_item", parseMarkdown: (e, t) => { if (e.type !== "list_item") return []; let n = t.parseBlockChildren ?? t.parseChildren, r = []; if (e.tokens && e.tokens.length > 0) { if (rv(e)) return { type: "listItem", content: [{ type: "paragraph", content: iv(e.text || "", t) }] }; if (e.tokens.some((e) => e.type === "paragraph")) r = n(e.tokens); else { let i = e.tokens[0]; if (i && i.type === "text" && i.tokens && i.tokens.length > 0) { if (r = [{ type: "paragraph", content: t.parseInline(i.tokens) }], e.tokens.length > 1) { let t = n(e.tokens.slice(1)); r.push(...t); } } else r = n(e.tokens); } } return r.length === 0 && (r = [{ type: "paragraph", content: [] }]), { type: "listItem", content: r }; }, renderMarkdown: (e, t, n) => Kd(e, t, (e) => e.parentType === "bulletList" ? "- " : e.parentType === "orderedList" ? `${(e.meta?.parentAttrs?.start || 1) + e.index}. ` : "- ", n), addExtensions() { return [nv(this.name, [this.options.bulletListTypeName, this.options.orderedListTypeName])]; }, addKeyboardShortcuts() { return { Enter: () => this.editor.commands.splitListItem(this.name), Tab: () => this.editor.commands.sinkListItem(this.name), "Shift-Tab": () => this.editor.commands.liftListItem(this.name) }; } }); J_({}, { findListItemPos: () => ov, getNextListDepth: () => sv, handleBackspace: () => lv, handleDelete: () => fv, hasListBefore: () => cv, hasListItemAfter: () => pv, hasListItemBefore: () => mv, listItemHasSubList: () => hv, nextListIsDeeper: () => uv, nextListIsHigher: () => dv }); var ov = (e, t) => { let { $from: n } = t.selection, r = j(e, t.schema), i = null, a = n.depth, o = n.pos, s = null; for (; a > 0 && s === null;) i = n.node(a), i.type === r ? s = a : (--a, --o); return s === null ? null : { $pos: t.doc.resolve(o), depth: s }; }, sv = (e, t) => { let n = ov(e, t); if (!n) return !1; let [, r] = lu(t, e, n.$pos.pos + 4); return r; }, cv = (e, t, n) => { let { $anchor: r } = e.selection, i = Math.max(0, r.pos - 2), a = e.doc.resolve(i).node(); return !(!a || !n.includes(a.type.name)); }, lv = (e, t, n) => { if (e.commands.undoInputRule()) return !0; if (e.state.selection.from !== e.state.selection.to) return !1; if (!fl(e.state, t) && cv(e.state, t, n)) { let { $anchor: n } = e.state.selection, r = e.state.doc.resolve(n.before() - 1), i = []; r.node().descendants((e, n) => { e.type.name === t && i.push({ node: e, pos: n }); }); let a = i.at(-1); if (!a) return !1; let o = e.state.doc.resolve(r.start() + a.pos + 1); return e.chain().cut({ from: n.start() - 1, to: n.end() + 1 }, o.end()).joinForward().run(); } return !fl(e.state, t) || !gu(e.state) ? !1 : e.chain().liftListItem(t).run(); }, uv = (e, t) => { let n = sv(e, t), r = ov(e, t); return !r || !n ? !1 : n > r.depth; }, dv = (e, t) => { let n = sv(e, t), r = ov(e, t); return !r || !n ? !1 : n < r.depth; }, fv = (e, t) => { if (!fl(e.state, t) || !hu(e.state, t)) return !1; let { selection: n } = e.state, { $from: r, $to: i } = n; return !n.empty && r.sameParent(i) ? !1 : uv(t, e.state) ? e.chain().focus(e.state.selection.from + 4).lift(t).joinBackward().run() : dv(t, e.state) ? e.chain().joinForward().joinBackward().run() : e.commands.joinItemForward(); }, pv = (e, t) => { let { $anchor: n } = t.selection, r = t.doc.resolve(n.pos - n.parentOffset - 2); return !(r.index() === r.parent.childCount - 1 || r.nodeAfter?.type.name !== e); }, mv = (e, t) => { let { $anchor: n } = t.selection, r = t.doc.resolve(n.pos - 2); return !(r.index() === 0 || r.nodeBefore?.type.name !== e); }, hv = (e, t, n) => { if (!n) return !1; let r = j(e, t.schema), i = !1; return n.descendants((e) => { e.type === r && (i = !0); }), i; }, gv = F.create({ name: "listKeymap", addOptions() { return { listTypes: [{ itemName: "listItem", wrapperNames: ["bulletList", "orderedList"] }, { itemName: "taskItem", wrapperNames: ["taskList"] }] }; }, addKeyboardShortcuts() { return { Delete: ({ editor: e }) => { let t = !1; return this.options.listTypes.forEach(({ itemName: n }) => { e.state.schema.nodes[n] !== void 0 && fv(e, n) && (t = !0); }), t; }, "Mod-Delete": ({ editor: e }) => { let t = !1; return this.options.listTypes.forEach(({ itemName: n }) => { e.state.schema.nodes[n] !== void 0 && fv(e, n) && (t = !0); }), t; }, Backspace: ({ editor: e }) => { let t = !1; return this.options.listTypes.forEach(({ itemName: n, wrapperNames: r }) => { e.state.schema.nodes[n] !== void 0 && lv(e, n, r) && (t = !0); }), t; }, "Mod-Backspace": ({ editor: e }) => { let t = !1; return this.options.listTypes.forEach(({ itemName: n, wrapperNames: r }) => { e.state.schema.nodes[n] !== void 0 && lv(e, n, r) && (t = !0); }), t; } }; } }), _v = /^(\s*)(\d+)\.\s+(.*)$/, vv = /^\s/; function yv(e) { let t = e.trimStart(); return /^[-+*]\s+/.test(t) || /^\d+\.\s+/.test(t) || /^>\s?/.test(t) || /^```/.test(t) || /^~~~/.test(t); } function bv(e) { let t = [], n = [], r = !1; return e.forEach((e) => { if (r) { n.push(e); return; } if (e.trim() === "") { r = !0, n.push(e); return; } if (t.length > 0 && yv(e)) { r = !0, n.push(e); return; } t.push(e); }), { paragraphLines: t, blockLines: n }; } function xv(e) { let t = [], n = 0, r = 0; for (; n < e.length;) { let i = e[n], a = i.match(_v); if (!a) break; let [, o, s, c] = a, l = o.length, u = [c], d = n + 1, f = [i], p = !1; for (; d < e.length;) { let t = e[d]; if (t.match(_v)) break; if (t.trim() === "") f.push(t), u.push(""), p = !0, d += 1; else if (t.match(vv)) f.push(t), u.push(t.slice(l + 2)), d += 1; else { if (p) break; f.push(t), u.push(t), d += 1; } } t.push({ indent: l, number: parseInt(s, 10), content: u.join("\n").trim(), contentLines: u, raw: f.join("\n") }), r = d, n = d; } return [t, r]; } function Sv(e, t, n) { let r = [], i = 0; for (; i < e.length;) { let a = e[i]; if (a.indent === t) { let { paragraphLines: o, blockLines: s } = bv(a.contentLines), c = o.join("\n").trim(), l = []; c && l.push({ type: "paragraph", raw: c, tokens: n.inlineTokens(c) }); let u = s.join("\n").trim(); if (u) { let e = n.blockTokens(u); l.push(...e); } let d = i + 1, f = []; for (; d < e.length && e[d].indent > t;) f.push(e[d]), d += 1; if (f.length > 0) { let e = Sv(f, Math.min(...f.map((e) => e.indent)), n); l.push({ type: "list", ordered: !0, start: f[0].number, items: e, raw: f.map((e) => e.raw).join("\n") }); } r.push({ type: "list_item", raw: a.raw, tokens: l }), i = d; } else i += 1; } return r; } function Cv(e, t) { return e.map((e) => { if (e.type !== "list_item") return t.parseChildren([e])[0]; let n = []; return e.tokens && e.tokens.length > 0 && e.tokens.forEach((e) => { if (e.type === "paragraph" || e.type === "list" || e.type === "blockquote" || e.type === "code") n.push(...t.parseChildren([e])); else if (e.type === "text" && e.tokens) { let r = t.parseChildren([e]); n.push({ type: "paragraph", content: r }); } else { let r = t.parseChildren([e]); r.length > 0 && n.push(...r); } }), { type: "listItem", content: n }; }); } var wv = "listItem", Tv = "textStyle", Ev = /^(\d+)\.\s$/, Dv = Yd.create({ name: "orderedList", addOptions() { return { itemTypeName: "listItem", HTMLAttributes: {}, keepMarks: !1, keepAttributes: !1 }; }, group: "block list", content() { return `${this.options.itemTypeName}+`; }, addAttributes() { return { start: { default: 1, parseHTML: (e) => e.hasAttribute("start") ? parseInt(e.getAttribute("start") || "", 10) : 1 }, type: { default: null, parseHTML: (e) => e.getAttribute("type") } }; }, parseHTML() { return [{ tag: "ol" }]; }, renderHTML({ HTMLAttributes: e }) { let { start: t, ...n } = e; return t === 1 ? [ "ol", P(this.options.HTMLAttributes, n), 0 ] : [ "ol", P(this.options.HTMLAttributes, e), 0 ]; }, markdownTokenName: "list", parseMarkdown: (e, t) => { if (e.type !== "list" || !e.ordered) return []; let n = e.start || 1, r = e.items ? Cv(e.items, t) : []; return n === 1 ? { type: "orderedList", content: r } : { type: "orderedList", attrs: { start: n }, content: r }; }, renderMarkdown: (e, t) => e.content ? t.renderChildren(e.content, "\n") : "", markdownTokenizer: { name: "orderedList", level: "block", start: (e) => { let t = e.match(/^(\s*)(\d+)\.\s+/)?.index; return t === void 0 ? -1 : t; }, tokenize: (e, t, n) => { let r = e.split("\n"), [i, a] = xv(r); if (i.length === 0) return; let o = Sv(i, 0, n); if (o.length !== 0) return { type: "list", ordered: !0, start: i[0]?.number || 1, items: o, raw: r.slice(0, a).join("\n") }; } }, markdownOptions: { indentsContent: !0 }, addCommands() { return { toggleOrderedList: () => ({ commands: e, chain: t }) => this.options.keepAttributes ? t().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(wv, this.editor.getAttributes(Tv)).run() : e.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks) }; }, addKeyboardShortcuts() { return { "Mod-Shift-7": () => this.editor.commands.toggleOrderedList() }; }, addInputRules() { let e = jd({ find: Ev, type: this.type, getAttributes: (e) => ({ start: +e[1] }), joinPredicate: (e, t) => t.childCount + t.attrs.start === +e[1] }); return (this.options.keepMarks || this.options.keepAttributes) && (e = jd({ find: Ev, type: this.type, keepMarks: this.options.keepMarks, keepAttributes: this.options.keepAttributes, getAttributes: (e) => ({ start: +e[1], ...this.editor.getAttributes(Tv) }), joinPredicate: (e, t) => t.childCount + t.attrs.start === +e[1], editor: this.editor })), [e]; } }), Ov = /^\s*(\[([( |x])?\])\s$/, kv = Yd.create({ name: "taskItem", addOptions() { return { nested: !1, HTMLAttributes: {}, taskListTypeName: "taskList", a11y: void 0 }; }, content() { return this.options.nested ? "paragraph block*" : "paragraph+"; }, defining: !0, addAttributes() { return { checked: { default: !1, keepOnSplit: !1, parseHTML: (e) => { let t = e.getAttribute("data-checked"); return t === "" || t === "true"; }, renderHTML: (e) => ({ "data-checked": e.checked }) } }; }, parseHTML() { return [{ tag: `li[data-type="${this.name}"]`, priority: 51 }]; }, renderHTML({ node: e, HTMLAttributes: t }) { return [ "li", P(this.options.HTMLAttributes, t, { "data-type": this.name }), [ "label", ["input", { type: "checkbox", checked: e.attrs.checked ? "checked" : null }], ["span"] ], ["div", 0] ]; }, parseMarkdown: (e, t) => { let n = []; if (e.tokens && e.tokens.length > 0 ? n.push(t.createNode("paragraph", {}, t.parseInline(e.tokens))) : e.text ? n.push(t.createNode("paragraph", {}, [t.createNode("text", { text: e.text })])) : n.push(t.createNode("paragraph", {}, [])), e.nestedTokens && e.nestedTokens.length > 0) { let r = t.parseChildren(e.nestedTokens); n.push(...r); } return t.createNode("taskItem", { checked: e.checked || !1 }, n); }, renderMarkdown: (e, t) => Kd(e, t, `- [${e.attrs?.checked ? "x" : " "}] `), addExtensions() { return this.options.nested ? [nv(this.name, [this.options.taskListTypeName])] : []; }, addKeyboardShortcuts() { let e = { Enter: () => this.editor.commands.splitListItem(this.name), "Shift-Tab": () => this.editor.commands.liftListItem(this.name) }; return this.options.nested ? { ...e, Tab: () => this.editor.commands.sinkListItem(this.name) } : e; }, addNodeView() { return ({ node: e, HTMLAttributes: t, getPos: n, editor: r }) => { let i = document.createElement("li"), a = document.createElement("label"), o = document.createElement("span"), s = document.createElement("input"), c = document.createElement("div"), l = (e) => { var t; s.ariaLabel = ((t = this.options.a11y)?.checkboxLabel)?.call(t, e, s.checked) || `Task item checkbox for ${e.textContent || "empty task item"}`; }; l(e), a.contentEditable = "false", s.type = "checkbox", s.addEventListener("mousedown", (e) => e.preventDefault()), s.addEventListener("change", (t) => { if (!r.isEditable && !this.options.onReadOnlyChecked) { s.checked = !s.checked; return; } let { checked: i } = t.target; r.isEditable && typeof n == "function" && r.chain().focus(void 0, { scrollIntoView: !1 }).command(({ tr: e }) => { let t = n(); if (typeof t != "number") return !1; let r = e.doc.nodeAt(t); return e.setNodeMarkup(t, void 0, { ...r?.attrs, checked: i }), !0; }).run(), !r.isEditable && this.options.onReadOnlyChecked && (this.options.onReadOnlyChecked(e, i) || (s.checked = !s.checked)); }), Object.entries(this.options.HTMLAttributes).forEach(([e, t]) => { i.setAttribute(e, t); }), i.dataset.checked = e.attrs.checked, s.checked = e.attrs.checked, a.append(s, o), i.append(a, c), Object.entries(t).forEach(([e, t]) => { i.setAttribute(e, t); }); let u = new Set(Object.keys(t)); return { dom: i, contentDOM: c, update: (e) => { if (e.type !== this.type) return !1; i.dataset.checked = e.attrs.checked, s.checked = e.attrs.checked, l(e); let t = r.extensionManager.attributes, n = Ul(e, t), a = new Set(Object.keys(n)), o = this.options.HTMLAttributes; return u.forEach((e) => { a.has(e) || (e in o ? i.setAttribute(e, o[e]) : i.removeAttribute(e)); }), Object.entries(n).forEach(([e, t]) => { t == null ? e in o ? i.setAttribute(e, o[e]) : i.removeAttribute(e) : i.setAttribute(e, t); }), u = a, !0; } }; }; }, addInputRules() { return [jd({ find: Ov, type: this.type, getAttributes: (e) => ({ checked: e[e.length - 1] === "x" }) })]; } }), Av = Yd.create({ name: "taskList", addOptions() { return { itemTypeName: "taskItem", HTMLAttributes: {} }; }, group: "block list", content() { return `${this.options.itemTypeName}+`; }, parseHTML() { return [{ tag: `ul[data-type="${this.name}"]`, priority: 51 }]; }, renderHTML({ HTMLAttributes: e }) { return [ "ul", P(this.options.HTMLAttributes, e, { "data-type": this.name }), 0 ]; }, parseMarkdown: (e, t) => t.createNode("taskList", {}, t.parseChildren(e.items || [])), renderMarkdown: (e, t) => e.content ? t.renderChildren(e.content, "\n") : "", markdownTokenizer: { name: "taskList", level: "block", start(e) { let t = e.match(/^\s*[-+*]\s+\[([ xX])\]\s+/)?.index; return t === void 0 ? -1 : t; }, tokenize(e, t, n) { let r = (e) => { let t = Gd(e, { itemPattern: /^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/, extractItemData: (e) => ({ indentLevel: e[1].length, mainContent: e[4], checked: e[3].toLowerCase() === "x" }), createToken: (e, t) => ({ type: "taskItem", raw: "", mainContent: e.mainContent, indentLevel: e.indentLevel, checked: e.checked, text: e.mainContent, tokens: n.inlineTokens(e.mainContent), nestedTokens: t }), customNestedParser: r }, n); return t ? [{ type: "taskList", raw: t.raw, items: t.items }] : n.blockTokens(e); }, i = Gd(e, { itemPattern: /^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/, extractItemData: (e) => ({ indentLevel: e[1].length, mainContent: e[4], checked: e[3].toLowerCase() === "x" }), createToken: (e, t) => ({ type: "taskItem", raw: "", mainContent: e.mainContent, indentLevel: e.indentLevel, checked: e.checked, text: e.mainContent, tokens: n.inlineTokens(e.mainContent), nestedTokens: t }), customNestedParser: r }, n); if (i) return { type: "taskList", raw: i.raw, items: i.items }; } }, markdownOptions: { indentsContent: !0 }, addCommands() { return { toggleTaskList: () => ({ commands: e }) => e.toggleList(this.name, this.options.itemTypeName) }; }, addKeyboardShortcuts() { return { "Mod-Shift-9": () => this.editor.commands.toggleTaskList() }; } }); F.create({ name: "listKit", addExtensions() { let e = []; return this.options.bulletList !== !1 && e.push(Q_.configure(this.options.bulletList)), this.options.listItem !== !1 && e.push(av.configure(this.options.listItem)), this.options.listKeymap !== !1 && e.push(gv.configure(this.options.listKeymap)), this.options.orderedList !== !1 && e.push(Dv.configure(this.options.orderedList)), this.options.taskItem !== !1 && e.push(kv.configure(this.options.taskItem)), this.options.taskList !== !1 && e.push(Av.configure(this.options.taskList)), e; } }); //#endregion //#region node_modules/.pnpm/@tiptap+extension-paragraph@3.26.1_@tiptap+core@3.26.1_@tiptap+pm@3.26.1_/node_modules/@tiptap/extension-paragraph/dist/index.js var jv = " ", Mv = "\xA0", Nv = Yd.create({ name: "paragraph", priority: 1e3, addOptions() { return { HTMLAttributes: {} }; }, group: "block", content: "inline*", parseHTML() { return [{ tag: "p" }]; }, renderHTML({ HTMLAttributes: e }) { return [ "p", P(this.options.HTMLAttributes, e), 0 ]; }, parseMarkdown: (e, t) => { let n = e.tokens || []; if (n.length === 1 && n[0].type === "image") return t.parseChildren([n[0]]); let r = t.parseInline(n); return n.length === 1 && n[0].type === "text" && (n[0].raw === jv || n[0].text === jv || n[0].raw === Mv || n[0].text === Mv) && r.length === 1 && r[0].type === "text" && (r[0].text === jv || r[0].text === Mv) ? t.createNode("paragraph", void 0, []) : t.createNode("paragraph", void 0, r); }, renderMarkdown: (e, t, n) => { if (!e) return ""; let r = Array.isArray(e.content) ? e.content : []; if (r.length === 0) { let e = Array.isArray(n?.previousNode?.content) ? n.previousNode.content : []; return n?.previousNode?.type === "paragraph" && e.length === 0 ? jv : ""; } return t.renderChildren(r); }, addCommands() { return { setParagraph: () => ({ commands: e }) => e.setNode(this.name) }; }, addKeyboardShortcuts() { return { "Mod-Alt-0": () => this.editor.commands.setParagraph() }; } }), Pv = /(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/, Fv = /(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g, Iv = id.create({ name: "strike", addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [ { tag: "s" }, { tag: "del" }, { tag: "strike" }, { style: "text-decoration", consuming: !1, getAttrs: (e) => e.includes("line-through") ? {} : !1 } ]; }, renderHTML({ HTMLAttributes: e }) { return [ "s", P(this.options.HTMLAttributes, e), 0 ]; }, markdownTokenName: "del", parseMarkdown: (e, t) => t.applyMark("strike", t.parseInline(e.tokens || [])), renderMarkdown: (e, t) => `~~${t.renderChildren(e)}~~`, addCommands() { return { setStrike: () => ({ commands: e }) => e.setMark(this.name), toggleStrike: () => ({ commands: e }) => e.toggleMark(this.name), unsetStrike: () => ({ commands: e }) => e.unsetMark(this.name) }; }, addKeyboardShortcuts() { return { "Mod-Shift-s": () => this.editor.commands.toggleStrike() }; }, addInputRules() { return [Od({ find: Pv, type: this.type })]; }, addPasteRules() { return [Xd({ find: Fv, type: this.type })]; } }), Lv = Yd.create({ name: "text", group: "inline", parseMarkdown: (e) => ({ type: "text", text: e.text || "" }), renderMarkdown: (e) => e.text || "" }), Rv = id.create({ name: "underline", addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [{ tag: "u" }, { style: "text-decoration", consuming: !1, getAttrs: (e) => e.includes("underline") ? {} : !1 }]; }, renderHTML({ HTMLAttributes: e }) { return [ "u", P(this.options.HTMLAttributes, e), 0 ]; }, parseMarkdown(e, t) { return t.applyMark(this.name || "underline", t.parseInline(e.tokens || [])); }, renderMarkdown(e, t) { return `++${t.renderChildren(e)}++`; }, markdownTokenizer: { name: "underline", level: "inline", start(e) { return e.indexOf("++"); }, tokenize(e, t, n) { let r = /^(\+\+)([\s\S]+?)(\+\+)/.exec(e); if (!r) return; let i = r[2].trim(); return { type: "underline", raw: r[0], text: i, tokens: n.inlineTokens(i) }; } }, addCommands() { return { setUnderline: () => ({ commands: e }) => e.setMark(this.name), toggleUnderline: () => ({ commands: e }) => e.toggleMark(this.name), unsetUnderline: () => ({ commands: e }) => e.unsetMark(this.name) }; }, addKeyboardShortcuts() { return { "Mod-u": () => this.editor.commands.toggleUnderline(), "Mod-U": () => this.editor.commands.toggleUnderline() }; } }); //#endregion //#region node_modules/.pnpm/prosemirror-dropcursor@1.8.2/node_modules/prosemirror-dropcursor/dist/index.js function zv(e = {}) { return new w({ view(t) { return new Bv(t, e); } }); } var Bv = class { constructor(e, t) { this.editorView = e, this.cursorPos = null, this.element = null, this.timeout = -1, this.width = t.width ?? 1, this.color = t.color === !1 ? void 0 : t.color || "black", this.class = t.class, this.handlers = [ "dragover", "dragend", "drop", "dragleave" ].map((t) => { let n = (e) => { this[t](e); }; return e.dom.addEventListener(t, n), { name: t, handler: n }; }); } destroy() { this.handlers.forEach(({ name: e, handler: t }) => this.editorView.dom.removeEventListener(e, t)); } update(e, t) { this.cursorPos != null && t.doc != e.state.doc && (this.cursorPos > e.state.doc.content.size ? this.setCursor(null) : this.updateOverlay()); } setCursor(e) { e != this.cursorPos && (this.cursorPos = e, e == null ? (this.element.parentNode.removeChild(this.element), this.element = null) : this.updateOverlay()); } updateOverlay() { let e = this.editorView.state.doc.resolve(this.cursorPos), t = !e.parent.inlineContent, n, r = this.editorView.dom, i = r.getBoundingClientRect(), a = i.width / r.offsetWidth, o = i.height / r.offsetHeight; if (t) { let t = e.nodeBefore, r = e.nodeAfter; if (t || r) { let e = this.editorView.nodeDOM(this.cursorPos - (t ? t.nodeSize : 0)); if (e) { let i = e.getBoundingClientRect(), a = t ? i.bottom : i.top; t && r && (a = (a + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2); let s = this.width / 2 * o; n = { left: i.left, right: i.right, top: a - s, bottom: a + s }; } } } if (!n) { let e = this.editorView.coordsAtPos(this.cursorPos), t = this.width / 2 * a; n = { left: e.left - t, right: e.left + t, top: e.top, bottom: e.bottom }; } let s = this.editorView.dom.offsetParent; this.element || (this.element = s.appendChild(document.createElement("div")), this.class && (this.element.className = this.class), this.element.style.cssText = "position: absolute; z-index: 50; pointer-events: none;", this.color && (this.element.style.backgroundColor = this.color)), this.element.classList.toggle("prosemirror-dropcursor-block", t), this.element.classList.toggle("prosemirror-dropcursor-inline", !t); let c, l; if (!s || s == document.body && getComputedStyle(s).position == "static") c = -pageXOffset, l = -pageYOffset; else { let e = s.getBoundingClientRect(), t = e.width / s.offsetWidth, n = e.height / s.offsetHeight; c = e.left - s.scrollLeft * t, l = e.top - s.scrollTop * n; } this.element.style.left = (n.left - c) / a + "px", this.element.style.top = (n.top - l) / o + "px", this.element.style.width = (n.right - n.left) / a + "px", this.element.style.height = (n.bottom - n.top) / o + "px"; } scheduleRemoval(e) { clearTimeout(this.timeout), this.timeout = setTimeout(() => this.setCursor(null), e); } dragover(e) { if (!this.editorView.editable) return; let t = this.editorView.posAtCoords({ left: e.clientX, top: e.clientY }), n = t && t.inside >= 0 && this.editorView.state.doc.nodeAt(t.inside), r = n && n.type.spec.disableDropCursor, i = typeof r == "function" ? r(this.editorView, t, e) : r; if (t && !i) { let e = t.pos; if (this.editorView.dragging && this.editorView.dragging.slice) { let t = Qt(this.editorView.state.doc, e, this.editorView.dragging.slice); t != null && (e = t); } this.setCursor(e), this.scheduleRemoval(5e3); } } dragend() { this.scheduleRemoval(20); } drop() { this.scheduleRemoval(20); } dragleave(e) { this.editorView.dom.contains(e.relatedTarget) || this.setCursor(null); } }, Vv = class e extends x { constructor(e) { super(e, e); } map(t, n) { let r = t.resolve(n.map(this.head)); return e.valid(r) ? new e(r) : x.near(r); } content() { return d.empty; } eq(t) { return t instanceof e && t.head == this.head; } toJSON() { return { type: "gapcursor", pos: this.head }; } static fromJSON(t, n) { if (typeof n.pos != "number") throw RangeError("Invalid input for GapCursor.fromJSON"); return new e(t.resolve(n.pos)); } getBookmark() { return new Hv(this.anchor); } static valid(e) { let t = e.parent; if (t.inlineContent || !Wv(e) || !Gv(e)) return !1; let n = t.type.spec.allowGapCursor; if (n != null) return n; let r = t.contentMatchAt(e.index()).defaultType; return r && r.isTextblock; } static findGapCursorFrom(t, n, r = !1) { search: for (;;) { if (!r && e.valid(t)) return t; let i = t.pos, a = null; for (let r = t.depth;; r--) { let o = t.node(r); if (n > 0 ? t.indexAfter(r) < o.childCount : t.index(r) > 0) { a = o.child(n > 0 ? t.indexAfter(r) : t.index(r) - 1); break; } else if (r == 0) return null; i += n; let s = t.doc.resolve(i); if (e.valid(s)) return s; } for (;;) { let o = n > 0 ? a.firstChild : a.lastChild; if (!o) { if (a.isAtom && !a.isText && !C.isSelectable(a)) { t = t.doc.resolve(i + a.nodeSize * n), r = !1; continue search; } break; } a = o, i += n; let s = t.doc.resolve(i); if (e.valid(s)) return s; } return null; } } }; Vv.prototype.visible = !1, Vv.findFrom = Vv.findGapCursorFrom, x.jsonID("gapcursor", Vv); var Hv = class e { constructor(e) { this.pos = e; } map(t) { return new e(t.map(this.pos)); } resolve(e) { let t = e.resolve(this.pos); return Vv.valid(t) ? new Vv(t) : x.near(t); } }; function Uv(e) { return e.isAtom || e.spec.isolating || e.spec.createGapCursor; } function Wv(e) { for (let t = e.depth; t >= 0; t--) { let n = e.index(t), r = e.node(t); if (n == 0) { if (r.type.spec.isolating) return !0; continue; } for (let e = r.child(n - 1);; e = e.lastChild) { if (e.childCount == 0 && !e.inlineContent || Uv(e.type)) return !0; if (e.inlineContent) return !1; } } return !0; } function Gv(e) { for (let t = e.depth; t >= 0; t--) { let n = e.indexAfter(t), r = e.node(t); if (n == r.childCount) { if (r.type.spec.isolating) return !0; continue; } for (let e = r.child(n);; e = e.firstChild) { if (e.childCount == 0 && !e.inlineContent || Uv(e.type)) return !0; if (e.inlineContent) return !1; } } return !0; } function Kv() { return new w({ props: { decorations: Zv, createSelectionBetween(e, t, n) { return t.pos == n.pos && Vv.valid(n) ? new Vv(n) : null; }, handleClick: Yv, handleKeyDown: qv, handleDOMEvents: { beforeinput: Xv } } }); } var qv = dc({ ArrowLeft: Jv("horiz", -1), ArrowRight: Jv("horiz", 1), ArrowUp: Jv("vert", -1), ArrowDown: Jv("vert", 1) }); function Jv(e, t) { let n = e == "vert" ? t > 0 ? "down" : "up" : t > 0 ? "right" : "left"; return function(e, r, i) { let a = e.selection, o = t > 0 ? a.$to : a.$from, s = a.empty; if (a instanceof S) { if (!i.endOfTextblock(n) || o.depth == 0) return !1; s = !1, o = e.doc.resolve(t > 0 ? o.after() : o.before()); } let c = Vv.findGapCursorFrom(o, t, s); return c ? (r && r(e.tr.setSelection(new Vv(c))), !0) : !1; }; } function Yv(e, t, n) { if (!e || !e.editable) return !1; let r = e.state.doc.resolve(t); if (!Vv.valid(r)) return !1; let i = e.posAtCoords({ left: n.clientX, top: n.clientY }); return i && i.inside > -1 && C.isSelectable(e.state.doc.nodeAt(i.inside)) ? !1 : (e.dispatch(e.state.tr.setSelection(new Vv(r))), !0); } function Xv(e, t) { if (t.inputType != "insertCompositionText" || !(e.state.selection instanceof Vv)) return !1; let { $from: n } = e.state.selection, r = n.parent.contentMatchAt(n.index()).findWrapping(e.state.schema.nodes.text); if (!r) return !1; let i = a.empty; for (let e = r.length - 1; e >= 0; e--) i = a.from(r[e].createAndFill(null, i)); let o = e.state.tr.replace(n.pos, n.pos, new d(i, 0, 0)); return o.setSelection(S.near(o.doc.resolve(n.pos + 1))), e.dispatch(o), !1; } function Zv(e) { if (!(e.selection instanceof Vv)) return null; let t = document.createElement("div"); return t.className = "ProseMirror-gapcursor", ps.create(e.doc, [us.widget(e.selection.head, t, { key: "gapcursor" })]); } //#endregion //#region node_modules/.pnpm/rope-sequence@1.3.4/node_modules/rope-sequence/dist/index.js var Qv = 200, q = function() {}; q.prototype.append = function(e) { return e.length ? (e = q.from(e), !this.length && e || e.length < Qv && this.leafAppend(e) || this.length < Qv && e.leafPrepend(this) || this.appendInner(e)) : this; }, q.prototype.prepend = function(e) { return e.length ? q.from(e).append(this) : this; }, q.prototype.appendInner = function(e) { return new ey(this, e); }, q.prototype.slice = function(e, t) { return e === void 0 && (e = 0), t === void 0 && (t = this.length), e >= t ? q.empty : this.sliceInner(Math.max(0, e), Math.min(this.length, t)); }, q.prototype.get = function(e) { if (!(e < 0 || e >= this.length)) return this.getInner(e); }, q.prototype.forEach = function(e, t, n) { t === void 0 && (t = 0), n === void 0 && (n = this.length), t <= n ? this.forEachInner(e, t, n, 0) : this.forEachInvertedInner(e, t, n, 0); }, q.prototype.map = function(e, t, n) { t === void 0 && (t = 0), n === void 0 && (n = this.length); var r = []; return this.forEach(function(t, n) { return r.push(e(t, n)); }, t, n), r; }, q.from = function(e) { return e instanceof q ? e : e && e.length ? new $v(e) : q.empty; }; var $v = /* @__PURE__ */ function(e) { function t(t) { e.call(this), this.values = t; } e && (t.__proto__ = e), t.prototype = Object.create(e && e.prototype), t.prototype.constructor = t; var n = { length: { configurable: !0 }, depth: { configurable: !0 } }; return t.prototype.flatten = function() { return this.values; }, t.prototype.sliceInner = function(e, n) { return e == 0 && n == this.length ? this : new t(this.values.slice(e, n)); }, t.prototype.getInner = function(e) { return this.values[e]; }, t.prototype.forEachInner = function(e, t, n, r) { for (var i = t; i < n; i++) if (e(this.values[i], r + i) === !1) return !1; }, t.prototype.forEachInvertedInner = function(e, t, n, r) { for (var i = t - 1; i >= n; i--) if (e(this.values[i], r + i) === !1) return !1; }, t.prototype.leafAppend = function(e) { if (this.length + e.length <= Qv) return new t(this.values.concat(e.flatten())); }, t.prototype.leafPrepend = function(e) { if (this.length + e.length <= Qv) return new t(e.flatten().concat(this.values)); }, n.length.get = function() { return this.values.length; }, n.depth.get = function() { return 0; }, Object.defineProperties(t.prototype, n), t; }(q); q.empty = new $v([]); var ey = /* @__PURE__ */ function(e) { function t(t, n) { e.call(this), this.left = t, this.right = n, this.length = t.length + n.length, this.depth = Math.max(t.depth, n.depth) + 1; } return e && (t.__proto__ = e), t.prototype = Object.create(e && e.prototype), t.prototype.constructor = t, t.prototype.flatten = function() { return this.left.flatten().concat(this.right.flatten()); }, t.prototype.getInner = function(e) { return e < this.left.length ? this.left.get(e) : this.right.get(e - this.left.length); }, t.prototype.forEachInner = function(e, t, n, r) { var i = this.left.length; if (t < i && this.left.forEachInner(e, t, Math.min(n, i), r) === !1 || n > i && this.right.forEachInner(e, Math.max(t - i, 0), Math.min(this.length, n) - i, r + i) === !1) return !1; }, t.prototype.forEachInvertedInner = function(e, t, n, r) { var i = this.left.length; if (t > i && this.right.forEachInvertedInner(e, t - i, Math.max(n, i) - i, r + i) === !1 || n < i && this.left.forEachInvertedInner(e, Math.min(t, i), n, r) === !1) return !1; }, t.prototype.sliceInner = function(e, t) { if (e == 0 && t == this.length) return this; var n = this.left.length; return t <= n ? this.left.slice(e, t) : e >= n ? this.right.slice(e - n, t - n) : this.left.slice(e, n).append(this.right.slice(0, t - n)); }, t.prototype.leafAppend = function(e) { var n = this.right.leafAppend(e); if (n) return new t(this.left, n); }, t.prototype.leafPrepend = function(e) { var n = this.left.leafPrepend(e); if (n) return new t(n, this.right); }, t.prototype.appendInner = function(e) { return this.left.depth >= Math.max(this.right.depth, e.depth) + 1 ? new t(this.left, new t(this.right, e)) : new t(this, e); }, t; }(q), ty = 500, ny = class e { constructor(e, t) { this.items = e, this.eventCount = t; } popEvent(t, n) { if (this.eventCount == 0) return null; let r = this.items.length; for (;; r--) if (this.items.get(r - 1).selection) { --r; break; } let i, a; n && (i = this.remapping(r, this.items.length), a = i.maps.length); let o = t.tr, s, c, l = [], u = []; return this.items.forEach((t, n) => { if (!t.step) { i || (i = this.remapping(r, n + 1), a = i.maps.length), a--, u.push(t); return; } if (i) { u.push(new iy(t.map)); let e = t.step.map(i.slice(a)), n; e && o.maybeStep(e).doc && (n = o.mapping.maps[o.mapping.maps.length - 1], l.push(new iy(n, void 0, void 0, l.length + u.length))), a--, n && i.appendMap(n, a); } else o.maybeStep(t.step); if (t.selection) return s = i ? t.selection.map(i.slice(a)) : t.selection, c = new e(this.items.slice(0, r).append(u.reverse().concat(l)), this.eventCount - 1), !1; }, this.items.length, 0), { remaining: c, transform: o, selection: s }; } addTransform(t, n, r, i) { let a = [], o = this.eventCount, s = this.items, c = !i && s.length ? s.get(s.length - 1) : null; for (let e = 0; e < t.steps.length; e++) { let r = t.steps[e].invert(t.docs[e]), l = new iy(t.mapping.maps[e], r, n), u; (u = c && c.merge(l)) && (l = u, e ? a.pop() : s = s.slice(0, s.length - 1)), a.push(l), n &&= (o++, void 0), i || (c = l); } let l = o - r.depth; return l > oy && (s = ry(s, l), o -= l), new e(s.append(a), o); } remapping(e, t) { let n = new _t(); return this.items.forEach((t, r) => { let i = t.mirrorOffset != null && r - t.mirrorOffset >= e ? n.maps.length - t.mirrorOffset : void 0; n.appendMap(t.map, i); }, e, t), n; } addMaps(t) { return this.eventCount == 0 ? this : new e(this.items.append(t.map((e) => new iy(e))), this.eventCount); } rebased(t, n) { if (!this.eventCount) return this; let r = [], i = Math.max(0, this.items.length - n), a = t.mapping, o = t.steps.length, s = this.eventCount; this.items.forEach((e) => { e.selection && s--; }, i); let c = n; this.items.forEach((e) => { let n = a.getMirror(--c); if (n == null) return; o = Math.min(o, n); let i = a.maps[n]; if (e.step) { let o = t.steps[n].invert(t.docs[n]), l = e.selection && e.selection.map(a.slice(c + 1, n)); l && s++, r.push(new iy(i, o, l)); } else r.push(new iy(i)); }, i); let l = []; for (let e = n; e < o; e++) l.push(new iy(a.maps[e])); let u = new e(this.items.slice(0, i).append(l).append(r), s); return u.emptyItemCount() > ty && (u = u.compress(this.items.length - r.length)), u; } emptyItemCount() { let e = 0; return this.items.forEach((t) => { t.step || e++; }), e; } compress(t = this.items.length) { let n = this.remapping(0, t), r = n.maps.length, i = [], a = 0; return this.items.forEach((e, o) => { if (o >= t) i.push(e), e.selection && a++; else if (e.step) { let t = e.step.map(n.slice(r)), o = t && t.getMap(); if (r--, o && n.appendMap(o, r), t) { let s = e.selection && e.selection.map(n.slice(r)); s && a++; let c = new iy(o.invert(), t, s), l, u = i.length - 1; (l = i.length && i[u].merge(c)) ? i[u] = l : i.push(c); } } else e.map && r--; }, this.items.length, 0), new e(q.from(i.reverse()), a); } }; ny.empty = new ny(q.empty, 0); function ry(e, t) { let n; return e.forEach((e, r) => { if (e.selection && t-- == 0) return n = r, !1; }), e.slice(n); } var iy = class e { constructor(e, t, n, r) { this.map = e, this.step = t, this.selection = n, this.mirrorOffset = r; } merge(t) { if (this.step && t.step && !t.selection) { let n = t.step.merge(this.step); if (n) return new e(n.getMap().invert(), n, this.selection); } } }, ay = class { constructor(e, t, n, r, i) { this.done = e, this.undone = t, this.prevRanges = n, this.prevTime = r, this.prevComposition = i; } }, oy = 20; function sy(e, t, n, r) { let i = n.getMeta(hy), a; if (i) return i.historyState; n.getMeta(gy) && (e = new ay(e.done, e.undone, null, 0, -1)); let o = n.getMeta("appendedTransaction"); if (n.steps.length == 0) return e; if (o && o.getMeta(hy)) return o.getMeta(hy).redo ? new ay(e.done.addTransform(n, void 0, r, my(t)), e.undone, ly(n.mapping.maps), e.prevTime, e.prevComposition) : new ay(e.done, e.undone.addTransform(n, void 0, r, my(t)), null, e.prevTime, e.prevComposition); if (n.getMeta("addToHistory") !== !1 && !(o && o.getMeta("addToHistory") === !1)) { let i = n.getMeta("composition"), a = e.prevTime == 0 || !o && e.prevComposition != i && (e.prevTime < (n.time || 0) - r.newGroupDelay || !cy(n, e.prevRanges)), s = o ? uy(e.prevRanges, n.mapping) : ly(n.mapping.maps); return new ay(e.done.addTransform(n, a ? t.selection.getBookmark() : void 0, r, my(t)), ny.empty, s, n.time, i ?? e.prevComposition); } else if (a = n.getMeta("rebased")) return new ay(e.done.rebased(n, a), e.undone.rebased(n, a), uy(e.prevRanges, n.mapping), e.prevTime, e.prevComposition); else return new ay(e.done.addMaps(n.mapping.maps), e.undone.addMaps(n.mapping.maps), uy(e.prevRanges, n.mapping), e.prevTime, e.prevComposition); } function cy(e, t) { if (!t) return !1; if (!e.docChanged) return !0; let n = !1; return e.mapping.maps[0].forEach((e, r) => { for (let i = 0; i < t.length; i += 2) e <= t[i + 1] && r >= t[i] && (n = !0); }), n; } function ly(e) { let t = []; for (let n = e.length - 1; n >= 0 && t.length == 0; n--) e[n].forEach((e, n, r, i) => t.push(r, i)); return t; } function uy(e, t) { if (!e) return null; let n = []; for (let r = 0; r < e.length; r += 2) { let i = t.map(e[r], 1), a = t.map(e[r + 1], -1); i <= a && n.push(i, a); } return n; } function dy(e, t, n) { let r = my(t), i = hy.get(t).spec.config, a = (n ? e.undone : e.done).popEvent(t, r); if (!a) return null; let o = a.selection.resolve(a.transform.doc), s = (n ? e.done : e.undone).addTransform(a.transform, t.selection.getBookmark(), i, r), c = new ay(n ? s : a.remaining, n ? a.remaining : s, null, 0, -1); return a.transform.setSelection(o).setMeta(hy, { redo: n, historyState: c }); } var fy = !1, py = null; function my(e) { let t = e.plugins; if (py != t) { fy = !1, py = t; for (let e = 0; e < t.length; e++) if (t[e].spec.historyPreserveItems) { fy = !0; break; } } return fy; } var hy = new T("history"), gy = new T("closeHistory"); function _y(e = {}) { return e = { depth: e.depth || 100, newGroupDelay: e.newGroupDelay || 500 }, new w({ key: hy, state: { init() { return new ay(ny.empty, ny.empty, null, 0, -1); }, apply(t, n, r) { return sy(n, r, t, e); } }, config: e, props: { handleDOMEvents: { beforeinput(e, t) { let n = t.inputType, r = n == "historyUndo" ? yy : n == "historyRedo" ? by : null; return !r || !e.editable ? !1 : (t.preventDefault(), r(e.state, e.dispatch)); } } } }); } function vy(e, t) { return (n, r) => { let i = hy.getState(n); if (!i || (e ? i.undone : i.done).eventCount == 0) return !1; if (r) { let a = dy(i, n, e); a && r(t ? a.scrollIntoView() : a); } return !0; }; } var yy = vy(!1, !0), by = vy(!0, !0); F.create({ name: "characterCount", addOptions() { return { limit: null, autoTrim: !0, mode: "textSize", textCounter: (e) => e.length, wordCounter: (e) => e.split(" ").filter((e) => e !== "").length }; }, addStorage() { return { characters: () => 0, words: () => 0 }; }, onBeforeCreate() { this.storage.characters = (e) => { let t = e?.node || this.editor.state.doc; if ((e?.mode || this.options.mode) === "textSize") { let e = t.textBetween(0, t.content.size, void 0, " "); return this.options.textCounter(e); } return t.nodeSize; }, this.storage.words = (e) => { let t = e?.node || this.editor.state.doc, n = t.textBetween(0, t.content.size, " ", " "); return this.options.wordCounter(n); }; }, addProseMirrorPlugins() { let e = !1; return [new w({ key: new T("characterCount"), appendTransaction: (t, n, r) => { if (e) return; let i = this.options.limit, a = this.options.autoTrim; if (i == null || i === 0 || a === !1) { e = !0; return; } let o = this.storage.characters({ node: r.doc }); if (o > i) { let t = o - i; console.warn(`[CharacterCount] Initial content exceeded limit of ${i} characters. Content was automatically trimmed.`); let n = r.tr.deleteRange(0, t); return e = !0, n; } e = !0; }, filterTransaction: (e, t) => { let n = this.options.limit; if (!e.docChanged || n === 0 || n == null) return !0; let r = this.storage.characters({ node: t.doc }), i = this.storage.characters({ node: e.doc }); if (i <= n || r > n && i > n && i <= r) return !0; if (r > n && i > n && i > r || !e.getMeta("paste")) return !1; let a = e.selection.$head.pos, o = a - (i - n), s = a; return e.deleteRange(o, s), !(this.storage.characters({ node: e.doc }) > n); } })]; } }); var xy = F.create({ name: "dropCursor", addOptions() { return { color: "currentColor", width: 1, class: void 0 }; }, addProseMirrorPlugins() { return [zv(this.options)]; } }); F.create({ name: "focus", addOptions() { return { className: "has-focus", mode: "all" }; }, addProseMirrorPlugins() { return [new w({ key: new T("focus"), props: { decorations: ({ doc: e, selection: t }) => { let { isEditable: n, isFocused: r } = this.editor, { anchor: i } = t, a = []; if (!n || !r) return ps.create(e, []); let o = 0; this.options.mode === "deepest" && e.descendants((e, t) => { if (!e.isText) { if (!(i >= t && i <= t + e.nodeSize - 1)) return !1; o += 1; } }); let s = 0; return e.descendants((e, t) => { if (e.isText || !(i >= t && i <= t + e.nodeSize - 1)) return !1; if (s += 1, this.options.mode === "deepest" && o - s > 0 || this.options.mode === "shallowest" && s > 1) return this.options.mode === "deepest"; a.push(us.node(t, t + e.nodeSize, { class: this.options.className })); }), ps.create(e, a); } } })]; } }); var Sy = F.create({ name: "gapCursor", addProseMirrorPlugins() { return [Kv()]; }, extendNodeSchema(e) { return { allowGapCursor: N(M(e, "allowGapCursor", { name: e.name, options: e.options, storage: e.storage })) ?? null }; } }), Cy = "placeholder", wy = new T("tiptap__placeholder"), Ty = 200; function Ey(e) { let { editor: t, placeholder: n, dataAttribute: r, pos: i, node: a, isEmptyDoc: o, hasAnchor: s, classes: { emptyNode: c, emptyEditor: l } } = e, u = [c]; return o && u.push(l), us.node(i, i + a.nodeSize, { class: u.join(" "), [r]: typeof n == "function" ? n({ editor: t, node: a, pos: i, hasAnchor: s }) : n }); } function Dy(e, t) { return typeof e == "function" ? e(t) : e; } function Oy({ editor: e, options: t, dataAttribute: n, doc: r, selection: i }) { if (!(e.isEditable || !t.showOnlyWhenEditable)) return null; let { anchor: a } = i, o = [], s = e.isEmpty; if (t.showOnlyCurrent && !t.includeChildren) { let i = r.resolve(a), c = i.depth > 0 ? i.node(1) : i.nodeAfter, l = i.depth > 0 ? i.before(1) : a; if (c && c.type.isTextblock && yu(c)) { let r = a >= l && a <= l + c.nodeSize; o.push(Ey({ editor: e, isEmptyDoc: s, dataAttribute: n, hasAnchor: r, placeholder: t.placeholder, classes: { emptyEditor: t.emptyEditorClass, emptyNode: Dy(t.emptyNodeClass, { editor: e, node: c, pos: l, hasAnchor: r }) }, node: c, pos: l })); } } else { let i = wy.getState(e.state), c = i?.topPos ?? 0, l = i?.bottomPos ?? r.content.size; r.nodesBetween(c, l, (r, i) => { let c = a >= i && a <= i + r.nodeSize, l = !r.isLeaf && yu(r); return r.type.isTextblock && (c || !t.showOnlyCurrent) && l && o.push(Ey({ editor: e, isEmptyDoc: s, dataAttribute: n, hasAnchor: c, placeholder: t.placeholder, classes: { emptyEditor: t.emptyEditorClass, emptyNode: Dy(t.emptyNodeClass, { editor: e, node: r, pos: i, hasAnchor: c }) }, node: r, pos: i })), t.includeChildren; }); } return ps.create(r, o); } function ky(e) { return e.replace(/\s+/g, "-").replace(/[^a-zA-Z0-9-]/g, "").replace(/^[0-9-]+/, "").replace(/^-+/, "").toLowerCase(); } function Ay(e) { let t = getComputedStyle(e), n = `${t.overflow} ${t.overflowY} ${t.overflowX}`; return /auto|scroll|overlay/.test(n); } function jy(e) { let t = e; for (; t;) { if (Ay(t)) return t; let e = t.parentElement; if (!e) { let e = t.getRootNode(); if (e instanceof ShadowRoot) { t = e.host; continue; } return window; } t = e; } return window; } function My(e) { return e === window ? { top: 0, bottom: window.innerHeight } : e.getBoundingClientRect(); } function Ny({ doc: e, view: t, scrollContainer: n }) { let r = t.dom.getBoundingClientRect(), i = n ? My(n) : { top: 0, bottom: window.innerHeight }, a = Math.max(r.top, i.top) - Ty, o = Math.min(r.bottom, i.bottom) + Ty; if (a >= o) return { top: 0, bottom: e.content.size }; let s = getComputedStyle(t.dom).direction === "rtl" ? Math.max(r.right - 2, r.left + 2) : r.left + 2, c = t.posAtCoords({ left: s, top: a + 2 }), l = t.posAtCoords({ left: s, top: o - 2 }); return { top: c ? c.pos : 0, bottom: l ? l.pos : e.content.size }; } var Py = { init() { return { topPos: null, bottomPos: null }; }, apply(e, t) { let n = e.getMeta(wy); return n?.positions ? { topPos: n.positions.top, bottomPos: n.positions.bottom } : e.docChanged ? { topPos: t.topPos === null ? null : e.mapping.map(t.topPos), bottomPos: t.bottomPos === null ? null : e.mapping.map(t.bottomPos) } : t; } }; function Fy(e) { let t = jy(e.dom), n = () => { let n = Ny({ view: e, doc: e.state.doc, scrollContainer: t }), r = wy.getState(e.state); if (r?.topPos === n.top && r?.bottomPos === n.bottom) return; let i = e.state.tr.setMeta(wy, { positions: n }); e.dispatch(i); }, r = null, i = 0, a = () => { r === null && (r = requestAnimationFrame(() => { r = null; let e = performance.now(); e - i >= 150 ? (i = e, n()) : a(); })); }; return t.addEventListener("scroll", a, { passive: !0 }), n(), { update(t, n) { e.state.doc.content.size !== n.doc.content.size && a(); }, destroy: () => { r !== null && cancelAnimationFrame(r), t.removeEventListener("scroll", a); } }; } function Iy({ editor: e, options: t }) { let n = t.dataAttribute ? `data-${ky(t.dataAttribute)}` : `data-${Cy}`; return new w({ key: wy, state: Py, view: Fy, props: { decorations: ({ doc: r, selection: i }) => Oy({ editor: e, options: t, dataAttribute: n, doc: r, selection: i }) } }); } F.create({ name: "placeholder", addOptions() { return { emptyEditorClass: "is-editor-empty", emptyNodeClass: "is-empty", dataAttribute: Cy, placeholder: "Write something …", showOnlyWhenEditable: !0, showOnlyCurrent: !0, includeChildren: !1 }; }, addProseMirrorPlugins() { return [Iy({ editor: this.editor, options: this.options })]; } }); var Ly = ".ProseMirror:not(.ProseMirror-focused) *::selection {\n background: transparent;\n}\n\n.ProseMirror:not(.ProseMirror-focused) *::-moz-selection {\n background: transparent;\n}"; F.create({ name: "selection", addOptions() { return { className: "selection" }; }, addProseMirrorPlugins() { let { editor: e, options: t } = this; return e.options.injectCSS && typeof document < "u" && Ed(Ly, e.options.injectNonce, "selection"), [new w({ key: new T("selection"), props: { decorations(n) { return n.selection.empty || e.isFocused || !e.isEditable || bu(n.selection) || e.view.dragging ? null : ps.create(n.doc, [us.inline(n.selection.from, n.selection.to, { class: t.className })]); } } })]; } }); function Ry({ types: e, node: t }) { return t && Array.isArray(e) && e.includes(t.type) || t?.type === e; } var zy = F.create({ name: "trailingNode", addOptions() { return { node: void 0, notAfter: [] }; }, addProseMirrorPlugins() { let e = new T(this.name), t = this.options.node || this.editor.schema.topNodeType.contentMatch.defaultType?.name || "paragraph", n = Object.entries(this.editor.schema.nodes).map(([, e]) => e).filter((e) => (this.options.notAfter || []).concat(t).includes(e.name)); return [new w({ key: e, appendTransaction: (n, r, i) => { let { doc: a, tr: o, schema: s } = i, c = e.getState(i), l = a.content.size, u = s.nodes[t]; if (!n.some((e) => e.getMeta("skipTrailingNode")) && c) return o.insert(l, u.create()); }, state: { init: (e, t) => { let r = t.tr.doc.lastChild; return !Ry({ node: r, types: n }); }, apply: (e, t) => { if (!e.docChanged || e.getMeta("__uniqueIDTransaction")) return t; let r = e.doc.lastChild; return !Ry({ node: r, types: n }); } } })]; } }), By = F.create({ name: "undoRedo", addOptions() { return { depth: 100, newGroupDelay: 500 }; }, addCommands() { return { undo: () => ({ state: e, dispatch: t }) => yy(e, t), redo: () => ({ state: e, dispatch: t }) => by(e, t) }; }, addProseMirrorPlugins() { return [_y(this.options)]; }, addKeyboardShortcuts() { return { "Mod-z": () => this.editor.commands.undo(), "Shift-Mod-z": () => this.editor.commands.redo(), "Mod-y": () => this.editor.commands.redo(), "Mod-я": () => this.editor.commands.undo(), "Shift-Mod-я": () => this.editor.commands.redo() }; } }), Vy = F.create({ name: "starterKit", addExtensions() { let e = []; return this.options.bold !== !1 && e.push(vh.configure(this.options.bold)), this.options.blockquote !== !1 && e.push(ph.configure(this.options.blockquote)), this.options.bulletList !== !1 && e.push(Q_.configure(this.options.bulletList)), this.options.code !== !1 && e.push(xh.configure(this.options.code)), this.options.codeBlock !== !1 && e.push(Th.configure(this.options.codeBlock)), this.options.document !== !1 && e.push(Eh.configure(this.options.document)), this.options.dropcursor !== !1 && e.push(xy.configure(this.options.dropcursor)), this.options.gapcursor !== !1 && e.push(Sy.configure(this.options.gapcursor)), this.options.hardBreak !== !1 && e.push(Dh.configure(this.options.hardBreak)), this.options.heading !== !1 && e.push(Oh.configure(this.options.heading)), this.options.undoRedo !== !1 && e.push(By.configure(this.options.undoRedo)), this.options.horizontalRule !== !1 && e.push(kh.configure(this.options.horizontalRule)), this.options.italic !== !1 && e.push(Ph.configure(this.options.italic)), this.options.listItem !== !1 && e.push(av.configure(this.options.listItem)), this.options.listKeymap !== !1 && e.push(gv.configure(this.options?.listKeymap)), this.options.link !== !1 && e.push(K_.configure(this.options?.link)), this.options.orderedList !== !1 && e.push(Dv.configure(this.options.orderedList)), this.options.paragraph !== !1 && e.push(Nv.configure(this.options.paragraph)), this.options.strike !== !1 && e.push(Iv.configure(this.options.strike)), this.options.text !== !1 && e.push(Lv.configure(this.options.text)), this.options.underline !== !1 && e.push(Rv.configure(this.options?.underline)), this.options.trailingNode !== !1 && e.push(zy.configure(this.options?.trailingNode)), e; } }), Hy = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i; //#endregion //#region node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/validate.js function Uy(e) { return typeof e == "string" && Hy.test(e); } //#endregion //#region node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/stringify.js var J = []; for (let e = 0; e < 256; ++e) J.push((e + 256).toString(16).slice(1)); function Wy(e, t = 0) { return (J[e[t + 0]] + J[e[t + 1]] + J[e[t + 2]] + J[e[t + 3]] + "-" + J[e[t + 4]] + J[e[t + 5]] + "-" + J[e[t + 6]] + J[e[t + 7]] + "-" + J[e[t + 8]] + J[e[t + 9]] + "-" + J[e[t + 10]] + J[e[t + 11]] + J[e[t + 12]] + J[e[t + 13]] + J[e[t + 14]] + J[e[t + 15]]).toLowerCase(); } function Gy(e, t = 0) { let n = Wy(e, t); if (!Uy(n)) throw TypeError("Stringified UUID is invalid"); return n; } //#endregion //#region app.js var Ky = "memo-ui-state-v1"; new URLSearchParams(window.location.search).get("device") === "mobile" && document.documentElement.classList.add("force-mobile"); var qy = [{ id: cx(), folder: "notes", body: "欢迎使用备忘录\n\n左侧选择文件夹,中间选择笔记,右侧直接编辑。第一行会自动作为标题。", createdAt: Date.now() - 1e3 * 60 * 60 * 24, updatedAt: Date.now() - 1e3 * 60 * 12, version: 1 }, { id: cx(), folder: "notes", body: "待办清单\n\n- 记录想法\n- 整理项目\n- 做一个真正好用的 Web 版笔记", createdAt: Date.now() - 1e3 * 60 * 60 * 3, updatedAt: Date.now() - 1e3 * 60 * 35, version: 1 }], Jy = await Sb(), Y = Jy.authenticated ? await xb() : zb({ notes: [], folders: sx() }), Yy = null, Xy = null, Zy = null, Qy = null, $y = null, X = null, eb = !1, tb = 700, nb = 10 * 1024 * 1024, rb = 1600, ib = .82, ab = Qd.extend({ addAttributes() { return { ...this.parent?.(), align: { default: "center", parseHTML: (e) => e.getAttribute("data-align") || "center", renderHTML: (e) => ({ "data-align": e.align || "center" }) } }; } }), Z = { authGate: document.querySelector("#authGate"), authForm: document.querySelector("#authForm"), authTitle: document.querySelector("#authTitle"), authPassword: document.querySelector("#authPassword"), authSubmit: document.querySelector("#authSubmit"), authMessage: document.querySelector("#authMessage"), passwordGate: document.querySelector("#passwordGate"), passwordForm: document.querySelector("#passwordForm"), currentPassword: document.querySelector("#currentPassword"), nextPassword: document.querySelector("#nextPassword"), confirmPassword: document.querySelector("#confirmPassword"), cancelPassword: document.querySelector("#cancelPassword"), submitPassword: document.querySelector("#submitPassword"), passwordMessage: document.querySelector("#passwordMessage"), folderGate: document.querySelector("#folderGate"), folderForm: document.querySelector("#folderForm"), folderTitle: document.querySelector("#folderTitle"), folderName: document.querySelector("#folderName"), cancelFolder: document.querySelector("#cancelFolder"), submitFolder: document.querySelector("#submitFolder"), folderMessage: document.querySelector("#folderMessage"), folderList: document.querySelector("#folderList"), newFolder: document.querySelector("#newFolder"), listTitle: document.querySelector("#listTitle"), listCount: document.querySelector("#listCount"), noteList: document.querySelector("#noteList"), newNote: document.querySelector("#newNote"), deleteNote: document.querySelector("#deleteNote"), previewToggle: document.querySelector("#previewToggle"), changePassword: document.querySelector("#changePassword"), logout: document.querySelector("#logout"), searchInput: document.querySelector("#searchInput"), mobileBack: document.querySelector("#mobileBack"), mobileBackLabel: document.querySelector("#mobileBackLabel"), mobileTitle: document.querySelector("#mobileTitle"), mobileSearchInput: document.querySelector("#mobileSearchInput"), mobileSearchWrap: document.querySelector("#mobileSearchWrap"), mobileEdit: document.querySelector("#mobileEdit"), mobileEditorMenuToggle: document.querySelector("#mobileEditorMenuToggle"), mobileEditorFormatMenu: document.querySelector("#mobileEditorFormatMenu"), mobilePreviewToggle: document.querySelector("#mobilePreviewToggle"), mobileSave: document.querySelector("#mobileSave"), mobileMore: document.querySelector("#mobileMore"), mobileActionMenu: document.querySelector("#mobileActionMenu"), mobileMenuPreview: document.querySelector("#mobileMenuPreview"), mobileMenuSave: document.querySelector("#mobileMenuSave"), mobileMenuDelete: document.querySelector("#mobileMenuDelete"), mobileNoteFolderSelect: document.querySelector("#mobileNoteFolderSelect"), appShell: document.querySelector(".app-shell"), editor: document.querySelector("#editor"), noteFolderSelect: document.querySelector("#noteFolderSelect"), editorMenuToggle: document.querySelector("#editorMenuToggle"), editorFormatMenu: document.querySelector("#editorFormatMenu"), editorPreviewToggle: document.querySelector("#editorPreviewToggle"), saveNote: document.querySelector("#saveNote"), saveStatus: document.querySelector("#saveStatus"), editedAt: document.querySelector("#editedAt"), markdownPreview: document.querySelector("#markdownPreview"), editorPane: document.querySelector(".editor-pane") }; gb(), $(), Jy.authenticated ? wb() : Cb(Jy.configured), window.addEventListener("beforeunload", Ab), Z.authForm.addEventListener("submit", async (e) => { e.preventDefault(); let t = Z.authPassword.value; Z.authSubmit.disabled = !0, Z.authMessage.textContent = ""; try { let e = Jy.configured ? "/api/auth/login" : "/api/auth/setup", n = await fetch(e, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ password: t }) }); if (!n.ok) { let e = n.status === 401 ? "密码不正确" : "密码至少需要 8 位"; Z.authMessage.textContent = e; return; } location.reload(); } finally { Z.authSubmit.disabled = !1; } }), Z.newNote.addEventListener("click", async () => { let e = Date.now(), t = { id: cx(), folder: ax(), body: "", createdAt: e, updatedAt: e, version: 1 }; Y.notes.unshift(t), Y.activeFolder === "recent" && (Y.activeFolder = t.folder), Y.selectedId = t.id, Y.mobileView = "editor", $(), Z.editor.focus(); try { Q("保存中"); let e = await Nb(t); Object.assign(t, e), Q("已保存", "ok"), Ub(), qb(); } catch (e) { Q("保存失败", "error"), console.error("Failed to create note.", e); } }), Z.deleteNote.addEventListener("click", async () => { let e = ex(); if (!e) return; let t = Qb(), n = t.findIndex((t) => t.id === e.id); Y.notes = Y.notes.filter((t) => t.id !== e.id); let r = t[n + 1] || t[n - 1]; Y.selectedId = r && Y.notes.some((e) => e.id === r.id) ? r.id : null, $(); try { await Pb(e.id), Q("已删除", "ok"); } catch (t) { Y.notes.unshift(e), Y.selectedId = e.id, Q("删除失败", "error"), $(), console.error("Failed to delete note.", t); } }), Z.searchInput.addEventListener("input", (e) => { Y.query = e.target.value; let t = Qb(); t.some((e) => e.id === Y.selectedId) || (Y.selectedId = t[0]?.id || null), Vb(), $(); }), Z.mobileSearchInput.addEventListener("input", (e) => { if (Y.mobileView === "folders") Y.folderQuery = e.target.value; else { Y.query = e.target.value; let t = Qb(); t.some((e) => e.id === Y.selectedId) || (Y.selectedId = t[0]?.id || null); } Vb(), $(); }), Z.mobileBack.addEventListener("click", () => { Y.mobileView === "editor" ? Y.mobileView = "list" : Y.mobileView === "list" && (Y.mobileView = "folders"), Vb(), $(); }), Z.mobileEdit.addEventListener("click", () => { Z.newNote.click(); }), Z.mobileSave.addEventListener("click", () => { ex() && kb({ immediate: !0 }); }), Z.mobilePreviewToggle.addEventListener("click", sb), Z.editorMenuToggle.addEventListener("click", (e) => { e.stopPropagation(), cb("desktop"); }), Z.mobileEditorMenuToggle.addEventListener("click", (e) => { e.stopPropagation(), cb("mobile"); }), [...document.querySelectorAll("[data-editor-command]")].forEach((e) => { e.addEventListener("click", (t) => { t.preventDefault(), t.stopPropagation(), ub(e.dataset.editorCommand); }); }), Z.mobileMore.addEventListener("click", (e) => { e.stopPropagation(), Z.mobileActionMenu.hidden = !Z.mobileActionMenu.hidden; }), Z.mobileMenuPreview.addEventListener("click", () => { Z.mobileActionMenu.hidden = !0, sb(); }), Z.mobileMenuSave.addEventListener("click", () => { Z.mobileActionMenu.hidden = !0, ex() && kb({ immediate: !0 }); }), Z.mobileMenuDelete.addEventListener("click", () => { Z.mobileActionMenu.hidden = !0, Z.deleteNote.click(); }), document.addEventListener("click", (e) => { !Z.mobileActionMenu.hidden && !e.target.closest("#mobileActions") && (Z.mobileActionMenu.hidden = !0), e.target.closest(".editor-menu-wrap") || (Z.editorFormatMenu.hidden = !0), e.target.closest(".mobile-editor-menu-wrap") || (Z.mobileEditorFormatMenu.hidden = !0); }), Z.newFolder.addEventListener("click", () => { Db({ mode: "create", name: ox("新建文件夹") }); }), Z.noteFolderSelect.addEventListener("change", (e) => { ob(e.target.value); }), Z.saveNote.addEventListener("click", () => { ex() && kb({ immediate: !0 }); }), Z.mobileNoteFolderSelect.addEventListener("change", (e) => { Z.mobileActionMenu.hidden = !0, ob(e.target.value); }), Z.previewToggle.addEventListener("click", sb), Z.editorPreviewToggle.addEventListener("click", sb), Z.logout.addEventListener("click", async () => { await fetch("/api/auth/logout", { method: "POST" }), location.reload(); }), Z.changePassword.addEventListener("click", async () => { Tb(); }), Z.cancelPassword.addEventListener("click", Eb), Z.cancelFolder.addEventListener("click", Ob), Z.folderForm.addEventListener("submit", async (e) => { e.preventDefault(); let t = Z.folderForm.dataset.mode, n = Z.folderForm.dataset.folderId, r = Z.folderName.value.trim(); if (!r) { Z.folderMessage.textContent = "请输入文件夹名称"; return; } Z.submitFolder.disabled = !0, Z.folderMessage.textContent = ""; try { t === "rename" && n ? await rx(n, r) : await nx(r); } finally { Z.submitFolder.disabled = !1; } }), Z.passwordForm.addEventListener("submit", async (e) => { e.preventDefault(); let t = Z.currentPassword.value, n = Z.nextPassword.value, r = Z.confirmPassword.value; if (Z.passwordMessage.textContent = "", n !== r) { Z.passwordMessage.textContent = "两次输入的新密码不一致"; return; } Z.submitPassword.disabled = !0; try { let e = await fetch("/api/auth/password", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ currentPassword: t, nextPassword: n }) }); if (!e.ok) { let t = e.status === 401 ? "当前密码不正确" : "新密码至少需要 8 位"; Z.passwordMessage.textContent = t; return; } Eb(), window.alert("密码已修改"); } catch (e) { Z.passwordMessage.textContent = "修改失败,请稍后再试", console.error("Failed to change password.", e); } finally { Z.submitPassword.disabled = !1; } }); function ob(e) { let t = ex(); t && Y.folders.some((t) => t.id === e) && (t.folder = e, t.updatedAt = Date.now(), Y.activeFolder = e, kb({ immediate: !0 }), $()); } function sb() { Y.previewMode = !Y.previewMode, Vb(), lb(), qb(), Xb(); } function cb(e) { if (!ex() || Y.previewMode) return; let t = e === "mobile" ? Z.mobileEditorFormatMenu : Z.editorFormatMenu, n = e === "mobile" ? Z.editorFormatMenu : Z.mobileEditorFormatMenu; n.hidden = !0, t.hidden = !t.hidden, Z.editorMenuToggle.classList.toggle("active", !Z.editorFormatMenu.hidden), Z.mobileEditorMenuToggle.classList.toggle("active", !Z.mobileEditorFormatMenu.hidden), pb(); } function lb() { Z.editorFormatMenu.hidden = !0, Z.mobileEditorFormatMenu.hidden = !0, Z.editorMenuToggle.classList.remove("active"), Z.mobileEditorMenuToggle.classList.remove("active"); } function ub(e) { if (!X || Y.previewMode || !ex()) return; let t = { alignLeft: "left", alignCenter: "center", alignRight: "right" }[e]; if (t) { db(t), pb(); return; } let n = X.chain().focus(); ({ paragraph: () => n.setParagraph().run(), heading1: () => n.toggleHeading({ level: 1 }).run(), heading2: () => n.toggleHeading({ level: 2 }).run(), bold: () => n.toggleBold().run(), italic: () => n.toggleItalic().run(), bulletList: () => n.toggleBulletList().run(), orderedList: () => n.toggleOrderedList().run() })[e]?.(), pb(); } function db(e) { if (mb()) { fb(e); return; } X.chain().focus().setTextAlign(e).run(); } function fb(e) { mb() && X.chain().focus().updateAttributes("image", { align: e }).run(); } function pb(e = X) { if (!e) return; let t = !ex() || Y.previewMode; Z.editorMenuToggle.disabled = t, Z.mobileEditorMenuToggle.disabled = t, t && lb(); let n = /* @__PURE__ */ new Set(); e.isActive("paragraph") && n.add("paragraph"), e.isActive("heading", { level: 1 }) && n.add("heading1"), e.isActive("heading", { level: 2 }) && n.add("heading2"), e.isActive("bold") && n.add("bold"), e.isActive("italic") && n.add("italic"), e.isActive("bulletList") && n.add("bulletList"), e.isActive("orderedList") && n.add("orderedList"); let r = hb(), i = e.getAttributes("paragraph").textAlign || e.getAttributes("heading").textAlign, a = r || i || "left"; n.add(`align${a[0].toUpperCase()}${a.slice(1)}`), document.querySelectorAll("[data-editor-command]").forEach((e) => { let r = n.has(e.dataset.editorCommand); e.classList.toggle("active", r), e.disabled = t; }); } function mb() { return X?.state.selection.node?.type.name === "image"; } function hb() { return mb() ? X.state.selection.node.attrs.align || "center" : ""; } function gb() { X = new Dd({ element: Z.editor, extensions: [ Vy, ab.configure({ allowBase64: !0, HTMLAttributes: { class: "memo-image" } }), $d.configure({ types: ["heading", "paragraph"] }), zp ], content: "", editorProps: { handlePaste(e, t) { let n = [...t.clipboardData?.files || []].filter((e) => e.type.startsWith("image/")); return n.length ? (t.preventDefault(), _b(n), !0) : !1; } }, onUpdate({ editor: e }) { if (eb) return; let t = ex(); if (!t) return; let n = dx(e.getHTML()); if (n.length > nb) { Q("内容已达上限", "error"); return; } t.body = n, t.updatedAt = Date.now(), kb(), Ub(), Zb(t), ux(t), pb(e); }, onSelectionUpdate({ editor: e }) { pb(e); } }); } async function _b(e) { if (!(!X || !ex())) { Q("处理图片"); for (let t of e) try { let e = await vb(t); if (dx(X.getHTML()).length + e.length > nb) { Q("图片太大", "error"); continue; } X.chain().focus().insertContent([{ type: "image", attrs: { src: e, alt: t.name || "粘贴的图片", title: t.name || null, align: "center" } }, { type: "paragraph" }]).run(); } catch (e) { Q("图片粘贴失败", "error"), console.error("Failed to paste image.", e); } } } async function vb(e) { if (e.type === "image/gif") return await bb(e); let t = await yb(e), n = Math.min(1, rb / Math.max(t.naturalWidth || t.width, t.naturalHeight || t.height)), r = Math.max(1, Math.round((t.naturalWidth || t.width) * n)), i = Math.max(1, Math.round((t.naturalHeight || t.height) * n)), a = document.createElement("canvas"); a.width = r, a.height = i; let o = a.getContext("2d"); if (!o) throw Error("Canvas is unavailable."); o.drawImage(t, 0, 0, r, i), URL.revokeObjectURL(t.src); let s = a.toDataURL("image/webp", ib); return s.startsWith("data:image/webp") ? s : a.toDataURL("image/jpeg", ib); } function yb(e) { return new Promise((t, n) => { let r = new Image(); r.onload = () => t(r), r.onerror = n, r.src = URL.createObjectURL(e); }); } function bb(e) { return new Promise((t, n) => { let r = new FileReader(); r.onload = () => t(String(r.result || "")), r.onerror = n, r.readAsDataURL(e); }); } document.addEventListener("keydown", (e) => { (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "n" && (e.preventDefault(), Z.newNote.click()), (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "f" && (e.preventDefault(), Z.searchInput.focus(), Z.searchInput.select()), (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "s" && (e.preventDefault(), ex() && kb({ immediate: !0 })), e.key === "Delete" && !Z.editor.contains(document.activeElement) && Z.deleteNote.click(), e.key === "Escape" && lb(); }); async function xb() { try { let e = await fetch("/api/state"); if (!e.ok) throw Error(`State API returned ${e.status}`); return zb(await e.json()); } catch (e) { return console.warn("Falling back to starter notes because the API is unavailable.", e), zb({ notes: qy, folders: sx() }); } } async function Sb() { try { let e = await fetch("/api/auth/status"); if (!e.ok) throw Error(`Auth API returned ${e.status}`); return await e.json(); } catch (e) { return console.warn("Auth API unavailable.", e), { configured: !1, authenticated: !1 }; } } function Cb(e) { Z.authGate.setAttribute("aria-busy", "false"), Z.authTitle.textContent = e ? "登录" : "设置密码", Z.authPassword.autocomplete = e ? "current-password" : "new-password", Z.authPassword.placeholder = e ? "密码" : "设置至少 8 位密码", Z.authSubmit.textContent = e ? "登录" : "创建", Z.authGate.hidden = !1, Z.authPassword.focus(); } function wb() { Z.authGate.hidden = !0, Z.authGate.setAttribute("aria-busy", "false"); } function Tb() { Z.passwordForm.reset(), Z.passwordMessage.textContent = "", Z.passwordGate.hidden = !1, Z.currentPassword.focus(); } function Eb() { Z.passwordGate.hidden = !0, Z.passwordForm.reset(), Z.passwordMessage.textContent = ""; } function Db({ mode: e, name: t, folderId: n = "" }) { Z.folderForm.dataset.mode = e, Z.folderForm.dataset.folderId = n, Z.folderTitle.textContent = e === "rename" ? "重命名文件夹" : "新建文件夹", Z.submitFolder.textContent = e === "rename" ? "保存" : "创建", Z.folderName.value = t || "", Z.folderMessage.textContent = "", Z.folderGate.hidden = !1, requestAnimationFrame(() => { Z.folderName.focus(), Z.folderName.select(); }); } function Ob() { Z.folderGate.hidden = !0, Z.folderForm.reset(), Z.folderForm.dataset.mode = "", Z.folderForm.dataset.folderId = "", Z.folderMessage.textContent = ""; } function kb({ immediate: e = !1 } = {}) { let t = ex(); t && jb(t.id, { immediate: e }); } function Ab() { if (Vb(), !Yy) return; let e = Xy; clearTimeout(Yy), Yy = null, Xy = null, e && Mb(e, { keepalive: !0 }); } function jb(e, { immediate: t = !1 } = {}) { if (Vb(), Yy && clearTimeout(Yy), Xy = e, t) { Yy = null, Xy = null, Mb(e); return; } Yy = setTimeout(() => { let e = Xy; Yy = null, Xy = null, e && Mb(e); }, tb), Q("未保存"); } async function Mb(e, { keepalive: t = !1 } = {}) { let n = Y.notes.find((t) => t.id === e); if (!n) return; if (Zy) { Qy = e; return; } Q("保存中"); let r = { body: n.body, folder: n.folder, updatedAt: n.updatedAt }; Zy = e; try { let e = await fetch(`/api/notes/${encodeURIComponent(n.id)}`, { method: "PATCH", keepalive: t, headers: { "content-type": "application/json" }, body: JSON.stringify({ folder: n.folder, body: n.body, updatedAt: n.updatedAt, version: n.version }) }), i = await e.json().catch(() => ({})); if (e.status === 409 && i.note) { Rb(n, i.note); return; } if (!e.ok) throw Error(i.error || `Save API returned ${e.status}`); let a = n.body !== r.body || n.folder !== r.folder || n.updatedAt !== r.updatedAt; a ? n.version = i.version : Object.assign(n, i), Q(a ? "继续保存中" : "已保存", a ? "" : "ok"), Ub(), qb(); } catch (e) { Q("保存失败", "error"), console.error("Failed to save note.", e); } finally { if (Zy = null, Qy) { let e = Qy; Qy = null, Mb(e); } } } async function Nb(e) { let t = await fetch("/api/notes", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(e) }); if (!t.ok) throw Error(`Create note API returned ${t.status}`); return await t.json(); } async function Pb(e) { let t = await fetch(`/api/notes/${encodeURIComponent(e)}`, { method: "DELETE" }); if (!t.ok) throw Error(`Delete note API returned ${t.status}`); } async function Fb(e) { let t = await fetch("/api/folders", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(e) }); if (!t.ok) throw Error(`Create folder API returned ${t.status}`); return await t.json(); } async function Ib(e, t) { let n = await fetch(`/api/folders/${encodeURIComponent(e)}`, { method: "PATCH", headers: { "content-type": "application/json" }, body: JSON.stringify(t) }), r = await n.json().catch(() => ({})); if (n.status === 409 && r.folder) return { status: "conflict", folder: r.folder }; if (!n.ok) throw Error(`Update folder API returned ${n.status}`); return r; } async function Lb(e) { let t = await fetch(`/api/folders/${encodeURIComponent(e)}`, { method: "DELETE" }); if (!t.ok) throw Error(`Delete folder API returned ${t.status}`); return await t.json(); } function Rb(e, t) { if (Q("有冲突", "conflict"), window.confirm("这条笔记已在其他设备修改。确定载入服务器版本吗?取消则保留本机内容,稍后可再次保存。")) { Object.assign(e, t), Q("已载入服务器版本", "ok"), $(); return; } e.version = t.version, Q("保留本机内容", "conflict"); } function Q(e, t = "") { Z.saveStatus.textContent = e, Z.saveStatus.className = `save-status${t ? ` is-${t}` : ""}`, $y && clearTimeout($y), t === "ok" && ($y = setTimeout(() => { Z.saveStatus.textContent = "", Z.saveStatus.className = "save-status"; }, 1800)); } function zb(e) { let t = Array.isArray(e.folders) && e.folders.length ? e.folders : sx(), n = Array.isArray(e.notes) ? e.notes.map((e) => ({ ...e, version: Number(e.version || 1) })) : [], r = Bb(), i = n.some((e) => e.id === r.selectedId) ? r.selectedId : n[0]?.id || null, a = n.find((e) => e.id === i), o = new Set([ "all", "recent", ...t.map((e) => e.id) ]).has(r.activeFolder) ? r.activeFolder : a?.folder || "all"; a && o !== "all" && o !== "recent" && o !== a.folder && (o = a.folder), a && o === "recent" && !$b(a) && (o = a.folder); let s = [ "folders", "list", "editor" ].includes(r.mobileView) ? r.mobileView : i ? "editor" : "folders"; return { notes: n, folders: t, activeFolder: o, selectedId: i, query: "", folderQuery: "", mobileView: s, previewMode: !!r.previewMode }; } function Bb() { try { return JSON.parse(localStorage.getItem(Ky)) || {}; } catch { return {}; } } function Vb() { localStorage.setItem(Ky, JSON.stringify({ activeFolder: Y.activeFolder, selectedId: Y.selectedId, mobileView: Y.mobileView, previewMode: Y.previewMode })); } function $() { Z.searchInput.value = Y.query, Hb(), Ub(), qb(), Xb(); } function Hb() { let e = Date.now() - 1e3 * 60 * 60 * 24 * 7, t = { id: "all", name: "所有笔记", icon: "▣", count: Y.notes.length }, n = { id: "recent", name: "最近编辑", icon: "clock-3", count: Y.notes.filter((t) => t.updatedAt >= e).length }; t.icon = "file-text"; let r = Y.mobileView === "folders" ? Y.folderQuery.trim().toLowerCase() : "", i = Y.folders.filter((e) => !r || e.name.toLowerCase().includes(r)).map((e) => ({ id: e.id, name: e.name, icon: "folder", count: Y.notes.filter((t) => t.folder === e.id).length, manageable: e.id !== "notes" })), a = [t, n].filter((e) => !r || e.name.toLowerCase().includes(r)); Z.folderList.replaceChildren(...[...a, ...i].map(Gb)); } function Ub() { let e = Qb(); e.some((e) => e.id === Y.selectedId) || (Y.selectedId = e[0]?.id || null); let t = { all: "所有笔记", recent: "最近编辑" }, n = Y.folders.find((e) => e.id === Y.activeFolder); Z.listTitle.textContent = t[Y.activeFolder] || n?.name || "所有笔记", Z.listCount.textContent = `${e.length} 个笔记`, Z.deleteNote.disabled = !Y.selectedId, Z.noteList.replaceChildren(...Wb(e)), Hb(); } function Wb(e) { let t = [], n = ""; return e.forEach((e) => { let r = Sx(e.updatedAt); if (r !== n) { n = r; let e = document.createElement("div"); e.className = "note-section-title", e.textContent = r, t.push(e); } t.push(Kb(e)); }), t; } function Gb(e) { let t = document.createElement("div"); t.className = `folder-item${e.manageable ? " can-manage" : ""}`; let n = document.createElement("button"); n.className = `folder-row${e.id === Y.activeFolder ? " active" : ""}`, n.type = "button", n.dataset.folder = e.id; let r = document.createElement("i"); r.className = "folder-icon", r.dataset.lucide = e.icon, r.setAttribute("aria-hidden", "true"); let i = document.createElement("span"); i.className = "folder-name", i.textContent = e.name; let a = document.createElement("span"); if (a.className = "folder-count", a.textContent = e.count, n.append(r, i, a), n.addEventListener("click", () => { Y.activeFolder = e.id, Y.selectedId = Qb()[0]?.id || null, Y.mobileView = "list", Vb(), $(); }), t.append(n), e.manageable) { let n = document.createElement("button"); n.className = "folder-edit", n.type = "button", n.setAttribute("aria-label", `重命名${e.name}`), n.title = "重命名文件夹", n.innerHTML = "", n.addEventListener("click", (t) => { t.stopPropagation(), Db({ mode: "rename", folderId: e.id, name: e.name }); }), t.append(n); let r = document.createElement("button"); r.className = "folder-delete", r.type = "button", r.setAttribute("aria-label", `删除${e.name}`), r.title = "删除文件夹", r.innerHTML = "", r.addEventListener("click", (t) => { t.stopPropagation(), tx(e.id); }), t.append(r); } return t; } function Kb(e) { let t = document.createElement("button"); t.type = "button", t.className = `note-card${e.id === Y.selectedId ? " selected" : ""}`, t.dataset.noteId = e.id, t.setAttribute("aria-label", _x(e)); let n = document.createElement("span"); n.className = "note-title", n.textContent = _x(e); let r = document.createElement("span"); return r.className = "note-preview", r.innerHTML = `${bx(e.updatedAt)} ${vx(e)}`, t.append(n, r), t.addEventListener("click", () => { Y.selectedId = e.id, Y.mobileView = "editor", Vb(), $(), Z.editor.focus(); }), t; } function qb() { let e = ex(); if (Z.editorPane.classList.toggle("empty", !e), Z.saveNote.disabled = !e, Z.mobileSave.disabled = !e, Z.editorMenuToggle.disabled = !e || Y.previewMode, Z.mobileEditorMenuToggle.disabled = !e || Y.previewMode, Z.editorPreviewToggle.disabled = !e, Z.mobilePreviewToggle.disabled = !e, Z.mobileMore.disabled = !e, Z.mobileMenuSave.disabled = !e, Z.mobileMenuPreview.disabled = !e, Z.mobileMenuDelete.disabled = !e, Z.previewToggle.classList.toggle("active", Y.previewMode), Z.editorPreviewToggle.classList.toggle("active", Y.previewMode), Z.mobilePreviewToggle.classList.toggle("active", Y.previewMode), Z.mobileMenuPreview.classList.toggle("active", Y.previewMode), !e) { Z.mobileActionMenu.hidden = !0, lb(), Jb(""), X?.setEditable(!1, !1), Z.editor.hidden = !1, Z.editedAt.textContent = "", Z.markdownPreview.hidden = !0, Z.noteFolderSelect.replaceChildren(), Z.mobileNoteFolderSelect.replaceChildren(), Z.noteFolderSelect.disabled = !0, Z.mobileNoteFolderSelect.disabled = !0; return; } Jb(e.body), X?.setEditable(!Y.previewMode, !1), Z.editor.hidden = Y.previewMode, Z.markdownPreview.hidden = !Y.previewMode, ux(e), Yb(e), Zb(e), pb(); } function Jb(e) { if (!X) return; let t = dx(X.getHTML()); t === dx(e) || !fx(e) && t === dx(mx(e)) || (eb = !0, X.commands.setContent(e || "", { contentType: fx(e) ? "html" : "markdown", emitUpdate: !1 }), eb = !1); } function Yb(e) { let t = Y.folders.map((t) => { let n = document.createElement("option"); return n.value = t.id, n.textContent = t.name, n.selected = t.id === e.folder, n; }), n = t.map((e) => e.cloneNode(!0)); Z.noteFolderSelect.disabled = !1, Z.mobileNoteFolderSelect.disabled = !1, Z.noteFolderSelect.replaceChildren(...t), Z.mobileNoteFolderSelect.replaceChildren(...n); } function Xb() { [ "folders", "list", "editor" ].includes(Y.mobileView) || (Y.mobileView = "folders"), Z.appShell.dataset.mobileView = Y.mobileView; let e = ix(), t = ex(); Y.mobileView === "folders" ? (Z.mobileTitle.textContent = "文件夹", Z.mobileBackLabel.textContent = "返回", Z.mobileBack.classList.add("is-hidden"), Z.mobileSearchInput.value = Y.folderQuery, Z.mobileSearchInput.placeholder = "搜索文件夹") : Y.mobileView === "list" ? (Z.mobileTitle.textContent = e, Z.mobileBackLabel.textContent = "文件夹", Z.mobileBack.classList.remove("is-hidden"), Z.mobileSearchInput.value = Y.query, Z.mobileSearchInput.placeholder = "搜索") : (Z.mobileTitle.textContent = t ? _x(t) : "笔记", Z.mobileBackLabel.textContent = e, Z.mobileBack.classList.remove("is-hidden"), Z.mobileSearchInput.value = Y.query, Z.mobileSearchInput.placeholder = "搜索"), Y.mobileView !== "editor" && (Z.mobileActionMenu.hidden = !0), lx(); } function Zb(e) { Z.editedAt.dateTime = new Date(e.updatedAt).toISOString(), Z.editedAt.textContent = `编辑于 ${xx(e.updatedAt)}`; } function Qb() { let e = Y.query.trim().toLowerCase(); return Y.notes.filter((e) => Y.activeFolder === "recent" ? $b(e) : Y.activeFolder === "all" ? !0 : e.folder === Y.activeFolder).filter((t) => e ? `${_x(t)} ${t.body}`.toLowerCase().includes(e) : !0).sort((e, t) => t.updatedAt - e.updatedAt); } function $b(e) { return e.updatedAt >= Date.now() - 1e3 * 60 * 60 * 24 * 7; } function ex() { return Y.notes.find((e) => e.id === Y.selectedId) || null; } async function tx(e) { let t = Y.folders.find((t) => t.id === e); if (!t || t.id === "notes" || !window.confirm(`删除“${t.name}”?其中的笔记会移到“备忘录”。`)) return; let n = Y.folders.find((e) => e.id === "notes") || Y.folders[0]; Y.notes.forEach((e) => { e.folder === t.id && (e.folder = n.id, e.updatedAt = Date.now()); }), Y.folders = Y.folders.filter((e) => e.id !== t.id), Y.activeFolder === t.id && (Y.activeFolder = n.id, Y.selectedId = Qb()[0]?.id || null, Y.mobileView = "list"), $(); try { await Lb(t.id), Q("文件夹已删除", "ok"); let e = await xb(); Object.assign(Y, e), $(); } catch (e) { Q("删除失败", "error"), console.error("Failed to delete folder.", e); let t = await xb(); Object.assign(Y, t), $(); } } async function nx(e) { let t = Date.now(), n = Y.activeFolder, r = Y.selectedId, i = { id: cx(), name: e, createdAt: t, updatedAt: t, version: 1 }; Y.folders.push(i), Y.activeFolder = i.id, Y.selectedId = null, Y.mobileView = "list", $(), Ob(); try { let e = await Fb(i); Object.assign(i, e), Q("文件夹已创建", "ok"), $(); } catch (e) { Y.folders = Y.folders.filter((e) => e.id !== i.id), Y.activeFolder = n, Y.selectedId = r, Q("创建失败", "error"), $(), console.error("Failed to create folder.", e); } } async function rx(e, t) { let n = Y.folders.find((t) => t.id === e); if (!n || n.id === "notes") return; let r = n.name, i = n.updatedAt, a = n.version || 1; n.name = t, n.updatedAt = Date.now(), n.version = a + 1, $(), Ob(); try { let e = await Ib(n.id, { name: n.name, updatedAt: n.updatedAt, version: a }); e.status === "conflict" && e.folder ? (Object.assign(n, e.folder), Q("文件夹已被其他设备修改", "conflict")) : (Object.assign(n, e), Q("名称已更新", "ok")), $(); } catch (e) { n.name = r, n.updatedAt = i, n.version = a, Q("重命名失败", "error"), $(), console.error("Failed to rename folder.", e); } } function ix() { return Y.activeFolder === "all" ? "所有笔记" : Y.activeFolder === "recent" ? "最近编辑" : Y.folders.find((e) => e.id === Y.activeFolder)?.name || "笔记"; } function ax() { return Y.folders.some((e) => e.id === Y.activeFolder) ? Y.activeFolder : Y.folders[0]?.id || "notes"; } function ox(e) { let t = new Set(Y.folders.map((e) => e.name)); if (!t.has(e)) return e; let n = 2; for (; t.has(`${e} ${n}`);) n += 1; return `${e} ${n}`; } function sx() { return [{ id: "notes", name: "备忘录", version: 1 }]; } function cx() { let e = new Uint8Array(16); if (globalThis.crypto?.getRandomValues) globalThis.crypto.getRandomValues(e); else for (let t = 0; t < e.length; t += 1) e[t] = Math.floor(Math.random() * 256); return e[6] = e[6] & 15 | 64, e[8] = e[8] & 63 | 128, Gy(e); } function lx() { window.lucide?.createIcons({ attrs: { "stroke-width": 2 } }); } function ux(e) { Y.previewMode && (Z.markdownPreview.innerHTML = fx(e.body) ? px(e.body) : mx(e.body)); } function dx(e) { let t = String(e || "").trim(); return t === "" ? "" : t; } function fx(e) { return /<\/?(p|h[1-6]|ul|ol|li|blockquote|pre|code|strong|em|s|u|a|img|br|hr)\b/i.test(String(e || "")); } function px(e) { let t = document.createElement("template"); t.innerHTML = String(e || ""); let n = new Set([ "A", "BLOCKQUOTE", "BR", "CODE", "DIV", "EM", "H1", "H2", "H3", "H4", "H5", "H6", "HR", "IMG", "LI", "OL", "P", "PRE", "S", "STRONG", "U", "UL" ]); return [...t.content.querySelectorAll("*")].forEach((e) => { if (!n.has(e.tagName)) { e.replaceWith(...e.childNodes); return; } let t = e.getAttribute("href") || "", r = e.getAttribute("src") || "", i = e.getAttribute("alt") || "", a = (e.getAttribute("style") || "").match(/text-align:\s*(left|center|right)/i)?.[1] || "", o = e.getAttribute("data-align") || e.getAttribute("align") || ""; [...e.attributes].forEach((t) => e.removeAttribute(t.name)), a && [ "P", "H1", "H2", "H3", "H4", "H5", "H6" ].includes(e.tagName) && e.setAttribute("style", `text-align: ${a}`), e.tagName === "A" && /^(https?:|mailto:)/i.test(t) && (e.setAttribute("href", t), e.setAttribute("target", "_blank"), e.setAttribute("rel", "noreferrer")), e.tagName === "IMG" && (/^(data:image\/|https?:\/\/)/i.test(r) ? (e.setAttribute("src", r), e.setAttribute("alt", i), [ "left", "center", "right" ].includes(o) && e.setAttribute("data-align", o)) : e.remove()); }), t.innerHTML; } function mx(e) { let t = String(e || "").split("\n"), n = [], r = "", i = !1, a = [], o = () => { r &&= (n.push(`${r}>`), ""); }; return t.forEach((e) => { if (e.trim().startsWith("```")) { i ? (n.push(`
${gx(a.join("\n"))}`), a = [], i = !1) : (o(), i = !0);
return;
}
if (i) {
a.push(e);
return;
}
let t = e.trim();
if (!t) {
o();
return;
}
let s = t.match(/^(#{1,3})\s+(.+)$/);
if (s) {
o(), n.push(`${hx(t.slice(1).trim())}`); return; } o(), n.push(`
${hx(t)}
`); }), i && n.push(`${gx(a.join("\n"))}`), o(), n.join("");
}
function hx(e) {
return gx(e).replace(/`([^`]+)`/g, "$1").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*]+)\*/g, "$1").replace(/!\[([^\]]*)\]\((data:image\/[^)\s]+|https?:\/\/[^)\s]+)\)/g, "